Applied Software Engineering
This module covers a range of Software Engineering (SE) material, building upon that introduced in the compulsory modules of the programme. The emphasis of this module is on the knowledge needed to be able to model, design, implement, and evaluate larger software systems effectively. We start with a brief revision of the development lifecycle models, such as agile development, and then continue to cover requirements specification, requirements analysis, object-oriented concepts, and object-oriented design, all with an emphasis on implementation.
Software engineering is an inherently practical subject and applying the concepts being taught is a vital component of developing expertise in this area. Students undertake a substantial group project, working through a number of stages of the development of a larger software application. Students will be supervised but will be expected to largely organise themselves and their work, learning key transferrable skills in team management and organisation.
To further develop the student's programming knowledge (in Python) enabling them to implement systems based upon knowledge obtained in the core modules of the degree programme.
On successful completion of this module a student will be expected to be able to:
- Appreciate the wider engineering issues that form the background to developing complex and evolving software-intensive systems.
- Plan and deliver an effective software engineering process, based on knowledge of widely used development lifecycle models, in particular Agile development.
- Employ group working skills including general organisation, planning and time management and inter-group negotiation.
- Capture, document and analyse software requirements. Translate a requirements specification into an implementable design, following a structured and organised process.
- Evaluate the quality of the requirements, analysis and design work done during the module.
- Understand the use of a web programming framework.
- Extend the student’s knowledge of modern programming techniques through the Python programming language.
- Practical application of Software Engineering techniques using the Python programming language.
- Revision of Software Engineering Principles including source code management using Git
- Application of the Agile development in Python
- User story realisation
- Object-oriented modelling
- Incremental refinement
- Design principles for modular applications
- Software infrastructures for utility computing
- Principles of Object-Oriented design including SOLID
- Refactoring, testing, and maintaining a codebase
- Further programming
- More Python (building on the student's existing programming knowledge, e.g., Introducion to Software Development)
- Functions-as-a-Service (FaaS) architectures
- Web development frameworks (e.g., Django)
- Services computing
- Case study and group work
Prospective students need to have either completed, or will be examined in the same year, the following modules:
- BUCI021S7 - Introduction to Software Development
- BUCI068H7 - Concepts of Computation
- COIY059H7 - Information Systems
To include three pieces of programming coursework consisting of individual, pair, and group assignments.
Project groups are formed during the first week of term, with the early stages of the project running concurrently with the lectures given during the first half of term. The second half of the term is then dedicated to the group project work.
- Coursework Programming Portfolio (50%)
- Unseen Examination - online (50%)
An overall pass is required in this module.
We include online resources and notes together with video courses from the Birkbeck Library collection (e.g., LinkedIn Learning).
For those of you interested in a textbook then we recommend:
"Engineering Software Products: An Introduction to Modern Software Engineering" by Ian Sommerville, Pearson, 2020, ISBN 9780135211168 (ePub), 9780135210642 (Hardcopy).