Lecture09 Revision
Lecture09 Revision
Introduction
2
Chapter 1. Introduction to software engineering
Introduction to software engineering - FAQ
Question Answer
What is software? Computer programs and associated documentation. Software products
may be developed for a particular customer or may be developed for a
general market.
What are the attributes of good software? Good software should deliver the required functionality and performance
to the user and should be maintainable, dependable and usable.
What is software engineering? Software engineering is an engineering discipline that is concerned with
all aspects of software production.
What are the fundamental software engineering Software specification, software development, software validation and
activities? software evolution.
What is the difference between software engineering Computer science focuses on theory and fundamentals; software
and computer science? engineering is concerned with the practicalities of developing and
delivering useful software.
What is the difference between software engineering System engineering is concerned with all aspects of computer-based
and system engineering? systems development including hardware, software and process
engineering. Software engineering is part of this more general process.
4
Introduction to software engineering - FAQ
Question Answer
What are the key challenges facing
Coping with increasing diversity, demands for reduced delivery times
software engineering? and developing trustworthy software.
What are the costs of software Roughly 60% of software costs are development costs, 40% are testing
engineering? costs. For custom software, evolution costs often exceed development
costs.
What are the best software While all software projects have to be professionally managed and
engineering techniques and developed, different techniques are appropriate for different types of
methods? system. For example, games should always be developed using a series
of prototypes whereas safety critical control systems require a
complete and analyzable specification to be developed. You can’t,
therefore, say that one method is better than another.
What differences has the web made The web has led to the availability of software services and the
to software engineering? possibility of developing highly distributed service-based systems. Web-
based systems development has led to important advances in
programming languages and software reuse.
5
Introduction to software engineering - Software products
Software products.
Generic products, marketed and sold to any customer who wishes to buy them (graphics programs, project
management tools; CAD software).
Customized products, commissioned by a specific customer to meet their own needs (embedded control
systems, air traffic control software, traffic monitoring systems).
6
Introduction to software engineering - Essential attributes of good
software
7
Introduction to software engineering - Application types
8
Introduction to software engineering - Application types
Systems for These are systems that are developed by scientists and
modeling and engineers to model physical processes or situations, which
simulation include many, separate, interacting objects.
9
Introduction to software engineering - Application types
Data These are systems that collect data from their environment
collection using a set of sensors and send that data to other systems
systems for processing.
10
Introduction to software engineering - Software engineering ethics
Confidentiality
Engineers should normally respect the confidentiality of their employers or clients irrespective of whether or
not a formal confidentiality agreement has been signed.
Competence
Engineers should not misrepresent their level of competence. They should not knowingly accept work which
is outside their competence.
Intellectual property rights
Engineers should be aware of local laws governing the use of intellectual property such as patents,
copyright, etc. They should be careful to ensure that the intellectual property of employers and clients is
protected.
Computer misuse
Software engineers should not use their technical skills to misuse other people’s computers. Computer
misuse ranges from relatively trivial (game playing on an employer’s machine, say) to extremely serious
(dissemination of viruses). 11
Chapter 2. Software processes
Software processes
Software process
A structured set of activities required to develop a software system.
13
Software processes - Plan-driven and agile processes
Plan-driven process
They are processes where all of the process activities are planned in advance and progress is measured
against this plan.
Agile processes
In agile processes, planning is incremental and it is easier to change the process to reflect changing
customer requirements.
In practice, most practical processes include elements of both plan-driven and agile
approaches and there are no right or wrong software processes.
14
Software processes - Software process models
Incremental development
Specification, development and validation are interleaved. May be plan-driven or agile.
15
Software processes - The waterfall model
Waterfall model problem. Inflexible partitioning of the project into distinct stages makes it difficult to
respond to changing customer requirements. 16
Software processes - Software process models
Incremental development.
17
Software processes - Software process models
18
Software processes - Software process models
19
Software processes - Coping with change
20
Chapter 3. Agile software development
Agile software development
22
Agile software development - The principles of agile methods
Principle Description
Customer involvement Customers should be closely involved throughout the
development process. Their role is provide and prioritize new
system requirements and to evaluate the iterations of the
system.
People not process The skills of the development team should be recognized and
exploited. Team members should be left to develop their own
ways of working without prescriptive processes.
Embrace change Expect the system requirements to change and so design the
system to accommodate these changes.
Maintain simplicity Focus on simplicity in both the software being developed and
in the development process. Wherever possible, actively work
to eliminate complexity from the system.
23
Agile software development - Problems/Challenges with agile methods
It can be difficult to keep the interest of customers who are involved in the process.
Team members may be unsuited to the intense involvement that characterizes agile
methods.
24
Agile software development – Which process should be used?
Plan-driven approach.
It Is important to have a very detailed specification and design before moving to implementation
Large systems that require larger development teams so a plan-driven approach may have to be used
Systems that require a lot of analysis before implementation (e.g. real-time system with complex timing
requirements)
Long-lifetime systems may require more design documentation
If the development team is distributed or if part of the development is being outsourced
For traditional engineering organizations.
A system has to be approved by an external regulator
25
Agile software development – Which process should be used?
Agile methods.
An incremental delivery strategy is required
A small co-located team who can communicate informally
There are good tools to keep track of an evolving design
programmers in the development team have high skills
26
Agile software development – Extreme programming
Small releases The minimal useful set of functionality that provides business
value is developed first. Releases of the system are frequent
and incrementally add functionality to the first release.
Simple design Enough design is carried out to meet the current requirements
and no more.
Test-first development An automated unit test framework is used to write tests for a
new piece of functionality before that functionality itself is
implemented.
Refactoring All developers are expected to refactor the code continuously as
soon as possible code improvements are found. This keeps the
code simple and maintainable.
27
Agile software development – Extreme programming
Pair programming Developers work in pairs, checking each other’s work and
providing the support to always do a good job.
Collective ownership The pairs of developers work on all areas of the system, so that
no islands of expertise develop and all the developers take
responsibility for all of the code. Anyone can change anything.
Continuous integration As soon as the work on a task is complete, it is integrated into
the whole system. After any such integration, all the unit tests in
the system must pass.
Sustainable pace Large amounts of overtime are not considered acceptable as
the net effect is often to reduce code quality and medium term
productivity
On-site customer A representative of the end-user of the system (the customer)
should be available full time for the use of the XP team. In an
extreme programming process, the customer is a member of the
development team and is responsible for bringing system
requirements to the team for implementation.
28
Agile software development – Scrum
The Scrum approach is a general agile method but its focus is on managing iterative
development rather than specific technical approaches to agile software engineering.
Scrum Roles.
Product owner (responsible for what will be developed)
ScrumMaster (responsible for guiding the team in creating and following its own process)
Development team (responsible for determining how to deliver what the product owner has asked for)
29
Agile software development – Scrum
30
Agile software development – Scrum
Scrum notes.
Product owner is responsible for:
Communicating to other participants a clear vision of what the Scrum team is doing
What will be developed and in what order.
31