This course is a prerequisite for the Group Project (Part IB).
Aims
This course aims to introduce the students to software engineering,
and in particular to the problems of building large systems,
safety-critical systems and real-time systems. Case histories of
software failure are used to illustrate what can go wrong, and
current software engineering practice is studied as a guide to how
failures can be avoided.
Lectures
The software crisis.
Examples of large-scale project failure,
such as the London Ambulance Service system. Intrinsic difficulties
with software.
The software life cycle.
Getting the requirements right; requirements analysis methods; modular
design; the role of prototyping; the waterfall, spiral and evolutionary
models.
Critical software.
Examples of catastrophic failure; particular problems with real-time
systems; the difficulty of achieving ultra-high reliability;
verification and validation.
Quality assurance.
The contribution of reviews and testing; reliability growth models; software
maintenance and configuration management; life cycle costs.
Tools.
The effect of high-level languages; object-oriented systems and
object reuse; an overview of formal methods with some application
examples; project planning tools; automated testing tools.
Large software systems.
The role of application domain knowledge; changing requirements;
risk reduction versus due diligence; communications
failure; organisational factors.
Objectives
At the end of the course students should know how writing programs
with tough assurance targets, in large teams, or both, differs from
the programming exercises they have engaged in so far. They should
appreciate the waterfall, spiral and evolutionary models of software
development and be able to explain which kinds of software project
might profitably use them. They should appreciate the value of other
tools and the difference between incidental and intrinsic complexity.
They should understand the software development life cycle and its
basic economics. They should be prepared for the organisational
aspects of their Part IB group project.
Recommended books
* Pressman, R.S. (1994). Software engineering. McGraw-Hill.
Leveson, N. (1994). Safeware. Addison-Wesley.
Maguire, S. (1993). Writing solid code. Microsoft Press.
Further reading:
Brooks, F.P. (1975). The mythical man month. Addison-Wesley.
Neumann, P. (1994). Computer-related risks. ACM Press.
Report of the inquiry into the London Ambulance Service
(SW Thames RHA, 40 Eastbourne Terrace, London W2 3QR, February 1993).
http://www.cs.ucl.ac.uk/staff/A.Finkelstein/las.html