Software Engineering MSc module details
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.
This Part-A aims to provide students with insight into quality assurance in the software engineering process and effective testing methodologies. It covers basic concepts, sound principles, best practices, and rigorous approaches for testing software and assuring its quality. The emphasis is placed on problem formulation, modelling and problem-solving skills for building and delivering high-quality software. As software becomes more complex, it is necessary to establish processes and clear methodologies to ensure that the software has been exposed to intensive and rigorous testing techniques and procedures. Methods for software testing and quality assurance need to be integrated into all phases of the software development process. This module will discuss theoretical issues such as software product quality (per current ISO and IEEE standards), quality assurance planning and monitoring, software product quality measurement and metrics. A number of approaches to software quality management will be examined and critically evaluated. The importance of configuration management and change control will be reviewed, and sound practices evaluated. This module will also look at in-depth above issues from an industrial perspective, exploring the techniques available and how these might be employed. One key mechanism of quality control is software testing. Testing is crucial in the process of developing software and this module provides with the principles for conducting software testing in a systematic and effective manner. It attempts to prepare students to test software in structured, managed ways and use knowledge of formal methods in software testing to appropriate professional standards.
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 and documents software and system requirements. System design is the process of defining the architecture, modules, interfaces, and data for a system to satisfy specified requirements, transforming an operational need into a system description within Quality of Service (QoS) parameters and a system configuration. In this module, requirement analysis will focus on software requirement elicitation, analysis, specification, high-level design (including trade-off decisions) validation and verification, and management in an iterative development process that includes prototyping and demonstrates traceability from requirements through to design. A key aspect focuses on the 'good design' of cloud-based systems. The module is therefore intended to provide the student with a comprehensive understanding and an ability to critically analyse system requirements, and design and evaluate cloud-based systems.
Internet of Things and High-Assurance System Design – 30 credits
Over the past decade, there has been an increasing trend towards integrating sensing, communication, and computation into the physical world so as to make data and services readily available to users at any time and everywhere. The Internet of Things (IoT) is a paradigm for achieving that goal by enabling virtually any object (thing) to be embedded with electronic components to sense, compute, and communicate with other objects through the Internet. The aim of this module is to provide students with the necessary knowledge and understanding of IoT technologies and their application to the provision of smart services, as well as a wider understanding of how data analytics and visualisation are performed through cloud computing services.
High assurance system design techniques are used in the specification and design of critical systems where failure can cause catastrophic effects such as death, damage to the environment, and loss of money. The aim of this module is to provide students with a comprehensive understanding of high-assurance system design approaches that are based on automata theory to provide a platform for practical system design and critical evaluation.
Critical Systems and Modern Programming Techniques – 30 credits
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 which have been constructed through the effort of multi-disciplinary teams. The engineering and assessment of modern CSs is thus complex, multi-disciplinary task, often involving mechanical, structural, and electronic and software engineers and psychologists. The skill of economists is needed; sociologists also have a role in addressing the interaction between complex systems and teams of operators. This module aims to introduce and critically analyse CSs. Requirements for the engineering of CSs will be introduced and the role of formal approaches in the life cycle of CSs will be explored. Ethical and professional issues will also be explored.
Multi-core computer architectures have become the norm and this has led, in turn, towards the application of modern programming techniques. These are gaining significant interest in industry. For example, Twitter has used Scala in the development of its infrastructure*. 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 off coding in which a source of runtime errors is significantly reduced. Modern programming languages that have recently incorporated these techniques include C++, C#, Python, PHP, and Java, as well as a range of emerging JVMbased languages such as Scala and Clojure. These recent changes are very noticeable, for example, in Java (SE 1.8) where a blend of functional and object-oriented concepts has been developed, including lambdas and support for streams. 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 and libraries. * http://twitter.github.io/effectivescala
Advanced Research Topics and Research Methods – 30 credits
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 as well as current internal and external research projects. 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; 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.
The part of the module focuses on the ethical and professional context of cyber security digital engineering, systems management, and digital forensics and 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, 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, digital engineering, systems management, and digital forensics The module identifies and explicates relevant research methods.
Blocks 5 & 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:
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.