Skip to Main Content
Two male students working together in a computer lab

Software Engineering – BSc (Hons)

Three year bachelor's degree

Introduction

Software Engineers are programming architects, who apply computer science, engineering and mathematical analysis to the design and development of large, complex, and critical software systems.

This programme provides you with a comprehensive grounding in computer science, while equipping you with the specialist skills required for a profession in software engineering and design. Software Engineering has been a major research theme at Lancaster since 1986.

Duration

Three years (full-time)

Intakes

  • October
  • January (Foundation start)

Fees 2024/2025

  • International €17,250
  • EU/UK €10,350

Location

Language of Instruction

English

Programme Overview

Your first year will provide you with the fundamentals of computer science, software development, digital systems and understanding of professionalism within your chosen practice, allowing you to gain the essential knowledge needed for analysis and design. You will also begin to develop complex computer programming skills, learning to write, analyse, debug, test, and document computer programs.

Your second and third years offer advanced modules, including Distributed Systems, Computer Human Interaction, and Languages and Compilation. In addition to developing your foundational understanding, programming, and software design skills, related to the discipline and will complete a group software engineering project. These will allow you to develop the working knowledge and skills to overcome the challenges of designing, developing and evaluating real-world software systems.

You will also undertake a variety of software engineering studio modules, ensuring you gain a broad and robust level of skills and experience. These modules require you to solve real-world problems as a software engineering team and will further develop your data analysis, graphical, report writing and presentation skills.

Programme structure: Information contained on the website with respect to modules is correct at the time of publication, and the University will make every reasonable effort to offer modules as advertised. In some cases, changes may be necessary and may result in some combinations being unavailable, for example as a result of student feedback, timetabling, staff changes and new research. Not all optional modules are available every year.

Page Section

Year One Modules

Digital systems

The creation of the microprocessor revolutionised global innovation and creativity. Without such hardware we would have no laptops, no smartphones, no tablets. Life changing technologies from MRI scanners to the Internet would simply not exist.

This module provides an introduction to the field of Digital Systems – the engineering principles upon which all contemporary computer systems are based. Students will study the elements that work together to form the architecture of digital computers, including computer processors, memory, data storage, and input/output. They will unearth the ways in which these are enabled by digital logic – where George Boole’s theory of a binary based algebra meets electronics. Building on Software Development, students also discover how the software programs we write translate to, and interact with, such hardware. Finally, students will explore the effects of multi-process operating systems, and how these interplay with the capabilities and architecture of modern computers to optimise performance and robustness.

Fundamentals of Computer Science

Computing and data drive many critical elements of modern society, directly or indirectly. It’s vital that there is a strong theoretical foundation to computer science. This module begins by examining the hard questions central to computer science and reasoning itself to prepare students for the in-depth critical thinking and discussion required at university level. Students will cover the fundamentals in logic, sets, and mathematics of vectors, matrices, and linear algebra which have practical applications in software such as computer graphics. Algorithms, abstract data types, and analysis of algorithms is introduced to allow our students to make reasoned decisions about the design of their programs. Finally, they will get the chance to investigate and apply the principles of Data Science to select, process, and analyse data, and examine the way programs and systems can be designed to efficiently support work with data and question the limits of conclusions that can be drawn from such systems.

Professionalism in Practice

This module is designed to provide students with a strong foundation in principles of responsible computing, covering the legal, social, ethical and professional challenges that that a practicing computer scientist regularly faces. It is heavily research-led, delivered by staff actively researching these issues, and draws upon contemporary examples of where technology has resulted in both benefits and harm to people and society. Students will develop an understanding of the legal frameworks, professional codes, working practices and civil licenses designed to provide protection from these harms. Particular emphasis is placed on considerations relating to the need for computer systems to be trusted and trustworthy.

Software development

