| Module Code | CSU33012 |
| Module Name | Software Engineering |
| ECTS Weighting [1] | 5 ECTS |
| Semester Taught | Semester 1 |
| Module Coordinator/s | Goetz Botterweck & Saif Ur Rehman Malik |
Module Learning Outcomes
On successful completion of this module, students will be able to:
LO1: Elicit and specify functional and quality requirements for a bounded software problem, define testable acceptance criteria, and justify a modular design against those requirements and plausible changes.
LO2: Analyse an unfamiliar codebase to explain its behaviour, diagnose defects through hypothesis testing, and carry out controlled changes, verifying predicted effects and preservation of required behaviour.
LO3: Devise and execute a test strategy spanning unit, integration and acceptance testing, interpret test results and development-tool reports, and justify follow-up actions while explaining the limits of the evidence obtained.
LO4: Review unfamiliar code, tests and documentation against explicit criteria, distinguish defects, risks and stylistic matters, and produce prioritised, actionable recommendations supported by evidence and reasoning.
LO5: Select, learn and integrate tools for a specified software engineering activity, comparing alternatives against explicit criteria and evaluating their suitability and limitations in the given context.
LO6: Explain how AI-based tools produce their results and relate this to their characteristic failure modes; justify when and how to use AI assistance, and verify generated artefacts against explicit criteria before integration.
LO7: Plan and monitor software engineering work and learning, use feedback and self-assessment to make justified changes to working strategies, and evaluate their effectiveness in subsequent work and unfamiliar tasks.
Module Content
This course provides students with a solid grounding in various aspects of the software engineering process related to building large software systems.
The overall aim of this course is for students to learn the fundamental skills for building large, software systems. This entails (i) to recognise the general software lifecycle and its stages from domain analysis to maintenance, (ii) to analyse software in the problem domain, (iii) to identify the fundamental approaches to managing software projects and teams, (iv) to distinguish the roles of stakeholders in a software project in general and in software teams in particular, (v) to recognise architectures for building large-scale distributed software systems.
This course covers various aspects related to building software systems ranging from the use of software lifecycle models, to project management, to large-scale software architectures. Specifically, software lifecycle models, including variations of the waterfall and spiral models as well as extreme programming and agile, are introduced along with concepts that are relevant to the specific model stages. These concepts include domain analysis, requirements and specification analysis, testing and debugging, and version control. Moreover, strategies for managing large software projects and their contracts as well as project teams are presented and contrasted.
Teaching and Learning Methods
Lectures that cover theoretical and practical aspects of software engineering. Students complete a significant amount of practical software development work focused on software engineering analysis and development of a personal software development practice.
Assessment Details
| Assessment Component | Brief Description | Learning Outcomes Addressed | % of Total | Week Set | Week Due |
| Practical Programming Task 1 | Practical tasks based on material in lectures, e.g., design and implementation of a simple microservice | LO1-LO7 | 1% | 1 | 2 |
| Practical Programming Task 2 | Practical tasks based on material in lectures, e.g., design and implementation of a simple microservice | LO1-LO7 | 4% | 2 | 3 |
| Midterm 1 | In-class test | LO1-LO7 | 10% | 6 | 6 |
| Midterm 2 | In-class test | LO1-LO7 | 10% | 11 | 11 |
| Group Project | Develop an application using agile development practices. Students will be marked based on group and individual involvement | LO1-LO7 | 55% | 3 | 12 |
| Individual Contribution to Group Project | Develop an application using agile development practices. Students will be marked based on group and individual involvement | LO1-LO7 | 10% | 3 | 12 |
| In-class Tasks | In-class tasks during lectures, e.g., mini quizzes | LO1-LO7 | 10% | 1-12 | 1-12 |
Reassessment Details
A practical and/or written individual task will be set, with a deadline of the end of the reassessment period. There will be no written examination.
Contact Hours and Indicative Student Workload
| Contact Hours (scheduled hours per student over full module), broken down by: | 33 Hours |
| Lecture | 22 hours |
| Laboratory | 0 hours |
| Tutorial or seminar | 0 hours |
| Other | 11 hours |
| Independent Study (outside scheduled contact hours), broken down by: | 72 hours |
| Preparation for classes and review of material (including preparation for examination, if applicable) | 6 hours |
| Completion of assessments (including examination, if applicable) | 66 hours |
| Total Hours | 105 hours |
Recommended Reading List
Online materials and references will be given as the module proceeds.
Module Pre-requisites
Prerequisite modules: none
Other/alternative non-module prerequisites: Students should have reasonable experience with a modern programming language. Students should be prepared for significant personal software development work: this module has a strong practical focus and requires constant and regular input.
Module Co-requisites
N/A