CS308 – Building Software Systems

Credits 20
Level 3
Semester 2
Prerequisites CS207 Advanced Programming
Availability Not available as an elective
Contact Lectures: 10 | Labs: 20
Assignments: 100 | Self study: 70
Assessment 100% classwork
Resit Resit is by individual project.
Lecturer Dr Feng Dong | Dr Murray Wood

General Aims

To extend and deepen the students understanding of the analysis, design and implementation of software systems; to provide further experience in the activity of designing and implementing non-trivial systems; and to enable the student to demonstrate practical competence in a group environment.

The goal for the student is the development in a group setting of significant systems from scratch aiming not just at any solution but a good solution, and to be introduced to more general Software Engineering topics.

Learning Outcomes

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

  • understand the need for working effectively within a team environment, on practical software engineering problems, including planning and managing a group’s workload
  • display a disciplined approach to good practices in the general area of software engineering, and to apply software engineering techniques to practical problems
  • appreciate the importance of organisation, management and professionalism in the development of large scale software
  • undertake a requirements analysis and to write a software requirements specification
  • determine, from an object-oriented analysis, a detailed design which incorporates the necessary technical infrastructure and which provides a basis for implementation
  • identify opportunities for re-use, including the use of design patterns
  • distinguish between designs in terms of their intrinsic quality and in terms of objective criteria such as flexibility, robustness to change etc.
  • implement, verify and validate a medium-sized software system
  • effectively employ a range of software development tools e.g. IDEs, version control, testing and issue tracking


Further study of software engineering methods drawn from the following: requirements analysis and specification, establishing stakeholders’ viewpoints, use-case modelling, systems analysis, specification, design (in particular the development of a detailed design for the construction phase, designing for re-use and future change, further design patterns, design metrics, implementation and testing of designs), implementation, defensive programming, verification and validation, and maintenance. Further study of software development tools, especially those that facilitate software development in a group context (e.g. version control and configuration management tools, xUnit etc.). Software engineering management: project management, team organization.

The substantial practical activity will exercise skills from a selection of syllabus topics, and will incorporate group projects. This material thus provides a broader experience of the management and organisation of software processes for the production of large-scale software.

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

Peopleware: Productive Projects & Teams 2nd Edition: Productive Projects and Teams. Tom DeMarco, and Timothy Lister. Dorset House Publishing, 1999. | Stocked at Amazon (Other retailers are available)

Code Complete: A Practical Handbook of Software Construction. Steve McConnell, Microsoft Press; 2nd edition, 2004. | Stocked at Amazon (Other retailers are available)