Software now forms a central aspect of our lives. From the applications we run on our phones to the satellites in space, all modern technology is enabled by software. This module provides an introduction to the field of Software Development and the processes and skills associated with designing and constructing computer programs. Students are not expected to have any previous experience with the field of computing, and will study the contemporary knowledge, skills and techniques needed to develop high-quality computer software. This includes a thorough treatment of the principles of computer programming and how these principles can be applied using a range of contemporary and established languages. They will discover how programming languages can be classified and how to choose the best language for the task at hand.

Students will also investigate and apply the practical Software Engineering skills needed to ensure software is correct, robust and maintainable. These include techniques for problem analysis, design formulation, programming conventions, software commenting and documentation, testing and test case design, debugging techniques and version control.

Optional elective modules

Students are required to undertake 40 additional credits from a selection of 1st year elective modules from other departments.

Year Two Modules

Advanced Programming

This module provides broader exposure to alternative programming language paradigms beyond imperative and object-oriented programming. Particular emphasis is given to functional programming languages, and their unique constraints and features. More specifically, students will investigate how introducing the concept of absolute immutability into programming languages enables a suite of expressive mechanisms within programming languages including pure functions, lambdas, higher order functions, pattern matching, currying, map/reduce, and pattern matching.

As a part of this module, students will also explore why functional languages bring about increased reliability and scalability, and how they are now experiencing a resurgence within the software industry. Finally, through hands-on laboratory sessions, students see how functional programming concepts are being integrated in mainstream programming languages such as Java, Python and JavaScript, to create versatile multi-paradigm programming environments.

Algorithms

In this module, students will build upon the foundations of algorithms and their complexity to develop a deeper understanding of algorithmic approaches to computational problem solving. They will explore computational complexity theory, which allows us to consider the very nature of computability; including non-deterministic polynomial (NP) complexity classes such as NP-hard, NP-complete and the classes of problems which cannot be solved. Students will be introduced to classical approaches to problem solving such as divide and conquer, recursion, and parallel approaches, emphasizing their relative benefits and weakness to different classes of problem. They will study advanced data structures in depth, such as tries, heaps, suffix arrays, k-d trees, and distributed hash tables, and explore the approaches for their efficient construction and use.

These theoretical aspects are grounded through practical work in the lab and placed in the context of case studies of extreme scale and embarrassingly parallel computing, derived from real-world problem domains introduced by invited speakers where possible. Finally, students explore key implications of algorithm performance including their impact on energy efficiency and sustainability to provide a coherent interface with other modules.

Computer Networks and Systems

Building upon the foundations set in Digital Systems, this module investigates the deeper concepts that underpin computer networking and operating systems. Students explore the role, operation, and design rationale of the IP protocol suite –which enables the global internet. Taking a top-down approach, students discover how protocols such as HTTP, DNS, and TCP/IP operate on a fundamental level, the metrics and tools we use to evaluate the performance of computer networks.

Using laboratory-based simulators, students will also explore first-hand how routing protocols ensure user data is efficiently and safely routed across the global internet. They will study the interface between computer networks and operating systems, and how the concept of virtualization has transformed the way computer systems and networks efficiently make use of their hardware resources.

Computer-Human Interaction

Most computing systems are interactive and have people in the loop. Human-computer interaction (HCI) is concerned with all aspects of designing, building, evaluating, and studying systems that involve human interaction. From a computing perspective, students focus on enabling interaction through user interfaces, and on creating interactive systems that are usable and provide a good user experience.

The module introduces students to the foundations of HCI in understanding human behaviour, technologies for interaction, and human-centred design. Students will review human perception, cognition and action and relate these to design principles and guidelines; discuss different user interface paradigms and key technologies such as pointing; and introduce practical methods for design and evaluation with users.

Data Engineering

This module builds upon knowledge gained in Part I by providing a theoretical background to the design, implementation, and use of database management systems, both for data designers and application developers. It incorporates consideration of information quality and security in the design, development, and use of database systems.

As a part of this module, students will be introduced to a brief history of database management systems, Entity-Relationship Models, the relational model and the data normalisation process, and alternative schema definitions, NoSQL and object-oriented data models, big data, as well as transaction processing and concurrency control. The module embeds practical access and retrieval considerations and how to interact with databases written in a number of programming languages.

