Lecture 4 André van der Hoek Todays Lecture Quick recap Recurring and fundamental principles of software engineering BuildandFix Build first version Modify until client is satisfied ID: 718725
Download Presentation The PPT/PDF document "Introduction to Software Engineering" is the property of its rightful owner. Permission is granted to download and print the materials on this web site for personal, non-commercial use only, and to display it on your personal computer provided you do not modify the materials and that you retain all copyright notices contained in the materials. By downloading content from our website, you accept the terms of this agreement.
Slide1
Introduction to Software EngineeringLecture 4
André
van der
HoekSlide2
Today’s Lecture
Quick recap
Recurring
and fundamental principles of software
engineeringSlide3
Build-and-Fix
Build first
version
Modify until
client is satisfied
Operations mode
Retirement
Development
MaintenanceSlide4
Waterfall
Operations mode
Retirement
Requirements
phase
Verify
Specification
phase
Verify
Design
phase
Verify
Implementation
phase
Test
Integration
phase
Test
Changed
requirements
Verify
Development
MaintenanceSlide5
Rapid Prototyping
Operations mode
Retirement
Build and discard
simple prototype
Verify
Specification
phase
Verify
Design
phase
Verify
Implementation
phase
Test
Integration
phase
Test
Changed
requirements
Verify
Development
MaintenanceSlide6
FOR EACH BUILD
Perform detailed design,
implementation, and
integration. Test.
Deliver to client.
Incremental
Operations mode
Retirement
Requirements
phase
Verify
Specification
phase
Verify
Architectural
design
Verify
Development
MaintenanceSlide7
Synchronize-and-Stabilize
Specifications
Implementation,
Integration
Deliver to
client (version 1)
Specifications
Design
Implementation,
Integration
Deliver to
client (version 2)
Specifications
Design
Implementation,
Integration
Deliver to
client (version 3)
Specifications
Design
Implementation,
Integration
Deliver to
client (version n)
.
.
.
.
.
.
.
.
.
Specification team
Design team
Implementation/integration team
DesignSlide8
Spiral
Risk
analysis
Risk
analysis
Risk
analysis
Risk
analysis
Rapid
prototype
Specification
Design
Implementation
Verify
Verify
Verify
VerifySlide9
A Comparison of Life Cycle Models
Model
Strengths
Weaknesses
Build-and-Fix
Fine for small programs that do not require much maintenance
Totally unsatisfactorily for nontrivial programs
Waterfall
Disciplined approach
Document driven
Delivered product may not meet client’s needs
Rapid
Prototyping
Ensures that delivered product meets client’s needs
A need to build twice
Cannot always be used
Incremental
Maximizes early return on investment
Promotes maintainability
Requires open architecture
May degenerate into build-and-fix
Synchronize-
and-stabilize
Future user’s needs are met
Ensures components can be successfully integrated
Has not been widely used other than in Microsoft
Spiral
Incorporates features of all the above models
Can be used only for large-scale products
Developers have to be competent at risk-analysisSlide10
ICS 52 Software Life Cycle
Requirements specification
Interview customer (TA)
Focus on “what”, not “how”
Architectural and module design
Based on provided “official” requirements specificationFocus on interfaces
ImplementationBased on provided “official” designFocus on good implementation techniquesTestingBased on provided “official” implementationFocus on fault coverage and discoverySlide11
Recurring, Fundamental Principles
Rigor and formality
Separation of concerns
Modularity
Abstraction
Anticipation of changeGeneralityIncrementality
These principles apply to all aspects of software engineeringSlide12
Rigor and Formality
Creativity often leads to imprecision and inaccuracy
Software development is a creative process
Software development can tolerate neither imprecision nor inaccuracy
Rigor helps to…
…produce more reliable products…control cost
…increase confidence in productsFormality is “rigor – mathematically sound”Often used for mission critical systemsSlide13
Separation of Concerns
Trying to do too many things at the same time often leads to mistakes
Software development is comprised of many parallel tasks, goals, and responsibilities
Software development cannot tolerate mistakes
Separation of concerns helps to…
…divide a problem into parts that can be dealt with separately…create an understanding of how the parts depend on/relate to each other Slide14
Example Dimensions of Separation
Time
Requirements, design, implementation, testing, …
Dial, receive confirmation, connect, talk, …
Qualities
Efficiency and user friendlinessCorrectness and portabilityViews
Data flow and control flowManagement and developmentSlide15
Modularity
Separation into individual, physical parts
Decomposability
Divide and conquer
Composability
Component assemblyReuseUnderstandingLocalization
Special case of separation of concernsDivide and conquer “horizontally”“Brick”-effectSlide16
Modularity
Big
Small
Small
Small
SmallSlide17
Abstraction
Separation into individual, logical parts
Relevant versus irrelevant details
Use relevant details to solve task at hand
Ignore irrelevant details
Special case of separation of concernsDivide and conquer “vertically”“Iceberg”-effectSlide18
Abstraction
Big
Abstraction
DetailsSlide19
Modularity + Abstraction
Big
D
etails
Details
Details
Details
Abstraction
Abstraction
Abstraction
AbstractionSlide20
Anticipation of Change
Not anticipating change often leads to high cost and unmanageable software
Software development deals with inherently changing requirements
Software development can tolerate neither high cost nor unmanageable software
Anticipation of change helps to…
…create a software infrastructure that absorbs changes easily…enhance reusability of components
…control cost in the long runSlide21
Generality
Not generalizing often leads to continuous redevelopment of similar solutions
Software development involves building many similar kinds of software (components)
Software development cannot tolerate building the same thing over and over again
Generality leads to…
…increased reusability
…increased reliability…faster development…reduced costSlide22
Incrementality
Delivering a large product as a whole, and in one shot, often leads to dissatisfaction and a product that is “not quite right”
Software development typically delivers one final product
Software development cannot tolerate a product that is not quite right or dissatisfies the customer
Incrementality leads to…
…the development of better products
…early identification of problems…an increase in customer satisfactionActive involvement of customerSlide23
Cohesion
VERSUSSlide24
Coupling
VERSUSSlide25
Provided Interface
Implementation
Required Interface
A Good Separation of Concerns, 1
Abstraction through the use of provided/required interfaces
Modularity through the use of components
Low coupling through the use of hierarchies
High cohesion through the use of coherent implementations
Provided Interface
Implementation
Required Interface
Provided Interface
Implementation
Required Interface
Provided Interface
Implementation
Required Interface
Provided Interface
Implementation
Required Interface
Provided Interface
Implementation
Required Interface
Provided Interface
Implementation
Required Interface
Provided Interface
Implementation
Required Interface
Provided Interface
Implementation
Required InterfaceSlide26
Provided Interface
Implementation
Required Interface
Provided Interface
Implementation
Required Interface
Provided Interface
Implementation
Required Interface
Provided Interface
Implementation
Required Interface
Provided Interface
Implementation
Required Interface
Provided Interface
Implementation
Required Interface
Provided Interface
Implementation
Required Interface
A Good Separation of Concerns, 2
Abstraction through the use of provided/required interfaces
Modularity through the use of components
Low coupling through the use of a central “blackboard”
High cohesion through the use of coherent implementations
Implementation
Provided InterfaceSlide27
Benefit 1: Anticipating Change
Separating concerns anticipates change
Provided Interface
Implementation
Required Interface
Provided Interface
Implementation
Required Interface
Provided Interface
Implementation
Required Interface
Provided Interface
Implementation
Required Interface
Provided Interface
Implementation
Required Interface
Provided Interface
Implementation
Required Interface
Provided Interface
Implementation
Required Interface
Implementation
Provided InterfaceSlide28
Benefit 1: Anticipating Change
Separating concerns anticipates change
Provided Interface
Implementation
Required Interface
Provided Interface
Implementation
Required Interface
Provided Interface
Implementation
Required Interface
Provided Interface
Implementation
Required Interface
Provided Interface
Implementation
Required Interface
Provided Interface
Implementation
Required Interface
Provided Interface
Implementation
Required Interface
Implementation
Provided InterfaceSlide29
Benefit 2: Promoting Generality
Separating concerns promotes generality
Provided Interface
Implementation
Required Interface
Provided Interface
Implementation
Required Interface
Provided Interface
Implementation
Required Interface
Provided Interface
Implementation
Required Interface
Provided Interface
Implementation
Required Interface
Provided Interface
Implementation
Required Interface
Provided Interface
Implementation
Required Interface
Provided Interface
Implementation
Required Interface
Provided Interface
Implementation
Required Interface
Provided Interface
Implementation
Required InterfaceSlide30
Benefit 3: Facilitating Incrementality
Separating concerns facilitates incrementality
Provided Interface
Implementation
Required Interface
Provided Interface
Implementation
Required Interface
Provided Interface
Implementation
Required Interface
Provided Interface
Implementation
Required Interface
Provided Interface
Implementation
Required Interface
Provided Interface
Implementation
Required Interface
Provided Interface
Implementation
Required Interface
Implementation
Provided Interface
Provided Interface
Implementation
Required Interface
Provided Interface
Implementation
Required InterfaceSlide31
Recurring, Fundamental Principles
Rigor and formality
Separation of concerns
Modularity
Abstraction
Anticipation of changeGeneralityIncrementality
These principles apply to all aspects of software engineeringSlide32
Your Tasks
Read and study slides of this lecture
Read Chapters 6.2, 12.1.1, 12.1.2
of van
Vliet