CS409 – Software Architecture & Design

Credits 20
Level 4
Prerequisites CS308 Building Software Systems
Availability Semesters 1 and 2
Elective No
Contact Lectures: 22 | Tutorials: 0 | Labs: 22
Assignments: 78 | Self study: 78
Assessment 40% coursework, 60% written examination.
Lecturer Dr Marc Roper | Dr Murray Wood

Aims and Objectives

  • To enable students to understand the challenges of advanced software design and the issues associated with large-scale software architectures, frameworks, patterns and components.
  • To develop the students’ understanding of the tools and techniques that may be used for the automatic analysis and evaluation of software.

Learning Outcomes

On completion of the class, a student should be able to:

  • understand some of the challenging design issues that software engineers face and the trade-offs associated with the solutions to these.
  • understand the principles behind software patterns and be able to apply a number of the fundamental patterns
  • understand the need for software architecture and the principles of the classic architectural styles
  • understand the issues behind the construction and use of a software framework, and to be able to put this into practice
  • understand the major approaches to automated software analysis achievable through static and dynamic analysis
  • demonstrate practical competence in the application and construction of tools to support automated software analysis


Software Design: Key design principles and heuristics and trade-offs between these. “Bad smells” and refactoring.

Design Patterns: history, principles and expectations. Ways of using patterns. Detailed study of a number of representative patterns.

Software Architecture: why is architecture important? Classical architectural styles such as pipe and filter, data abstraction or OO based, event-based, etc.

Frameworks: frameworks as reusable chunks of architecture, the framework lifecycle, development using frameworks, detailed study of some well-known frameworks (e.g. HotDraw).

Major approaches to automated evaluation and analysis: dynamic analysis (e,g, testing, debugging, model inference, and visualisation) and static analysis (e.g. call and control graph extractions, metrics calculation, dataflow analysis, type systems, model checking, symbolic execution), and their application and limitations. Construction of tools to support such analysis.

Indicative Reading*

* This list is indicative only – the class lecturer may recommend alternative reading material. Please do not purchase any of the reading material listed below until you have confirmed with the class lecturer that it will be used for this class.

Head First Design Patterns. O’Reilly, Freeman and Freeman.Design Patterns. Erich Gamma, Richard Helm, Ralph Johnson and John Vlissides, . Addison-Wesley, 1995

An Introduction to Software Architecture. David Garlan and Mary Shaw.

Refactoring: Improving the Design of Existing Code. Martin Fowler.

Software Design: From Programming to Architecture. Eric Braude.

Object-oriented Design Heuristics. Arthur Riel.

Software Architecture – Foundations, Theory and Practice. Taylor, Medvidovic, Dashofy. Wiley 2009.