ÉëÒ÷Ö®Íõ

Software Engineering MSc module details

Block 1

Cloud Based System Design and Software Quality Assurance – 30 credits

This module covers software requirement analysis, architecture and system design, quality assurance and testing, and project management in the cloud-based software development life cycle. It also introduces the growing role of Artificial Intelligence (AI) in modern software engineering, including AI-based software engineering techniques and approaches for developing and testing intelligent cloud systems.

Part A

This Part A aims to provide students with insight into quality assurance in the software engineering process and effective testing methodologies. It covers key concepts, principles, best practices, and practical approaches for testing software and assuring its quality. As modern software systems become more complex and increasingly AI-enabled, it is important to establish clear processes and rigorous testing techniques to ensure software reliability, security, and performance.

Methods for software testing and quality assurance are integrated throughout the software development process. This module discusses software quality standards, quality assurance planning, software metrics, configuration management, and change control. It also explores industrial practices and modern techniques used to support software quality management.

Software testing is a key mechanism for quality control. The module introduces systematic and effective approaches to software testing and prepares students to apply professional testing methods in structured and managed ways. It also examines AI-assisted software engineering techniques, automated testing approaches, and techniques for testing AI-based cloud systems, including issues related to reliability, transparency, and trustworthiness.

Part B

This Part B covers the analysis and design aspects of cloud-based system development. Requirement analysis determines user expectations for a new or modified product and establishes software and system requirements. System design defines the architecture, modules, interfaces, and data needed to satisfy specified requirements within Quality of Service (QoS) parameters and scalable cloud environments.

The module focuses on software requirement elicitation, analysis, specification, validation, verification, and management within an iterative development process that includes prototyping and traceability from requirements through to design. A key aspect of the module is the “good design” of cloud-based systems, including scalability, reliability, maintainability, and security.

The module also introduces modern AI-supported software engineering practices and the use of intelligent tools to support software development, system analysis, and project management. Students will develop an understanding of how AI technologies are transforming cloud-based software systems and software engineering practices in industry.

 

Block 2

Internet of Things and High-Assurance System Design – 30 credits 

This module covers the design of IoT systems and the use of formal approaches to enhance the quality of software systems.

Part A

This Part A provides students with insight into the Internet of Things (IoT), its enabling technologies, and methodology to build reliable IoT systems. The IoT envisions that ordinary objects can be embedded with electronics and software that enable them to sense, process, and communication data through a network like the Internet. This module covers the main sensing technologies and communication technologies for IoT. It also discusses in-depth how the data collected in IoT are processed to support decision-making. As such, the module looks at cloud computing, data analytics techniques, and data visualisation approaches. Students are introduced to tools for building models of IoT systems and executing them. The module also discusses the challenges in building reliable IoT systems such as cybersecurity and interoperability of devices from different manufacturers.

Part B

This Part B covers formal approaches to the development of computer systems. Students will learn how to apply rigorous mathematical and logical techniques to specify, develop, and verify computer systems. The requirements of the systems are specified in a formal language, then refined into codes in a high-level programming language (like C++ or Java) through successive transformational steps. Such an approach guarantees that the system implementation satisfies the specification of the system. This approach is particularly important for the development of safe-critical systems and security-critical systems, where system faults can lead to dangerous consequences such as loss of life or properties. The module emphasises the approaches that are based on the automata theory, such as the finite state machines and the state charts. Students are introduced to algorithms and tools for transforming finite state machines and state charts step-by-step into program codes.

Block 3

Critical Systems and Modern Programming Techniques – 30 credits

This module provides useful and practical insight into the design, development and management of critical systems.

Part A

Critical Systems (CSs) are those whose operation poses a risk to human life, health, economy or environment. Typically, CSs are large and complex industrial systems or products constructed through the effort of multi-disciplinary teams. The engineering and assessment of modern CSs is thus a complex, multi-disciplinary task involving mechanical, structural, electronic and software engineers, as well as psychologists. Economists and sociologists also contribute to understanding socio-technical interactions between systems and human operators. Modern CSs increasingly incorporate Artificial Intelligence (AI) components, such as autonomous decision-making systems, e.g., smart healthcare. This module introduces whilst critically analysing CSs, and exploring the role of formal methods and modelling for AI system specification. Ethical and professional issues will also be explored.

Part B

Multi-core computer architectures have become the norm, leading to the adoption of modern programming techniques that emphasise concurrency, scalability, and abstraction. These techniques are widely used in industry, such as Scala in large-scale systems and Erlang in fault-tolerant distributed systems. Ericsson’s Erlang has been used in industrial applications for many years – particularly in the construction of fault-tolerant, distributed systems; and Microsoft’s C# and F# languages support functional programming within the .NET framework. Modern techniques allow programmers to focus on the problem to be solved without having to insert a significant amount of detailed code solely for managing concurrency. Furthermore, these techniques promote a style of coding in which a source of runtime errors is significantly reduced. The rise of AI systems has further accelerated the need for modern programming that support data- intensive programming and the development of scalable, distributed AI applications. Modern programming languages (e.g., C++, C#, Python, Java, Scala) increasingly support functional programming constructs, e.g., lamdas, immutability, and higher-order functions.

The module uses a contemporary functional programming language to introduce the student to the basic principles of functional program design. Topics will cover the relevant theoretical underpinning enabling students to understand and appreciate the paradigm and how it differs from more traditional approaches to software development. Practical experience will form the core of the module and students will be expected to use functional programming design patterns, libraries and modern programming techniques for scalable, reliable and intelligent software systems.

Block 4

Advanced Research Topics and Research Methods – 30 credits

This module conceptualises software engineering practice as both research and a development activity. Students are expected to apply software engineering principles to design and build solutions while also adopting a systematic and evidence-based approach to investigating problems, evaluating outcomes, and justifying design decisions.

