Computer Laboratory Home Page Search A-Z Directory Help
University of Cambridge Home Computer Laboratory
Computer Science Syllabus - Software Design (50% option only)
Computer Laboratory > Computer Science Syllabus - Software Design (50% option only)

Software Design (50% option only) next up previous contents
Next: Easter Term 2006: Part Up: Lent Term 2006: Part Previous: Regular Languages and Finite   Contents

Software Design (50% option only)

Lecturer: Dr A.F. Blackwell

No. of lectures: 6

This course is a prerequisite for the Group Project (Part IB).


The aim of this course is to present a range of effective methods for the design and implementation of software, especially where that software must meet professional quality standards. This will include a brief introduction to current commercial methods, but the main motivation is to understand the reasons why such methods have developed, how they differ from the concerns of academic computer science, and what are the technical foundations of good software engineering.


  • Introduction to design process. Building models suitable for the stages of a software development project. Introduction to UML.

  • Inception phase. Structured analysis, scenario structures.

  • Elaboration phase. Object modelling. Interfaces and abstraction. Information hiding.

  • Construction phase. Coupling and object interaction. Responsibilities, defensive programming and exceptions. Functional decomposition, module and code layout. Variable roles, object state, verification and assertions. Design patterns.

  • Transition phase. Inspections, walkthroughs, testing, debugging. Iterative development, prototyping and refactoring. Optimisation.


At the end of the course, students should be able to undertake system design in a methodical manner, starting from a statement of system requirements, developing a modular design model, refining it into an implementation that clearly identifies and minimises risk, coding in a manner that can be integrated with the work of a team, and using appropriate methods to identify and prevent faults.

Recommended reading

McConnell, S. (1993). Code complete: a practical handbook of software construction. Microsoft Press.
Fowler, M. (2000). UML distilled. Addison-Wesley (2nd ed.).

Further reading

Broy, M. & Denert, E. (ed.) (2002). Software pioneers: contributions to software engineering. Springer-Verlag.
Collins, H. & Pinch, T. (1998). The Golem at large: what you should know about technology. Cambridge University Press.
Petroski, H. (1985). To engineer is human: the role of failure in successful design. Macmillan.
Vincenti, W.G. (1990). What engineers know and how they know it: analytical studies from aeronautical history. Johns Hopkins University Press.
Simon, H.A. (1996). The sciences of the artificial. MIT Press.
Schon, D.A. (1990). Educating the reflective practitioner. Jossey-Bass.
Pressman, R.S. (2001). Software engineering. McGraw-Hill (European ed.).

next up previous contents
Next: Easter Term 2006: Part Up: Lent Term 2006: Part Previous: Regular Languages and Finite   Contents
Christine Northeast
Sun Sep 11 15:46:50 BST 2005