Secure Cyber Systems

The module aims to provide students with information on Authentication, Authorisation, and Accountability (AAA) and its building blocks. An emphasis will be given on authorisation, where access control models, policies and mechanisms will be examined.

Students will review main categories of existing cryptosystems (e.g. symmetric, asymmetric) in order to understand their use and offered security properties (e.g. confidentiality, integrity, non-repudiation) in practice. They will explore operating systems security and network security concepts in connection to AAA and cryptosystems, as well as being introduced to formal verification and how it can be used to verify properties on cyber security systems.

Software Design

Software Design offers the opportunity to gain an understanding of the importance of software architecture design, different styles of architecture and the meaning of quality attributes for software design such as maintainability, performance and scalability. Students will gain knowledge of systematic approaches to developing software design using a set of graphical models. The design process involved in developing several modes of the system at different levels of abstraction is explained and they will be introduced to object oriented design with UML.

Throughout the module, students will appreciate the broader context of the role of computer science in the workplace, and the key role it plays in implementing software. The course also looks at understanding the meaning of quality attributes for software design as well as architectural models for specific software systems. Students will gain an insight into the main quality attributes for deciding classes. Students will be able to interpret and construct UML models of software and implement a design expressed as a UML mode as well as understanding how to use various design patterns to address certain problems.

Concurrent and Parallel Systems

Computer architecture has now reached a critical juncture where we are witnessing a step change in computer performance, not due to the increased performance of individual processors, but through the inclusion of many, sometimes even thousands, of processor cores in a single computer.

In this module, students will learn how to classify the different designs of multi-processor computers such as symmetric CPUs and general-purpose GPUs. They will investigate their benefits and drawbacks and study the theories and factors that can all too easily bound their seemingly limitless computational potential. Through a combination of lab exercises and lectures, students will discover how to use contemporary software tools and techniques to create high performance applications that exploit multi-threaded instruction parallelism whilst avoiding race conditions, deadlock and livelock, and utilise GPUs to exploit data parallelism.

Software Design Studio Project 1

In this module, students will get the opportunity to adopt a real-world software design studio methodology that builds upon the knowledge gained in Software Development to create a reasonably sized, concrete, group development project. In particular, students will learn how to apply project planning, management and execution, requirements analysis, systems design (using appropriate methods such as UML and design patterns) and testing strategies.

Furthermore, individual modules of a large-scale system will be implemented and integrated by the group. As part of the project, students learn how to deliver reports, code, and demonstrate a working system. The work is completed through the presentation of certain elements of work in written, graphical and verbal forms and through the production of materials such as reports, a website, poster, and presentations.

By the end of the module, students will be able to create clear and precise software engineering reports, recognise issues they may encounter during software projects, and demonstrate their ability to work collaboratively within a software development team.

Year Three Modules

Advanced Networking

Computer networks have experienced an exponential growth in traffic volume and size since the early days of the Internet. Packet network technologies underpin every aspect of our daily work, social life, and entertainment – even enabling the global populous to continue working during a global pandemic.

This module investigates the evolution of network technologies to cope with the global Internet growth trends and is organized in three topic areas. Core topics explore the architecture of devices and protocols that facilitate end-to-end connectivity across the global Internet and allow control of connectivity properties, like bandwidth and latency. Research and Industry topics explore cutting-edge research and industry perspectives on the challenges that face production network technologies, such as performance and security, and elaborate on future directions in networking to address them. Finally, practical topics will introduce students to network emulation and simulation technologies and offer the opportunity to recreate realistic network testbeds. Through small group practical sessions, students will gain experience using open-source software frameworks to implement, configure and test common network functionalities, such as routing and firewalling.

Distributed Systems

Large scale distributed computing systems are now commonplace, implemented through the use of “cloud infrastructures” where computing and storage resources are pooled into data centres around the globe. In scientific terms, these are examples of the wider field of Distributed Systems.

