Aims:

This module covers a range of Software Engineering (SE) material, following on from that introduced in term 1. The emphasis is on the knowledge needed to be able to model, design, implement and evaluate larger software systems effectively. The module starts with development lifecycle models, such as agile development, and then continues to cover requirements specification, requirements analysis, object-oriented concepts, the Unified Modelling Language (UML), and object-oriented design. Software engineering is an inherently practical subject and applying the concepts being taught is a vital component of developing expertise in this area. Consequently, students undertake a substantial group project, working through a number of stages of the development of a larger software application. Students will be expected to largely organize themselves and their work, learning key transferrable skills in team management and organisation.

Learning outcomes:

On successful completion of the module, a student will be able to:

Appreciate the wider engineering issues that form the background to developing complex and evolving software intensive system.
	Plan and deliver an effective software engineering process, based on knowledge of widely used development lifecycle models, in particular Agile development.
	Employ group working skills including general organization, planning and time management and inter-group negotiation.
	Capture, document and analyse software requirements. Translate a requirements specification into an implementable design, following a structured and organised process.
	Make effective use of UML, along with design strategies such as defining a software architecture, applying the SOLID principles and using design patterns.
	Evaluate the quality of the requirements, analysis and design work done during the module.
Content:

Topics covered in lectures during the first half of term:

Course Introduction:

Overview of the software engineering discipline.
	Software lifecycle models.
	Agile development.
	The Unified Process (UP) Organising development projects.
Requirements Engineering:

Documenting requirements, user stories, use cases and scenarios.
Introduction to UML:

Review of object-oriented principles.
	UML use case, class, sequence, activity, state, component and deployment diagrams
The Analysis and Design Process:

User story realisation.
	Object-oriented modelling.
	Incremental refinement.
Design Principles:

Software architecture.
	Separation of concerns.
	SOLID Principles.
	Object-Oriented design practices.
Project Work:

Students are split into project groups with around 4-7 members. Project groups are selected by the module organiser, and each group is allocated a basic project specification to work with. Each project specification gives an outline of an application with a mock graphical user interface (GUI) to be developed. Project groups are responsible for organising themselves, meeting regularly to discuss their models. A group diary should be kept to record the progress of the group, including the minutes of meetings held;
The coursework does not require an implementation but rather focuses on all the pre-implementation phases such as requirements capture and UML modelling.

Requisites:

To be eligible to select this module, a student must: (1) be registered on a programme and year of study for which it is a formally available; and (2) have taken Introductory Programming (COMP0066) or a similar module covering object-oriented programming.