References
• MACIASZEK, L.A. and LIONG, B.L. (2005):
– Practical Software Engineering. A Case Study Approach, Chapter 1 (Software
Development Lifecycles)
– http://www.comp.mq.edu.au/books/pse/about_book/pdfpage.htm?Chapter%201=Ch1.pdf
• SOMMERVILLE, Ian
– Software Engineering 6th Edition (but also in 7th, 8th Edition), Chapter 3, pgs
42-55 (Software Processes)
• PFLEEGER, S.L.
– Software Engineering: Theory and Practice, Chapter 2, pgs 44-58,
(Modelling the process and lifecycles)
Software Engineering
• “Software engineering is the field of computer
science that deals with the building of software
systems that are so large or so complex that they
are built by a team or teams of engineers.” Ghezzi et
al.
• The job of a software engineer is to produce high
quality software products for practical uses
• Software engineering is about designing and
developing high quality software
SE is more than programming
• Software engineering applies to complex problems that
cannot be solved by programming alone
– Complex systems must be designed before they can be
programmed
• Before a system can be designed, a software engineer must
understand its requirements
• Software engineer integrates components, programmers
code them
• Software engineering is a team activity
– Teams must be managed
Software Engineering
• Four things influence software quality:
– Stakeholders
– Product
– Process (The focus of this module)
– Language and Tools
Process
• Process: a series of steps to accomplish a set of
ordered tasks.
• Process quality and product quality are closely
related.
• A good process is usually required to produce a
good product.
Process Elements
• The elements of a process:
– Use resources and produces intermediate and final
products
– May have sub-processes
– Prescribe all the major process activities
• Each activity has entry and exit criteria
• Activities are organised in a sequence
• Every activity has some goal to accomplish
• Constraints and controls may apply to an activity, resource, or
product
Process classification
• Informal
– No detailed process model. Development team chose their own
way of working.
• Managed
– Defined process model which drives the development
process.
• Methodical
– Processes supported by some development method such as
the RUP.
• Supported
– Processes supported by automated CASE tools.
Process choice
• Process used should depend on type of product which is
being developed
– For large systems, management is usually the principal problem
so you need a strictly managed process;
– For smaller systems, more informality is possible.
• There is no uniformly applicable process which should be
standardised within an organisation
– High costs may be incurred if you force an inappropriate
process on a development team;
– Inappropriate methods can also increase costs and lead to
reduced quality.
Definitions
• Analysis is resolution into simple elements
• Systems analysis is the process of analysing a
system with a view to modelling it and assessing the
feasibility of a computer solution
• Systems analysis concerns the problem space
– Involves interacting with the customer to work out what
needs to be done
– A complex activity
– The product of the systems analysis is a user requirement
specification and a software requirement specification
Definitions
• Design is the scheme of attack, or the adaptation of
means to ends
• Systems Design is the process of deciding how the
logical model is to be mapped onto the available
physical resources — the hardware and software
• System design concerns the solution space
– Decide how logical entities are to be represented and
manipulated
– Decide the time-ordering of activities
– The product of system design is a detailed specification of
modules and interactions
Lifecycles
• Life cycle refers to a process that involves the
building of some product (software artefact)
• The software development process is called the
software development lifecycle
System design
Program design
Coding
System testing
Acceptance testing
Requirements Analysis
User
Waterfall
Systems Design
lifecycle with
feedback
Implementation
Product
Analysis
Design
Prototyping
Coding
Prototyping
Testing
Integration
User Requirements Analysis
Implementation
V Model
• Integrate testing activities into the waterfall
model
• Fold the waterfall model at the coding stage
• Explicit iteration and rework
V Model
Operation
Maintenance
Validate requirements
Requirement analysis Acceptance testing
Verify design
System design System testing
Verify program
Program design Unit & integration testing
Coding
V model
• Validation refers to the set of activities that ensures
the software that has been built is traceable to
customer requirements
– “Are we building the right product?”
• Verification refers to the set of activities that ensure
that the software correctly implements a specific
function
– “Are we building the product right?”
Phased Development
• System requirements ALWAYS evolve in the course
of a project so process repetition where earlier
stages are reworked is always part of the process for
large systems.
• Phased development also known as iterative or
incremental development (this can be confusing
though)
Phased Development
• The time between when the requirements were
written and when the system was delivered is called
cycle time
• One way to reduce the cycle time is to use phased
development: system is delivered in pieces
Use Use
Release 1 Release 2
user
Phased Development
• Rather than deliver the system as a single
delivery, the development and delivery is broken
down into releases with each release delivering
part of the required functionality.
• User requirements are prioritised and the highest
priority requirements are included in early
releases.
• Once the development of a release is started, the
requirements are frozen, though requirements for
later releases can continue to evolve.
Iterative Development
• Deliver a full system at the very beginning and
change the functionality of each sub-system with
each new release
Incremental Development
• The releases are defined by beginning with a
functional sub-system and then adding functionality
with each new release
Spiral
Model
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.
• Use pair programming, no individual allocation of
duties
• No hierarchy of authority
• No quarantining of activities
• Based on 13 practices done in small steps
13 XP practices
• whole team (no barriers between all stakeholders)
• metaphor (common language; “desktop metaphor”)
• the planning game (user stories)
• simple design
• small releases (two-week iterations)
• customer tests (acceptance tests)
• pair programming
• test-driven development (automated test first)
• design improvement (refactoring)
• collective code ownership
• continuous integration (builds many times per day)
• sustainable pace (no overtime)
• coding standards