In this module, students will learn about the fundamental principles that underpin modern distributed systems, the abstractions on which they are based, and their characteristics. Particular emphasis is placed on the scalability and fault-tolerance of these systems, and students will get to undertake a deep dive into the commonly used frameworks for distributed systems, such as Google infrastructure, and highly distributed peer to peer approaches. Small group practical labs reinforce theory through hands-on experience of distributed systems development.

Languages and Compilation

All programming languages are based on theoretical principles of formal language theory. In this module, students take a deep dive into formal languages representation and grammars, and how relate to programming language compilers and interpreters.

Students will study formal language syntax and semantics, phrase structure grammars and the Chomsky Hierarchy. They will learn how to classify languages and explore the concepts of ambiguity in Context Free grammars and its implications. In particular, they will learn about the compilation process including lexical analysis and syntactic analysis, recursive descent parsers, and semantic analysis. Finally, students get to investigate the synthesis phase, where intermediate representations, target languages, and structures lead to code generation. In the School, we blend lectures with small group lab sessions where students gain hands-on experience of applying such theory.

Secure Cyber Physical Systems

This module discusses the security threats to Cyber-Physical Systems (CPS) – such as Industrial Control Systems, IoT, Smart Cities, and Connected Vehicles, and techniques to mitigate these threats. Students will learn how to identify appropriate security techniques and protocols to use depending on the specifics of a CPS. This involves understanding how to write secure applications for CPSs and alternative technologies, such as Transport Layer Security (TLS).

Students will also explore how the limitations of these systems impact the security guarantees that can be provided. In addition to security, this module will examine the safety and privacy threats CPSs will be subject to and explore the interconnectivity between them and security. By the end of the module, students will be able to design experiments to test the effectiveness of a CPS’s security, as well as translate their experiences of securing one CPS to another within a different domain.

Software Design Studio Project 2

The module Software Design Studio Project I (Core Studio) gave students within small groups hands-on practical experience in the development of individual software modules. Software Design Studio Project II (Networked Studio) takes this learning a step further in introducing more complex and realistic software systems.

Through the studio approach, students will focus on the integration and networking of software modules to create larger systems. In particular, students learn software engineering techniques relevant to medium scale networked projects such as models of distributed architecture, large-scale integration testing, distributed team development, and techniques for large scale software quality. As part of the project, teams will deliver reports, code, and demonstrate a working system. Further they will present certain elements of their work in written, graphical, and verbal forms through the production of materials which may include reports, a website, poster, and presentation.

Software Design Studio Project 3

Software Design Studio Project II (Networked Studio) gave students hands-on practical experience of developing medium-sized networked software systems. Software Design Studio Project III (Live Studio) takes this learning a step further by having students work on large projects with industry involvement.

Each single group works on a large system that will, by the end of the course, be deployed with live users. Focus is on building a real-life innovative system that could potentially have commercial or research value. The development process adopts an agile approach with strong emphasis on disciplined software engineering practice. As part of the project, teams will deliver reports, code, and demonstrate a working system. Further they will present certain elements of their work in written, graphical, and verbal forms through the production of materials which may include reports, a website, poster, and presentation.

Teaching and Assessment

Teaching is delivered via a combination of small group lectures and group-based tutorials. Assessment is via individual or group coursework, research projects and examinations. You will be expected to undertake independent study throughout to supplement what is being taught/learned and to broaden your personal knowledge.

Degree Award

All BSc (Hons) Software Engineering students will receive their undergraduate degree from Lancaster University’s Bailrigg campus in the UK, with all relevant accreditations.

Careers

A degree in Software Engineering can open up a range of exciting career avenues, including the following roles:

  • Applications developer
  • Cyber security analyst
  • Data analyst
  • Data scientist
  • Game developer
  • Information systems manager
  • IT consultant
  • Machine learning engineer
  • Multimedia programmer
  • Web developer
  • Web designer
  • Software engineer
  • QA/Test automation engineers
Back to Top