Syllabuses - UG

CS409 - Software Architecture & Design

TIMETABLETEACHING MATERIAL
Credits20
Level4
SemesterSemester 1
AvailabilityNot available as an elective.
PrerequisitesCS308 Building Software Systems
Learning Activities BreakdownLectures: 20 | Tutorials: 0 | Labs: 10
Assignments: 60 | Self study: 110
Items of Assessment2
Assessment20% coursework, 80% written examination.
LecturerMarc Roper

Aims and Objectives

  • To introduce students to the main challenges arising in advanced large-scale software design and role that architectures and frameworks play in this, and to study a number of key design patterns and critically evaluate their application to software designs.
  • To develop the students’ skills and 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 main challenging design issues that software engineers face and the trade-offs associated with the solutions to these.
  • apply a number of the key patterns to existing software designs and analyse and evaluate the consequences of their use
  • appreciate the need for software architecture and the principles of the classic architectural styles
  • understand the principles behind the construction and use of a software framework, and to be able to put this into practice
  • understand the main 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

Syllabus

Software Design: Key design principles and heuristics and trade-offs between these.

Design Patterns: history, principles and expectations. Ways of using patterns. Detailed study of a number of representative patterns. Practical application of patterns in the construction of a large software systems and evaluation and analysis of their impact and consequences. 

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

Programming Styles: Why are different programming styles important. Key programming styles such as: procedural, pipe and filter, event-driven, …

Frameworks: frameworks as reusable chunks of architecture, the framework lifecycle, development using frameworks, framework architectures, 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 the analysis of large software systems.

Recommended 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.

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

Exercises in Programming Style. Cristina Lopes, CRC Press, 2014.

Last updated: 2024-08-12 07:30:43