Advanced Computer Science: Multi-Core Computing [MSc]

Software Engineering Concepts in Practice

Unit code: COMP61511
Credit Rating: 15
Unit level: Level 6
Teaching period(s): Semester 1
Offered by School of Computer Science
Available as a free choice unit?: Y



Additional Requirements


A reasonable level of programmng skill (as expected of most ACS students)


At the conceptual level, students will get a systematic grasp of key topics including quality assurance and testing, software design and construction, and distinctive aspects of software development project management. By the end of the course, students will be able both to grasp the big picture of each topic and also have detailed understanding of select subtopics.  Additionally, students will become acquainted with the relevant research literature.

At the experiential level, students will apply their conceptual understanding to working with a large, established, open source software project.

Overall, students will acquire an informed, practical knowledge of what it is to be a professional software engineer.



          • Software engineering as a discipline

          • Software design and architecture

          • Software construction

          • Quality assurance

          • Software development project management

          • Development methodologies


This is a course which gives students who didn't do a substantial amount of software engineering in their first degree an overview of the subject, with strong enphasis on sofware design and on teamwork.

Learning outcomes

Learning outcomes are detailed on the COMP61511 course unit syllabus page on the School of Computer Science's website for current students.

Employability skills

  • Analytical skills
  • Group/team working
  • Innovation/creativity
  • Leadership
  • Project management
  • Oral communication
  • Problem solving
  • Written communication

Assessment methods

  • Written exam - 50%
  • Written assignment (inc essay) - 50%


Introduce Software Engineering, comparing and contrasting it with other Engineering disciplines. Explain the fundamental problem of requirements change, and the problems this causes for traditional software development processes. Introduce the Agile approach to software development, and some of the main characteristics of agile methods, e.g. continuous stakeholder involvement, iterative and incremental development and Physicality. The Agile UP will be used as an example of a traditonal process applied in an Agile way.

Explain (and advocate!) the Object Oriented approach to software development, particularly Responsibility Driven Design. Introduce a minimal subset of UML notation that covers most practical cases, and illustrate its use in requirements capture and software design.
The GRASP (General Responsibility Assignment Software Patterns) principles will be used as the basis for discussing software design. These are also the underlying principles on which design patterns are based.

Explain the basics of software testing, in particular unit testing with JUnit. In this course a traditional approach to testing will be taken, where tests are typically written after the code to be tested, but by a different person. The alternative, Test-driven development, will be explored in the Agile course.

Discuss some of the wider context of software engineering, for example user and stakeholder considerations, standards, and the role of software, and software engineers, in large organisations.

Recommended reading

COMP61511 reading list can be found on the School of Computer Science website for current students.

Feedback methods

Weekly coursework will be collected via Blackboard, and feedback is provided through the same mechanism or directly in labs.

Study hours

  • Lectures - 20 hours
  • Practical classes & workshops - 15 hours
  • Independent study hours - 115 hours

Teaching staff

John Sargeant - Unit coordinator

Bijan Parsia - Unit coordinator

▲ Up to the top