software engineering cpcs351 dr. mai fadel. software and software engineering the software...

25
Software Engineering CPCS351 Dr. Mai Fadel

Upload: ronald-burns

Post on 23-Dec-2015

228 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Software Engineering CPCS351 Dr. Mai Fadel. Software and Software Engineering The software engineer’s job is to solve problems economically by developing

Software Engineering CPCS351

Dr. Mai Fadel

Page 2: Software Engineering CPCS351 Dr. Mai Fadel. Software and Software Engineering The software engineer’s job is to solve problems economically by developing

Software and Software Engineering

• The software engineer’s job is to solve problems economically by developing high-quality software.

Page 3: Software Engineering CPCS351 Dr. Mai Fadel. Software and Software Engineering The software engineer’s job is to solve problems economically by developing

The Nature of Software

• Similarly to mechanical engineers who design mechanical systems, software engineers design software systems.

• Software differs from the types of artifacts produced by other types of engineers (how it affects s/w development):– Software is largely intangible– The mass-production of duplicate pieces of software is trivial– The software industry is labour intensive– It is all too easy for an inadequately trained software developer

to create a piece of software that is difficult to understand and modify

– Software is physically easy to modify– Software does not wear out with use

Page 4: Software Engineering CPCS351 Dr. Mai Fadel. Software and Software Engineering The software engineer’s job is to solve problems economically by developing

Software Crisis• Software crisis is the situation of software development in

relationship with the expectation of the customers decades ago. – Much of existing software is relatively poor quality, and is steadily

becoming worse– There is strong demand for new and changed software, which

customers expect to be of high quality and to be produced rapidly• The result of the poor development process

– Software engineers have not been able to live up to the expectations of their managers and customers

– Many software are either never delivered, or are delivered late and over budget

– Many software systems that are delivered are never put to use because they have so many problems

– Other systems require major modification before they can be used

Page 5: Software Engineering CPCS351 Dr. Mai Fadel. Software and Software Engineering The software engineer’s job is to solve problems economically by developing

Software crisis- continued

The challenges of developing software systems– The complex nature of software– The laws of economics (customer demands)– The vagaries of human psychology

• In the author’s opinion the situation is still going on

• Objective: is to learn how to engineer software so that it meets expectations and doesn’t contribute to the crisis

Page 6: Software Engineering CPCS351 Dr. Mai Fadel. Software and Software Engineering The software engineer’s job is to solve problems economically by developing

Types of Software and their Differences

• Classification 1 of the types of software– Custom software: developed to meet the specific needs of a

particular customer and tends to be of little use to others. e.g. web sites, air-traffic control systems

– Generic software/ (COTS)/ shrink-wrapped software: is designed to be sold on the open market, to perform functions that many people need, and to run on general purpose computers. e.g. word processors, spreadsheets, web browsers, computer games.

– Embedded software: run specific hardware devices which are typically sold on the open market. e.g. washing machines, DVD players, and automobiles

• It is possible to take generic software and customize it and vise versa.

Type of softwarecondition in market

Embedded S/WHighest number of copies in use

Generic S/WHighest number of copies in use on general-purpose computers

Custom S/WWhat most developers work on

Page 7: Software Engineering CPCS351 Dr. Mai Fadel. Software and Software Engineering The software engineer’s job is to solve problems economically by developing

Types of Software and their Differences -continue• Classification 2 of the types of software

– Real-time software: • it has to react immediately (i.e. in real time) to stimuli from the

environment (e.g. the pushing of a button, a signal from a sensor)• Responsiveness must always be guaranteed- safety is a key

concern in their design• e.g. many of the embedded systems, custom systems that run

industrial plants and telephone networks– Data processing software:

• is used to run businesses.• It performs functions such as recording sales, managing accounts,

printing bills etc.• The design concern here is how to organize the data and provide

useful information gathered to the users so they can perform their work effectively

• Accuracy and security of data are of major concern• In traditional data processing tasks, data is gathered together in

batches to be processed later.– Some software has both real-time and data processing aspects.

Page 8: Software Engineering CPCS351 Dr. Mai Fadel. Software and Software Engineering The software engineer’s job is to solve problems economically by developing

What is Software Engineering?• Software Development and software engineering• Definition: software engineering is the process of solving

customers’ problems by the systematic development and evolution of large, high-quality software systems within cost, time and other constraints

• Solving customers problems– The goal of every software engineering project– It is important to recognize activities that are not consistent with

this goal, such as adding unnecessary features.– Recognize situations when it would be most cost effective not to

develop s/w at all, to develop simpler s/w or to purchase existing s/w.

– Software engineers must understand how people do their work, and understand what impact any proposed software may have on its user’s productivity (communicating & negotiating with people)

Page 9: Software Engineering CPCS351 Dr. Mai Fadel. Software and Software Engineering The software engineer’s job is to solve problems economically by developing

