Software Engineering
Learning Outcomes
- Investigate and analyse a problem, write a software requirement specification and design blueprint expressed in UML which provides a basis for code generation,
- Apply a range of design patterns and principles to solve particular design problems,
- Apply a range of refactoring techniques to improve code quality
- Critically evaluate and apply a range of tools and techniques for automated software testing, including test-driven development,
- Manage risk in making changes to an existing software system through rigorous engineering practices,
- Critically evaluate the appropriateness of different software engineering techniques/tools in different circumstances, and on the quality of the design of an application.
Core Texts

Object-Oriented System Analysis and Design, 4th Ed
Bennett, Simon; McRobb, Steve; Farmer, Ray
McGraw Hill, 2010.

Software Engineering 9th Ed
Ian Sommerville
Addison Wesley, 2015
Weekly Units
- Software development process
- Requirement capture and modelling
- Requirement analysis and specification
- High-level and Lower level design
- Design patterns and state machines
- Refactoring and software testing
- Software risk and quality management