MSc (Eng) Advanced Software Engineering

Start date: September 2019
Duration: 12 Months full time
Programme code: COMT06

Apply now

The content of our courses is reviewed annually to make sure it's up-to-date and relevant. Individual modules are occasionally updated or withdrawn. This is in response to discoveries through our world-leading research; funding changes; professional accreditation requirements; student or employer feedback; outcomes of reviews; and variations in staff or student numbers.In the event of any change we'll consult and inform students in good time and take reasonable steps to minimise disruption


Overview
  • Gain experience of working with real customers and solving genuine problems
  • Teaching informed by researchers working in relevant areas such as software development, verification and testing
  • The Department of Computer Science is 5th in the UK for Research Excellence (REF 2014)

The MSc (Eng) in Advanced Software Engineering is suited to graduates in Computer Science and related disciplines, who wish to complete their academic profile in specialist areas, and obtain practical experience of commercial software engineering. The programme provides a full awareness of leading-edge techniques for the specification, analysis, design, implementation and maintenance of complex software systems.

An innovative feature of the programme is its emphasis on enterprise culture, promoted via a student-run software company (Genesys Solutions) which MSc students have the option to join for the duration of the programme.

Content

In the autumn semester there is a fast-paced introduction to Java and the unified modelling language (UML).  Students are also introduced to Genesys which provides training for to those who choose to take the Genesys Project in the spring semester.   In the spring semester students do preparatory work for the dissertation project which is then undertaken over the summer.  Students are then able to choose to specialise in the spring semester by selecting from a range of optional modules. 

Autumn Semester

Object Oriented Programming and Software Design (core)

This module presents the object-oriented approach to building large software systems from components in the Java Programming Language. It assumes prior knowledge of imperative programming. Large scale program design and implementation issues are covered, using the Java Application Programmer's Interface, including the AWT, Swing and the Java Collections Framework. Topics include: data and procedural abstraction, collection interfaces and implementations, the event-driven model of computation, user interface components, streams and files, documentation styles with the Unified Modelling Language (UML).

Testing and Verification in Safety-Critical Systems (core)

This module provides an introduction to the processes and problems of building complex software such as for use in aerospace applications. Topics covered can be split into four major groups: safety, specification languages, concepts of software engineering, different methods of software testing. A substantial amount of time will be spent on the ideas of software testing and specific testing techniques. 1. Safety includes software and systems safety, methods of performing hazard analysis, human factors and the IEC 61508 standard. 2.Specification languages such as Statecharts. 3.Software engineering concepts focus on the software lifecycle, safe language subsets, software testing and maintenance. 4.The software testing part is concerned with advanced approaches to generating software tests.

Software Development for Mobile Devices (core)

This module aims to provide a thorough grounding in the principles of software development for mobile devices. The Android platform will be used as an example, although the modules emphasizes general principles that are common across all mobile platforms. An important aim of the module is to demonstrate the real-world application of object-oriented programming principles and design patterns in software for mobile devices. Students undertake a substantial software implementation project, working in pairs. The module will be taught primarily using Java and Swift languages.

Introduction to Genesys (core)

This module is an introduction to the processes involved in working with real customers and solving genuine problems, using agile software engineering practices. Students work in teams to develop web applications as training to become part of Genesys, supported by staff from epiGenesys .

Spring Semester

Research Methods and Professional Issues (core) This module aims to provide a solid foundation for the Dissertation Project. Students receive instruction both through taught lectures, and from their project tutors on an individual weekly basis, including: advice on research methods and technical writing style; risk analysis and contingency planning; peer-review processes; and the details of working within a professional, legal and ethical framework. The module is assessed on the basis of a project background report, which is submitted at the end of the spring semester, and on additional peer-review activities.

Genesys 2

This module involves students working with real customers and solving genuine problems, using agile software engineering practices. Students work in teams to develop web applications as part of Genesys, supported by staff from epiGenesys. Students should be aware that there are limited places available on this course.
Computer Security and Forensics (optional)

This module provides, in general, an introduction into computer security and forensics. In particular, this module focuses on approaches and techniques for building secure systems and for the secure operation of systems. The module requires a solid understanding of mathematical concepts (e.g., modulo-arithmetic, complex numbers, group theory) and logic (set theory, predicate logic, natural deduction). Moreover, the module requires a solid understanding of a programming language (e.g., Java, Ruby or C), basic software engineering knowledge and an understanding of database and Web systems. The lab sessions require a basic command of Linux in general and the command line (shell) in particular.

Students should be aware that there are limited places available on this course.

The Intelligent Web (optional)

This course is concerned with getting acquainted with the present and future of the intelligent Web. We will read and discuss both introductory descriptions and cutting-edge research papers. Topics will include:

  • Basic technologies for searching and mining the WWW
  • Large scale methodologies for the Web (e.g. Mapreduce)
  • Standards for knowledge representation on the Web such as the Resource Description Framework (RDF), and the Ontology Web Language (OWL), RDFa and microformats.
  • Web 2.0 and Web 3.0 concepts, including mining social media (e.g. Twitter and Facebook)
  • The Web of Data and the Semantic Web.

Students should be aware that there are limited places available on this course.

Software and Hardware Verification (optional)

This module introduces state-of-the-art software and hardware verification techniques which nowadays are widely used in industry. They are particularly important in safety-critical applications, where system failures can not be tolerated. Designing high quality dependable computing systems is widely believed to be the main challenge in computer science. Particular focus is on protocol verification and hardware design verification by model checking and program verification by formalisms such as Hoare logics. These techniques presume formal system specifications and use automated tools for analysing whether a system satisfies the properties required or imposed.

Students should be aware that there are limited places available on this course.

Cloud Computing (optional)

Cloud computing offers virtual, scalable, shared computing resources via a network, as a utility service. This module introduces the concepts of cloud computing, explaining why business is moving to this model, and teaches the technologies involved in developing a platform-as-a-service offered via the cloud. It focuses on Linux and Java servlet programming technologies for developing software service ecosystems.

Students should be aware that there are limited places available on this course.

Parallel Computing with Graphical Processing Units (GPUs) (optional)

Accelerator architectures are discrete processing units which supplement a base processor with the objective of providing advanced performance at lower energy cost. Performance is gained by a design which favours a high number of parallel compute cores at the expense of imposing significant software challenges. This module looks at accelerated computing from multi-core CPUs to GPU accelerators with many TFlops of theoretical performance. The module will give insight into how to write high performance code with specific emphasis on GPU programming with NVIDIA CUDA GPUs. A key aspect of the module will be understanding what the implications of program code are on the underlying hardware so that it can be optimised.

Students should be aware that there are limited places available on this module.

Summer

Dissertation Project (core)

This is a research led project that is supervised by a member of staff. In order to ensure best use of the summer study period, project preparation and planning is carried out in semester 2, which is separately assessed. Project activities take place during the summer period using Departmental facilities and students are exposed to the latest methods and ideas in the area of their project. There is scope for students to demonstrate their critical skills and topic-related knowledge to a high level.

Careers

Students are well prepared for employment in industry, or for postgraduate study. A number of graduates from this programme are currently studying for PhD degrees in the Department, or in other UK universities.