CC20O7N Software Engineering 1
CC2007NCC2007NSoftware Engineering 1Software Engineering 1
Part 1Part 1Introduction to Software Introduction to Software
EngineeringEngineering
CC20O7N Software Engineering 1
ContentsContents
• Software Application Areas• Problems of Large Software Systems• The Software Crisis• What Is Software Engineering?• Software Life Cycle - Generic Phases/Stages
CC20O7N Software Engineering 1
Software Application AreasSoftware Application Areas• System software• Application/Business software• Engineering and scientific software• Embedded software• Product-line software (PC software)• Web-applications• Artificial intelligence software
CC20O7N Software Engineering 1
Problems with Large Problems with Large Software SystemsSoftware Systems
• Delivery• Costs• Correctness• Efficiency
CC20O7N Software Engineering 1
Software Costs Software Costs (world-wide)(world-wide)
0
100
200
300
400
1985 1990 1995
$ bi
llion
s
CC20O7N Software Engineering 1
Relative Cost of Hardware Relative Cost of Hardware and Softwareand Software
0
50
100
1955 1960 1965 1970 1975 1980 1985 1990
% C
ost a
nd E
ffort Hardware
Software
0
50
100
1955 1960 1965 1970 1975 1980 1985 1990
% C
ost a
nd E
ffort
0
50
100
1955 1960 1965 1970 1975 1980 1985 1990
% C
ost a
nd E
ffort Hardware
Software
CC20O7N Software Engineering 1
Software EngineeringSoftware Engineering
• Concerned with:– building large programs – maintenance– efficiency of development and maintenance– quality– management
CC20O7N Software Engineering 1
Three Major Phases in the Three Major Phases in the Software Life CycleSoftware Life Cycle
• Definition phase• Development phase• Maintenance phase
CC20O7N Software Engineering 1
Generic Stages in the Generic Stages in the Software Life CycleSoftware Life Cycle
}
• Strategy planning• Feasibility study• Requirements analysis
Definition phase}Development
phase
Design (system design, detailed design)
Implementation Testing
}Maintenance Maintenance phase
CC20O7N Software Engineering 1
Costs of Software Life Cycle StagesCosts of Software Life Cycle Stages
%
0
50
100
Analysis andDesign
Coding Testing Maintenance
CC20O7N Software Engineering 1
SummarySummary• Discussed
– the importance of software and the wide range of software applications
– problems with software - the software crisis• Presented
– several definitions and the main goals of software engineering
• Identified– generic phases and stages in the software life cycle
CC20O7N Software Engineering 1
CC2007NCC2007NSoftware Engineering 1Software Engineering 1
Part 2Part 2
The Software Life Cycle ModelsThe Software Life Cycle Models
CC20O7N Software Engineering 1
ContentsContents
• Waterfall Model• Evolutionary Models• Incremental Development
CC20O7N Software Engineering 1
Waterfall Model - BasicWaterfall Model - Basic
Feasi-bilityStudy Req.
AnalysisDesign
TestingMainte-nance
Implemen-tation
Feasi-bilityStudy Req.
AnalysisDesign
TestingMainte-nance
Implemen-tation
CC20O7N Software Engineering 1
Waterfall ModelWaterfall ModelAdvantages & DisadvantagesAdvantages & Disadvantages
• It is easy to identify milestones (+)• It is easy to separate one stage from another
(+)• Documentation is produced(+)• It is totally unrealistic! (---)
CC20O7N Software Engineering 1
Waterfall Model - EnhancedWaterfall Model - Enhanced
Feasi-bilityStudy Req.
AnalysisDesign
TestingMainte-nance
Implemen-tation
Feasi-bilityStudy Req.
AnalysisDesign
TestingMainte-nance
Implemen-tation
CC20O7N Software Engineering 1
Waterfall – EnhancedWaterfall – EnhancedAdvantages & DisadvantagesAdvantages & Disadvantages
• It is easy to identify milestones (+)• It is easy to separate one stage from another (+)• Software is properly documented (+)• Premature requirements, design, etc. (-)• It assumes that requirements can be precisely specified
(-)• It requires the customer to be patient (-)• It is still unrealistic!
CC20O7N Software Engineering 1
Prototyping ProcessPrototyping Process
Establish prototype objectives
Define prototype
functionality
Develop prototype
Evaluate prototype
Prototyping plan
Outline definition
Executable prototype
Evaluationreport
CC20O7N Software Engineering 1
Prototype (as a tool for Prototype (as a tool for requirements analysis) - Benefitsrequirements analysis) - Benefits
• Misunderstandings between software developers and users identified as the system functions are demonstrated
• Missing user services may be detected• Difficult-to-use or confusing user services may be
identified and refined• Incomplete/inconsistent requirements found as the
prototype is developed• A working, albeit limited, system is available quickly for
demonstration to management
CC20O7N Software Engineering 1
Throw-Away PrototypingThrow-Away Prototyping
* At this point the prototype is thrown away!** Development phase of the actual system
Establish outline spec.
Design & implement
system
Develop prototype
Evaluate prototype
Specify system
**
*
Validate system
CC20O7N Software Engineering 1
Throw-Away Prototype - ProblemsThrow-Away Prototype - Problems
• Sometimes the cost of prototype development represents an unacceptably large fraction of the total cost
• Customers are likely to force the developer to convert the prototype to the working system using a few fixes
• The developer may become familiar with the prototype and reluctant to discard it
CC20O7N Software Engineering 1
Evolutionary PrototypingEvolutionary Prototyping
Develop abstract
specification
system
Deliver system
System adequate?
NO
YES
Develop abstract
specification
Develop abstract
specificationBuild prototype Use prototype
system
Deliver system
System adequate?
NO
YES
CC20O7N Software Engineering 1
Evolutionary PrototypingEvolutionary PrototypingAdvantages & DisadvantagesAdvantages & Disadvantages
• Systems are developed and delivered rapidly (+)• Costs are reduced (+)• User involvement! (+)• The development process is ‘invisible’ to managers (+)• Systems are usually poorly structured! (-)
CC20O7N Software Engineering 1
Incremental DevelopmentIncremental Development
Integrate incrementIntegrate increment
System complete?
Designsystem
architecture
Specifysystem
increment
Buildsystem
incrementValidate
increment
Definesystem
deliverables
Validatesystem
Deliver finalsystem
YES
NO
Reproduced from: Sommerville
System complete?
Designsystem
architecture
Specifysystem
increment
Specifysystem
increment
Buildsystem
increment
Buildsystem
incrementValidate
increment
Definesystem
deliverables
Validatesystem
Deliver finalsystem
YES
NO
Reproduced from: Sommerville
CC20O7N Software Engineering 1
Incremental DevelopmentIncremental DevelopmentAdvantages & DisadvantagesAdvantages & Disadvantages
• No ‘big bang’ effect (+)• Attention on the essential features (+)• Customers can use the ‘partial’ software as soon as it is available (+)• Early increments can provide a useful feedback (+)• The requirements tend to constrained by the architecture (-)• Problems with contracts (-)• Difficult to map the customer’s requirements onto increments (-)• Problems with basic facilities (-)
CC20O7N Software Engineering 1
SummarySummary• Software life cycle models
– all of them include the main generic stages– logic of the software process is different in each
• The spiral model, which subsumes the other models, should be investigated by students.
• Object orientation – emphasis on reusability– software development process will become one of
assembly rather than one of creation