Beruflich Dokumente
Kultur Dokumente
Engineering
CS 330
Spring 2007
Process
People
Technology
A better view
Process and Technology supporting people
People
Processes
Technology
What is software?
Computer programs and associated documentation
Engineering
Engineering is
The application of scientific principles and methods to the
construction of useful structures & machines
Examples
Mechanical engineering
Computer engineering
Civil engineering
Chemical engineering
Electrical engineering
Nuclear engineering
Aeronautical engineering
Software Engineering
The term is 35 years old: NATO Conferences
Garmisch, Germany, October 7-11, 1968
Rome, Italy, October 27-31, 1969
Methods/methodologies/techniques
Languages
Tools
Processes
Software Engineering in a
Nutshell
Development of software systems whose
size/complexity warrants team(s) of engineers
multi-person construction of multi-version software
[Parnas 1987]
Scope
study of software process, development/management
principles, techniques, tools and notations
Goal
production of quality software, delivered on time, within
budget, satisfying customers requirements and users needs
Software Engineering
is concerned with
theory
fundamentals
Difficulties?
SE is a unique brand of engineering
Software is malleable
Software construction is human-intensive
Software is intangible and generally invisible
Software problems are unprecedentedly complex
Software directly depends upon the hardware
It is at the top of the system engineering food chain
Single developer
Toy applications
Short lifespan
Single or few stakeholders
Architect = Developer = Manager = Tester = Customer = User
One-of-a-kind systems
Built from scratch
Minimal maintenance
System families
Reuse to amortize costs
Maintenance accounts for 60%-80% of overall
development costs
30
10
1
Requirements
2
Specification
3
Planning
4
Design
Implementation Integration
Maintenance
Mythical Man-Month
by Fred Brooks
Published in 1975, republished in 1995
Experience managing development of OS/360 in 1964-65
Central argument
Large projects suffer management problems different in kind than small
ones, due to division in labor
Critical need is the preservation of the conceptual integrity of the
product itself
Central conclusions
Conceptual integrity achieved through chief architect
Implementation achieved through well-managed effort
software developers are not interchangeable work units.
Brooks Law
Adding personnel to a late project makes it later
Software Engineering:
From Principles to Tools
TOOLS
METHODOLOGIES
METHODS AND
TECHNIQUES
PRINCIPLES
Software Qualities
Qualities are goals in the practice of
software engineering, and directly relate to
many of the guiding principles.
External vs. Internal qualities
Product vs. Process qualities
Software Qualities
Critical Quality Attributes
Correctness
Maintainability
Dependability
Usability
Reliability
Other Attributes
Completeness
Compatibility
Portability
Internationalization
Understandability
Scalability
Robustness
Testability
Reusability
Customizability
Efficiency
Reliability
statistical property
probability that software will operate as expected
over a given period of time/inputs
relative
Usability
ability of end-users to easily use software
extremely subjective
Verifiability
ease of establishing desired properties
performed by formal analysis or testing
internal quality
Evolvability
ability to add or modify functionality
addresses adaptive and perfective maintenance
problem: evolution of implementation is too easy
evolution should start at requirements or design
Interoperability
ability of software (sub)systems to cooperate with
others
easily integratable into larger systems
common techniques include APIs, distributed
programming interfaces (CORBA, DCOM), plug-in
protocols, etc.
Process Principles
Prescribes all major activities
Uses resources, within a set of constraints, to
produce intermediate and final products
May be composed of sub-processes
Each activity has entry and exit criteria
Activities are organized in a sequence
Has a set of guiding principles to explain goals
Constraints may apply to activity, resource or
product
Conceptual/System/Architectural Design
Detailed/Program Design
Implementation/Coding
Unit & Integration Testing
System Testing/Validation
System Delivery/Deployment
Maintenance
Note there are many variations on the names. You are
responsible for the main categories above (an on the next
pages)..
Prototyping Model
Spiral Model
Plan/Schedule
Design
Replan/Reschedule
Implementation
Integration
Validation
Deployment
V Model
OPERATION
& MAINTENANCE
Validate requirements
REQUIREMENTS
ANALYSIS
ACCEPTANCE
TESTING
SYSTEM
DESIGN
Verify design
PROGRAM
DESIGN
[Pfleeger98]
SYSTEM
TESTING
CODING
DEVELOPERS
Build Release 1
Build Release 2
Build Release 3
USERS
Time
Use Release 1
Use Release 2
Production systems
Use Release 3
[Pfleeger98]
Requirements
Design
Implementation
Integration
Validation
Deployment
Prototyping Model
Listen to
Customer
Build/Revise
Mock-Up
Customer
Test-drives
Mock-up
[Pressman97]
Prototyping Model
LIST OF
REVISIONS
revise
prototype
LIST OF
REVISIONS
user/
customer
review
PROTOTYPE
REQUIREMENTS
SYSTEM
REQUIREMENTS
(sometimes informal
or incomplete)
[Pfleeger98]
LIST OF
REVISIONS
PROTOTYPE
DESIGN
PROTOTYPE
SYSTEM
TEST
DELIVERED
SYSTEM
Spiral development
Process is represented as a spiral rather than as a
sequence of activities with backtracking.
Each loop in the spiral represents a phase in the
process.
No fixed phases such as specification or design loops in the spiral are chosen depending on what
is required.
Risks are explicitly assessed and resolved
throughout the process.
Evaluate alternatives,
identify, resolve risks
Risk
analysis
Risk
analysis
Risk
analysis
REVIEW
Requirements plan
Life-cycle plan
Plan ne xt phase
Operational
protoype
Pr ototype 3
Pr ototype 2
Risk
analysis Pr ototype 1
S/W
requirements
Development
plan
Requirement
validation
Integration
and test plan
Design
V&V
Acceptance
test
Service
Product
design
Detailed
design
Code
Unit test
Integration
test
Develop, verify
next-level product
Planning
The project is reviewed and the next phase of the spiral
is planned.
Evolutionary development
Exploratory development
Objective is to work with customers and to evolve a
final system from an initial outline specification.
Should start with well-understood requirements and
add new features as proposed by the customer.
Throw-away prototyping
Objective is to understand the system requirements.
Should start with poorly understood requirements to
clarify what is really needed.
Evolutionary development
Concurrent
activities
Specifi ca
tion
Outline
description
Development
Validation
Initial
version
Intermediate
versions
Final
version
Evolutionary development
Problems
Lack of process visibility;
Systems are often poorly structured;
Special skills (e.g. in languages for rapid prototyping)
may be required.
Applicability
For small or medium-size interactive systems;
For parts of large systems (e.g. the user interface);
For short-lifetime systems.
Component-based software
engineering
Based on systematic reuse where systems are
integrated from existing components or COTS
(Commercial-off-the-shelf) systems.
Process stages
Component analysis;
Requirements modification;
System design with reuse;
Development and integration.
Reuse-oriented development
Requirements
specifi cation
Component
analysis
Requirements
modifi cation
System design
with reuse
Development
and integ
ration
System
validation
Component-Based Development
Develop generally applicable components of a
reasonable size and reuse them across systems
Make sure they are adaptable to varying contexts
Extend the idea beyond code to other
development artifacts
Question: what comes first?
Integration, then deployment
Deployment, then integration
Process iteration
System requirements ALWAYS evolve in the
course of a project so process iteration where
earlier stages are reworked is always part of the
process for large systems.
Iteration can be applied to any of the generic
process models.
Two (related) approaches
Incremental delivery;
Spiral development.
Incremental delivery
Rather than deliver the system as a single delivery,
the development and delivery is broken down into
increments with each increment delivering part of
the required functionality.
User requirements are prioritised and the highest
priority requirements are included in early
increments.
Once the development of an increment is started,
the requirements are frozen though requirements
for later increments can continue to evolve.
Incremental development
Defi ne outline
requirements
Develop system
increment
Assign requirements
to increments
Validate
increment
Design system
architectur
e
Integrate
increment
Validate
system
Final
system
System incomplete
Extreme programming
An approach to development based on the
development and delivery of very small
increments of functionality.
Relies on constant code improvement, user
involvement in the development team and
pairwise programming.
Covered in Chapter 17
Plan/Schedule
Design
Replan/Reschedule
Implementation
Integration
Validation
Deployment
Software specification
The process of establishing what services are
required and the constraints on the systems
operation and development.
Requirements engineering process
Feasibility study;
Requirements elicitation and analysis;
Requirements specification;
Requirements validation.
Requirements
Problem Definition Requirements/Specification
determine exactly what the customer and user need (maybe want)
Requirements develop a contract with the customer
Specification say what the software product is to do
Difficulties
Requirements
elicitation and
analy sis
Requirements
specifi cation
Requirements
validation
Feasibility
report
System
models
User and system
requirements
Requirements
document
Implementation
Translate this structure into an executable program;
Architectural design
Abstract specification
Interface design
Component design
Data structure design
Algorithm design
Requir
ements
specifi ca
tion
Design acti
vities
Architectur
al
design
Abstract
specifi ca
tion
Interface
design
Component
design
Data
structur
e
design
Algorithm
design
System
architectur
e
Software
specifi ca
tion
Interface
specifi ca
tion
Component
specifi ca
tion
Data
structur
e
specifi ca
tion
Algorithm
specifi ca
tion
Design pr
oducts
Structured methods
Systematic approaches to developing a software
design.
The design is usually documented as a set of
graphical models.
Possible models
Object model;
Sequence model;
State transition model;
Structural model;
Data-flow model.
Architecture/Design
Requirements/Specification Architecture/Design
architecture: decompose software into
modules/objects/components with interfaces
design: develop module/object/component specifications
(algorithms, data types) and communication details
maintain a record of design decisions and traceability
specifies how the software product is to do its tasks
Difficulties
miscommunication between module designers
design may be inconsistent, incomplete, ambiguous
How to achieve a requirement may be unknown
Planning/Scheduling
Before undertaking cost of development, need to
estimate the costs/sizes of various steps
Estimate Code size
Estimate tools needed
Estimate personnel
Difficulties
module interaction errors
order of integration may influence quality and
productivity
Locate
error
Design
error repair
Repair
error
Re-test
program
Software validation
Verification and validation (V & V) is intended
to show that a system conforms to its
specification and meets the requirements of the
system customer.
Involves checking and review processes and
system testing.
System testing involves executing the system
with test cases that are derived from the
specification of the real data to be processed by
the system.
Static
Science
Formal verification
Informal reviews and walkthroughs
Testing
Dynamic
Engineering
White box vs. black box
Structural vs. behavioral
Issues of test adequacy
Component
testing
System
testing
Ac c eptanc e
testing
Testing stages
Component or unit testing
System testing
Acceptance testing
Testing phases
Requirements
specifi ca
tion
System
specifi ca
tion
System
integration
test plan
Acceptance
test plan
Service
System
design
Acceptance
test
Detailed
design
Sub-system
integration
test plan
System
integration test
Sub-system
integration test
Module and
unit code
and test
Quality Assurance
30
1
Requirements Specification
3
Planning
4
Design
10
ImplementationIntegration
Maintenance
Deployment
Completed End-User Documentation
Separate from Developer documentation
Installation Process(es)
Customer test procedures
Support Processes (help desk, etc)
Trouble Tracking
Repair/rework to address bugs
Regression testing (as bugs are fixed)
Difficulties
Rigid or fragile designs
lack of documentation
personnel turnover
Software evolution
Software is inherently flexible and can change.
As requirements change through changing
business circumstances, the software that supports
the business must also evolve and change.
Although there has been a demarcation between
development and evolution (maintenance) this is
increasingly irrelevant as fewer and fewer
systems are completely new.
System evolution
Defi ne system
requirements
Assess existing
systems
Existing
systems
Propose system
changes
Modify
systems
New
system
Car
Driver
Configuration Management
CM is a discipline whose goal is to control
changes to large software through the
functions of
Component identification
Change tracking
Version selection and baselining
Managing simultaneous updates (team work)
Build processes with automated regression
testing
Software manufacture
CM in Action
1.0
1.1
1.2
2.0
1.3
2.1
1.4
2.2
1.5
4.0
3.0
3.1
Build Tools
Necessary for large projects. Keep track of what depends
upon on what, and what needs recompiled or regenerated
when things change.
Important even for small 1-person projects as soon as you
have multiple files.
Can do much more than just compile, can generate
document (if using code-based docs), generate manufactured
code (e.g. SOAP interfaces), even send emails or suggest
alternatives.
E.g. in our IUE project, edit some files compile was one in seconds,
edit another and a rebuild taking days would be needed. If more than
30 files impacted, our make process recommend a new branch to
avoid conflicts!
Debugging Tools
How do you see what the code is really doing (not
what it seems it should do)?
How to you see what happened to code during
compiler optimization?
How do you find/track down the cause of
Segfault/GFP in code youve never seen before?
How can you test various possibilities without
generating special code or recompiling.
How do you track down a memory leak?
Workbenches
Tools
Editors
Compilers
File
comparators
Analysis and
design
Multi-method
workbenches
Integrated
environments
Programming
Single-method
workbenches
Environments
Process-centr
ed
environments
Testing
General-purpose
workbenches
Language-specifi c
workbenches
Phaseiteration
Inception
Elaboration
Construction
Transition
RUP phases
Inception
Establish the business case for the system.
Elaboration
Develop an understanding of the problem domain and
the system architecture.
Construction
System design, programming and testing.
Transition
Deploy the system in its operating environment.
Static workflows
Workflow
Description
Businessmodelling
Requirements
Actorswhointeractwiththesystemareidentifiedandusecasesare
developedtomodelthesystemrequirements.
Analysisanddesign
Adesignmodeliscreatedanddocumentedusingarchitectural
models,componentmodels,objectmodelsandsequencemodels.
Implementation
Thecomponentsinthesystemareimplementedandstructuredinto
implementationsubsystems.Automaticcodegenerationfromdesign
modelshelpsacceleratethisprocess.
Test
Testingisaniterativeprocessthatiscarriedoutinconjunctionwith
implementation.Systemtestingfollowsthecompletionofthe
implementation.
Deployment
Aproductreleaseiscreated,distributedtousersandinstalledintheir
workplace.
Configurationand
changemanagement
Thissupportingworkflowmanagedchangestothesystem(see
Chapter29).
Projectmanagement
Thissupportingworkflowmanagesthesystemdevelopment(see
Chapter5).
Environment
Thisworkflowisconcernedwithmakingappropriatesoftwaretools
availabletothesoftwaredevelopmentteam.
Computer-aided software
engineering
Computer-aided software engineering (CASE) is
software to support software development and
evolution processes.
Activity automation
Case technology
Case technology has led to significant
improvements in the software process. However,
these are not the order of magnitude
improvements that were once predicted
Software engineering requires creative thought - this is
not readily automated;
Software engineering is a team activity and, for large
projects, much time is spent in team interactions.
CASE technology does not really support these.
CASE classification
Classification helps us understand the different types
of CASE tools and their support for process activities.
Functional perspective
Tools are classified according to their specific function.
Process perspective
Tools are classified according to process activities that
are supported.
Integration perspective
Tools are classified according to their organisation into
integrated units.
Examples
Planning tools
Editing tools
Prototyping tools
Method-support tools
Language-processing tools
Compilers, interpreters
Testing tools
Debugging tools
Documentation tools
Re-engineering tools
Specifi cation
Design
Implementation
Verifi cation
and
Validation
CASE integration
Tools
Support individual process tasks such as design
consistency checking, text editing, etc.
Workbenches
Support a process phase such as specification or
design, Normally include a number of integrated
tools.
Environments
Support all or a substantial part of an entire software
process. Normally include several integrated
workbenches.
Boults view of SE
SE must balance risks in software development process:
Risks of error in
requirements
specification,
design,
implementation,
and integration
ter
Al
na
es
tiv
Budget
es
tiv
a
rn
Int
e
and grati
tes on
tp
lan
Risk analysis
raints
Const
es
tiv
a
n
ter
Al
Budget
start
PLAN
raints
Const
te
Al
Budget
raints
Const
Co
n
str
ain
ts
nati
ves
Budget 1
1
De
vel
op
pla ment
n
Risk analysis
Risk analysis
Alte
r
Requirements,
life-cycle plan
Risk analysis
Prototype
Concept of
operation
Proto type 2
t
e
ar en
tw rem
f
So qui
re
Proto type 3
Proto type 4
So
f
de twa
sig re
n
DETERMINE GOALS,
ALTERNATIVES,
CONSTRAINTS
Detailed
design
d
Code
date
Vali rements
,
d
i
e
dat
requ
Vali design
fied
Unit test
veri
Implementation
plan
Acceptance
test
System
test
Key points
Software processes are the activities involved in producing
and evolving a software system.
Software process models are abstract representations of
these processes.
General activities are specification, design and
implementation, validation and evolution.
Generic process models describe the organisation of
software processes. Examples include the waterfall model,
evolutionary development and component-based software
engineering.
Iterative process models describe the software process as a
cycle of activities.
Key points
Requirements engineering is the process of developing
a software specification.
Design and implementation processes transform the
specification to an executable program.
Validation involves checking that the system meets to
its specification and user needs.
Evolution is concerned with modifying the system
after it is in use.
The Rational Unified Process is a generic process
model that separates activities from phases.
CASE technology supports software process activities.