I teach a variety of topics in Software Engineering. Courses tend to be geared towards a mixture of undergraduate and postgraduates, primarily from a Computer Science background.


Testing and Verification in Safety Critical Systems (COM4506 / COM6506)

In this course we cover every aspect of the conventional software development lifecycle (from requirements elicitation through to verification and validation), but with a particular emphasis on the activities that are particularly important for safety critical software, such as hazard / risk analysis, safety cases, and the various conventions that can support conformance with industry standards.

Systems Design and Security (COM2008)

This course covers development activities that are particularly relevant to security. We examine where vulnerabilities can arise, and look at some of the techniques that are used to attenuate them.


Whilst at Leicester I taught two modules:

Software Reengineering

This module teaches students how to improve existing legacy software systems (as opposed to developing software from scratch). For this we teach a mixture of reverse-engineering techniques (to understand the structure / functionality of a software system), as well as refactoring and re-structuring techniques to gradually improve software quality.

Software Metrics and Quality Assurance

This module provided a broad perspective on the challenges and techniques involved in ensuring software quality. Activities ranged from requirements elicitation, through to cost estimation, quality measurement, and testing / verification techniques.