Course pages 2011–12
Paper 2: Software Design
This course is not taken by NST or PPST students.
Lecturer: Dr C. Mascolo
No. of lectures: 7 (Continued into Easter Term)
Companion courses: Object-Oriented Programming, Programming in Java
This course is a prerequisite for the Group Project (Part IB).
Aims
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.
Lectures
- Introduction.  Dealing with uncertainty in design, and the
  need for a knowledge-based modeling process. Overview of the design
  process, with reference to the terminology of the UML Rational
  Unified Process (Inception phase, Elaboration phase, Construction
  phase, Transition phase).
- Inception phase.  Structured description of system usage
  and function, requirements capture techniques, identification of
  scenarios and UML use case diagrams. Description of scenario
  elements in terms of CRC models - classes, responsibilities and
  collaborators.
- Elaboration phase. Systematic definition of classes, data
  and system structure. Abstraction, modularisation and UML class
  diagrams.  Combining top-down refinement with bottom-up
  construction.
- Construction phase (1). Object interaction, behaviour and state.  
Different varieties of UML interaction diagram. Recognising coupling  
between modules and responsibility-driven design. Structuring source  
code as a design model. Recognition of variable roles.
- Construction phase (2). Data lifecycles and constraints, expressed
using UML statecharts and Z notation. Defensive programming methods
including recognition of pre- and post-conditions, invariants,
composition and assertions. Library components and
documentation.
- Transition phase. Rapid and agile prototyping strategies and  
iteration. Quality, testing and evaluation strategies, optimisation  
and debugging techniques.
Objectives
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. (2004). Code complete: a practical handbook of software construction. Microsoft Press (2nd ed.).
Fowler, M. (2003). UML distilled. Addison-Wesley (3rd ed.).
Revision and reinforcement of object-oriented concepts for those needing this:
Barnes, D.J. & Kölling, M. (2006). Objects first with Java: a practical introduction using BlueJ. Pearson Education (3rd 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. (2010). Software engineering. McGraw-Hill (7th international ed.). ISBN 9780073375977



