Skip to navigation | Skip to main content | Skip to footer

COMP61511 Software Engineering Concepts in Practice syllabus 2017-2018

COMP61511 materials

COMP61511 Software Engineering Concepts in Practice

Level 6
Credits: 15
Enrolled students: 61

Course leader: Bijan Parsia

Additional staff: view all staff

Additional requirements

  • Pre-requisites

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

Assessment methods

  • 50% Written exam
  • 50% Coursework
Sem 1 w1-6 Lab 2.25A Thu 14:00 - 17:00 -
Sem 1 P1 Lecture 2.19 Thu 09:00 - 14:00 -
Themes to which this unit belongs
  • Software Engineering 1


Software Engineering is a discipline concerned with all aspects of software production. The goal of software engineering is to produce successful software systems by means of successful software development projects. A software system is a system with a substantial software component that is deployed for users. A software development project is the process used to produce a software system. A system might be successful (e.g., meet all user requirements) while the project might not be (e.g., it came in over time and over budget).

The goal of successful systems from successful projects is not easily achieved and many software development projects fail in some way, or, indeed, many ways.

Professional software engineers need to have mastery of a certain body of knowledge and a certain set of skills and those skills should be informed by and inform that knowledge. This course presents an advanced core of software engineering at both a conceptual and at a experiential level. 

This course is formed by the IEEE & ACM ACM 2009 Software Engineering Curriculum Recommendations <>. In particular, it is designed to significantly advance the goal of “A student who has mastered the [Core Body of Knowledge (CBOK) will be able to develop a modest-sized software system of a few thousand lines of code from scratch, be able to modify a pre-existing large-scale software system exceeding 1,000,000 lines of code, and be able to integrate third- party components that are themselves thousands of lines of code. Development and modification include analysis, design, and verification, and should yield high- quality artefacts, including the final software product."


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


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.

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)

Employability skills

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

Learning outcomes

Programme outcomeUnit learning outcomesAssessment
A1 D1A good grasp of the discipline of software engineering and how core concepts appear in practice.
  • Examination
  • Individual coursework
  • Group coursework
A2 B2 B3 C1 C2Able to assess technologies, systems, designs, and techniques for their suitability to a large scale software development task and act on those assessments to produce enhancements to large, complex software systems. Able to reflect on the relation between such assessments and the success of a project.
  • Individual coursework
  • Group coursework
  • Examination
A3 C4Familiar with some analytical and empirical methods for software development and for research on software engineering. Able to go to the relevant literature and assimilate new knowledge.
  • Group coursework
  • Individual coursework
  • Examination
D1 D3 D5Able to design, assess, enact, and participate in a large scale software development project.
  • Individual coursework
  • Group coursework
  • Examination

Reading list

Applying UML and patterns: an introduction to Object-Oriented analysis and design and iterative development (3rd edition)Larman, Craig0131489062Prentice Hall2004

Additional notes

Course unit materials

Links to course unit teaching materials can be found on the School of Computer Science website for current students.