What is Software Engineering?-continue

• Systematic development and evolution – Developing software by applying well-understood techniques in an

organized and disciplined way.– Software engineering is a young field– There are many accepted practices that have been formally

standardized by bodies such as IEEE, ISO– Ensuring that the maintenance and evolution of existing systems is done

in a systematic way is an integral part of software engineering• Large, high-quality software systems

– Large systems with many functions and components , and thousands lines of code are too complex,

– difficult to understand, take too long to develop by one person, and challenging in dividing up the work among teams

– Software engineering techniques are essential for large system, and may be useful for small systems

– The end product must be of sufficient quality (there are techniques for improving quality and ensuring the product is of sufficient quality)

Page 10: Software Engineering CPCS351 Dr. Mai Fadel. Software and Software Engineering The software engineer’s job is to solve problems economically by developing

What is Software Engineering?-continue

• Cost, time and other constraints– One of the essential characteristics of engineering is

that you have to consider economic constraints as you try to solve each problem

– There are 3 main economic constraints– Software engineers must ensure their systems can be

produced within a limited budget and by a certain due date

– Achieving this requires careful planning and sticking to the plan in a disciplined way, and creating a realistic plan in the first place

– Why many software engineering projects fail to stick to the specified time and cost constraints?

Page 11: Software Engineering CPCS351 Dr. Mai Fadel. Software and Software Engineering The software engineer’s job is to solve problems economically by developing

Software Engineering as a Branch of the Engineering Profession

• People have talked about software engineering since 1968 when the term was coined at a NATO conference

• Only since the mid-1990s has there been a shift towards recognizing software engineering as a distinct branch of the engineering profession (i.e. have a license to legally perform consulting or self-employed work)

• How to obtain a license? Licensing agencies– Ensures sufficient engineering education & experience– Accredits educational institutions

• Licensed profession impose adherence to codes of ethics and taking responsibility for the produced work

• Universities have been establishing academic programs that focus on software engineering (distinct from computer science or computer engineering)

Page 12: Software Engineering CPCS351 Dr. Mai Fadel. Software and Software Engineering The software engineer’s job is to solve problems economically by developing

Stakeholders in Software Engineering

• Stakeholders are the people involved in a software engineering project (who are they and what do they look for in interacting with the software? Figure 1.1 page12)– Users: people who will use the software. They will likely appreciate new

software, but some may fear it would jeopardize their jobs– Customers/clients: people who make the decisions about ordering and

paying for the software. They may or may not be users. – Software Developers: people who develop and maintain the software

(such as software engineers). Special roles in a s/w engineering project include requirements specialists, database specialists, technical writers, & configuration management specialists, etc.

– Development Managers: people who run the organization that is developing the software, they usually have an educational background in business administration.

• In some cases, two, three or even all four of the stakeholders may be held by the same person

Page 13: Software Engineering CPCS351 Dr. Mai Fadel. Software and Software Engineering The software engineer’s job is to solve problems economically by developing

Software Quality• There is no single answer for the question: what ‘quality’

means? But the goal is to produce software with high quality

• Attributes of software quality (what is its impact on the software? How to measure it? what to do to improve it?)– Software engineers try to balance the relative importance of

these attributes towards the best overall quality– Usability, efficiency, reliability, maintainability, and reusability

• The importance of these attributes varies from stakeholder to another and form system to system. (examples)

• Often, software engineers improve one quality at the expense of another: trade-offs

• Good engineering practice sets objectives for quality that satisfies all stakeholders, and then designing the system to meet these objectives

Page 14: Software Engineering CPCS351 Dr. Mai Fadel. Software and Software Engineering The software engineer’s job is to solve problems economically by developing

Software Engineering Projects

• S/w engineering work is normally divided into projects.• For small s/w systems there may be a single team of

three or four developers working on the project• Evolutionary projects: (those that involve modifying an

existing system) corrective, adaptive, enhancement, re-engineering or perfective

• Greenfield projects (those that involve starting to develop a system from scratch)

• Projects that involve building on a framework or a set of existing components (those that involve building most of a new system from existing components, while developing new software only from missing details)

Page 15: Software Engineering CPCS351 Dr. Mai Fadel. Software and Software Engineering The software engineer’s job is to solve problems economically by developing

Evolutionary Projects

• Most s/w projects are of this type- maintenance• For many people, maintenance implies keeping

something running by simply fixing problems, but without adding significant new features

• There is constant pressure from users and customers not only to fix problems but to make many other kinds of changes

• Radical modifications/ evolution should be applied after several years of frequent changes resulting in software that barely resembles their original state

Page 16: Software Engineering CPCS351 Dr. Mai Fadel. Software and Software Engineering The software engineer’s job is to solve problems economically by developing

Types of Evolutionary Project

– Corrective projects: involve fixing defects– Adaptive projects: involve changing the system in response to

