This course aims to provide students with a practical set of skills
for the development of usable, reliable and maintainable software
systems. It assumes basic programming skills in Java, describing how
these can be deployed in the construction of larger programs.
Systematic design processes are described, suitable for use
where a development team must create a product that will meet
customers' needs. These include issues related to usability and
relevance to the context of use. Some specialised problems related to
safety-critical systems and real-time systems are discussed, with the
help of case histories of software failure to illustrate what can go
wrong. Finally a range of alternative planning and management methods
for software projects are contrasted.
Lectures
Introduction.
The software crisis;
why projects fail (London Ambulance case study);
design and engineering perspectives.
Object-oriented design.
Design as modelling;
The Unified Modelling Language;
use case analysis;
class modelling;
object interaction;
state and activity descriptions.
[2 lectures]
Project management.
Models and metaphors of development;
waterfall model, including technical review structure;
evolutionary and incremental models (Spiral, RAD, RUP);
novel structures (Chief programmer, Pair programming, XP).
[2 lectures]
Objectives
At the end of the course, students should understand the ways in which
writing programs that are usable, reliable and maintainable differs
from the programming exercises they have engaged in so far. They
should be able to undertake design of a moderately complex application
in a systematic way: researching user requirements, decomposing and
analysing system architecture, implementing that design so that it will be
reliable and maintainable, and evaluating alternatives at various project
phases from prototyping to commissioning. They should be able to
select and manage appropriate organisational structures when asked to
do so. They should be prepared for the organisational aspects of their
Group project (in the case of Part II (General) students) or
the design elements of their project and dissertation (in the case of
Diploma students).
Recommended books
* Pressman, R.S. (2001). Software engineering (European ed.). McGraw-Hill.
* McConnell, S. (1993). Code complete: a practical handbook of software construction. Microsoft Press.
Fowler, M. (2000). UML distilled. Addison-Wesley (2nd ed.).
Preece, J., Sharp, H. & Rogers, Y. (2002). Interaction design: beyond human-computer interaction. Wiley.
Further reading:
Borenstein, N.S. (1991). Programming as if people mattered. Princeton.
Brooks, F.P. (1975). The mythical man month. Addison-Wesley.
Neumann, P. (1994). Computer-related risks. ACM Press.
Simon, H.A. (1996). The sciences of the artificial. MIT Press.
Schon, D.A. (1990). Educating the reflective practitioner. Jossey-Bass.
Finkelstein, A. (1993). Report of the inquiry into the London Ambulance Service.
http://www.cs.ucl.ac.uk/staff/A.Finkelstein/las.html
Finkelstein, A. & Shattock, M. (2001). CAPSA and its implementation. Cambridge University Reporter.
http://www.admin.cam.ac.uk/reporter/2001-02/weekly/5861/