Computer Laboratory

Course pages 2015–16

Software Engineering

Principal lecturer: Prof Ross Anderson
Taken by: Part IB
Past exam questions

No. of lectures: 6
Suggested hours of supervisions: 2
This course is a prerequisite for the Group Project.


This course aims to introduce 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.


  • The software crisis. Examples of large-scale project failure, such as the London Ambulance Service system and the NHS National Programme for IT. 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 systems. Examples of catastrophic failure; particular problems with real-time systems; usability and human error; 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.

  • Guest lecture. A guest lecture from an industry speaker about the realities of managing software development in a commercial environment.


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 organizational aspects of their Part IB group project.

Recommended reading

* Pressman, R.S. (2010). Software engineering. McGraw-Hill (7th international ed.). ISBN 9780073375977
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.
Reason, J. (2008). The human contribution. Ashgate Publishing.
Leveson, N. (2008). System safety engineering: back to the future, available at
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).
Anderson, R. (2008). Security engineering (Chapters 25 and 26). Wiley. Alternatively see 2001 edition, Chapters 22 and 23, available at