changes in the environment in which the software runs (a new version of Operating system, database, a new set of tax laws)

– Enhancement projects involves adding new features– Re-engineering/ perfective projects involve changing the system

internally so that it is more maintainable, without making significant changes that the user will notice

• Most evolutionary projects involve more than one of the above

• Legacy systems are software systems that require maintaining when a lot of the design information is missing

Page 17: Software Engineering CPCS351 Dr. Mai Fadel. Software and Software Engineering The software engineer’s job is to solve problems economically by developing

Greenfield Projects

• Green projects are less common than evolutionary

• Developers have a wider freedom to be creative about the design – no constraints of design decisions & errors made by predecessors

• Take a lot of work to build

Page 18: Software Engineering CPCS351 Dr. Mai Fadel. Software and Software Engineering The software engineer’s job is to solve problems economically by developing

Projects that involve reusing design/ code

• Starts with a framework or involves plugging together several components that are already developed and provide significant functionality

• A framework is a software system especially designed to be reused in different projects, or in various products in product line. A framework contains important functionality, but must be adapted to handle the requirements of particular customers or products

• e.g. framework for ticketing– Basic functionality for reserving and printing tickets– It can be used for theatres, cinema, sports events, a holiday package

• e.g. of the use of components (gluing an accounting package and a package for tracking meetings=> a product for a lawyer’s office to create bills for clients’ meetings)

• Advantages– Benefit from software that has been shown to be reliable, since the

framework is tested– Gives the freedom to innovate as with the case with Greenfield projects

Page 19: Software Engineering CPCS351 Dr. Mai Fadel. Software and Software Engineering The software engineer’s job is to solve problems economically by developing

Activities Common to Software Projects

• Requirements and specification• Design• Modeling• Programming• Quality assurance• Deployment• Managing software configuration• Managing the process

Page 20: Software Engineering CPCS351 Dr. Mai Fadel. Software and Software Engineering The software engineer’s job is to solve problems economically by developing

Requirements and Specification• It is important to, first, understand the problems, the

customer’s business environment, and the available technology which can be used to solve the problems

• After that, meet with the customers and users to decide on a course of action that will solve the problems (development or modification)

• Then decide in detail what facilitates the software should provide

• Involved activities: domain analysis, defining the problem, requirement gathering, requirement analysis, requirement specification (pp. 16-17)

• Important principle of requirement is to separate the ‘what’ from the ‘how’ – i.e. requirements from design and implementation

Page 21: Software Engineering CPCS351 Dr. Mai Fadel. Software and Software Engineering The software engineer’s job is to solve problems economically by developing

Design• Design is the process of deciding how the

requirements should be implemented using the available technology

• Some of the important activities during design: system engineering, determining the software architecture, detailed designs, user interface design, etc.

• For large systems, software engineers work on architectural design in conjunction with high-level requirements to effectively divide the system into subsystems

• For small systems, requirement precede design to avoid re-doing the design if requirements change

Page 22: Software Engineering CPCS351 Dr. Mai Fadel. Software and Software Engineering The software engineer’s job is to solve problems economically by developing

Modeling

• Modeling is the process of creating a representation of the domain or the software

• Various modeling approaches can be used during both requirements analysis and design.

• e.g. Use case, structural, and dynamic/ behavioural modeling

• Modeling can be performed visually, using diagrams, or else using semi-formal or formal languages that express the information in a systematically or mathematically.

• e.g. UML with a semi-formal notation & diagrams

Page 23: Software Engineering CPCS351 Dr. Mai Fadel. Software and Software Engineering The software engineer’s job is to solve problems economically by developing

Programming• It involves the translation of higher-level designs

into particular programming languages• The final stage of design since it involves

making decisions about the appropriate constructs, variable declarations, etc.

• Programmers: people who do higher-design activities and programming

• Coders: perform only programming with no design

• Research is done on automating programming, e.g. code generators. However there will still be a need for manual programming

Page 24: Software Engineering CPCS351 Dr. Mai Fadel. Software and Software Engineering The software engineer’s job is to solve problems economically by developing

Quality Assurance (QA)

• QA encompasses all the processes needed to ensure that the quality objectives discussed in Section 1.5 are met

• Occurs throughout the project• Involved activities: reviews and inspection, and

testing• Validation and Verification (V & V)

– Validation: the process of determining whether the requirements will solve the customer’s problem

– Verification: the process of making sure the requirements have been adhered to

Page 25: Software Engineering CPCS351 Dr. Mai Fadel. Software and Software Engineering The software engineer’s job is to solve problems economically by developing

Other activities• Deployment: involves distributing and installing the

software and any other components of the system such as databases, special hardware, etc.

• Managing software configurations: involves identifying all the components that compose a software system, including files containing requirements, design, and source code.

• Managing the Process: managers lead the other activities, and undertake the following task:– Estimating the cost of the system– Planning– Periodically Revising the expected estimates and planning