Part A

This part of the module performs several roles for each student. The precise nature of what each student gets out of the module will depend almost entirely on the emphasis they place on their chosen research topic. First and foremost, students should be inspired to engage with current topics in software engineering at the time they study the module. Since the intention is for this to feel current, it is likely that tutor led sessions will be constructed around upcoming technologies and methodologies (e.g., focused on security and privacy aspects and AI application in software development) as well as current internal and external research projects. Contents include Crypto analysis, anonymisation in database development, Gen-AI coding, foundation on cybersecurity, etc. It is expected that when students select the topic in which they will be assessed, they too will choose to research and analyse state of the art techniques and practises. Second, students should take a holistic look at topics. This enables them to establish the context into which the more detailed technical, procedural and social aspects fit. Students should have sufficient sense of shape to see how work in this topic evolved and how this relates to other areas of research and best practise. Third, students will engage with a small number of topics in depth. This might for example involve secure software engineering; AI utilisation in software development and coding, security and privacy vulnerabilities in software applications, web-service infrastructures or agent-oriented software design. Module content and delivery will seek to assure that the software engineering students learn and appreciate ongoing research efforts and get a sense of this fast-progressing field of study. This is likely to be structured around research projects undertaken by students and in association with their coursework. Advanced research topics will be covered by internal or external experts.

Part B

This part of the module focuses on the ethical and professional context of software engineering, mainly cyber security, digital engineering, systems management, and digital forensics. In doing so, it addresses the theory of professionals in organisations, security management, project management, the legal framework, ethical issues in professional practice and their resolution, and the legal and professional responsibilities of the digital engineer, systems manager, computer forensic, and security practitioner. The legal component will address UK and international law affecting cyber security, AI ethics, digital engineering, systems management, and digital forensics. Content covers standards; policy-based management; laws and issues in human-computer interaction, including ethical theories and their application; professionalism and responsibility in organisations; and risk analysis and contingency planning. The module also identifies and explicates relevant research methods. Contents include research methods and research paradigms - for example, what the problem is, how it is handled, quantitative versus qualitative approaches, the study of a range of research methodologies, data collection methods such as trials, exploratory studies, and surveys, the importance of ethical and access-level considerations, learning skills, peer assessment, and publications. It also covers consideration of outcomes; writing and studying at master's level; e-research support; project planning and management; identifying resource requirements; planning the research project; risk assessment; terms of reference; and controlling the project and modifying project plans.

Blocks 5 and 6 

PGT Project – 60 credits

The aim of the project/dissertation is to provide students with the opportunity to carry out a self-managed in-depth study involving design, fact finding, analysis, synthesis and integration of complex ideas which are sometimes based on incomplete and contradictory data or requirements. The project is likely to demonstrate the application of skills acquired from the taught course to the solution to a particular problem or research topic. Normally the project is a self-contained piece of work of considerably greater depth than can be accommodated within a taught module and may reflect and build on the entire breadth of material studied by the student.

While there are a range of types of projects, there are no rigid distinctions between them, as the scope and importance of literature analysis, primary research, and system development can be tailored to fit the needs and interests of individual students and topics. Development projects, research projects and literature study projects are the most common types:

  1. Development Project: In a development project, the student is normally expected to produce a working piece of software that serves a particular purpose, meeting a defined set of requirements. In some cases, the product may include self-designed and purpose-built hardware as well as software, for instance an innovative robotic system. The running system itself is normally the major deliverable, and is normally the most important factor in the assessment. However, the requirements analysis, the system design work, and the testing and evaluation of the software - and how they are documented and presented - are also important to the assessment of development projects. The development work should be set in the context of the questions that it should help answer and how it contributes to answering them.
  2. Research Project: Research projects normally involve the design and implementation of original empirical research. Students are normally expected to create a research proposal and plan, identify research questions, undertake a literature review, review, select and evaluate data collection and data analysis methods, design and implement empirical research, analyse data and report research outcomes. All research projects are required to be undertaken within, and contribute to, a theoretical framework.
  3. Literature Study Project: A project may consist of a literature review alone when it is extensive, strategically significant, rigorously defined and implemented, and includes well-thought-out recommendations and implications. This requires the student to produce a novel and creative analysis that attempts to answer one or more unanswered (or perhaps wrongly answered) research questions. The student is expected to produce a report describing and critically evaluating existing documents and other sources of information, setting them in the context of a clear conceptual framework, and presenting a cogent analysis.
  4. Consultancy Project: In a consultancy project, the student is normally expected to produce a consultancy-style report to meet a clearly defined need for a clearly defined client or audience, providing a detailed and sophisticated critical evaluation of existing techniques, approaches or systems, or how to solve a practical problem, with recommendations. The practical consultancy work should be set in the context of how the work can answer more general and scholarly questions.
  5. Data Analysis Project: In a data analysis project, the student is expected to evaluate, select and apply computational techniques for data analysis and knowledge extraction, to solve a novel data analysis or knowledge extraction problem, or develop a novel technique for solving a particular data analysis problem, or develop a novel technique for presenting data or statistical information to support a particular human activity. The student is expected to demonstrate and illustrate the application of the technique and evaluate how well it solves the problem.
  6. Conceptual Analysis Project: In a conceptual analysis project, the student is expected to develop an analysis on paper of a system or of how to solve a problem. Such projects might involve developing an analysis of a working software system by applying one or more analytical techniques, for example for producing a usability evaluation; or analysing or modelling a process; or producing a notation or technique for describing a particular sort of information that a software system might generate or use; or devising a procedure for tackling a particular class of problem in software development. The student is expected to demonstrate and illustrate the application of the technique and evaluate how well it solves the problem.