This modules aims to provide practical skills in how to approach the modelling and design of a large critical software project. The module covers modelling techniques from requirements analysis to design and introduces a range of tools and approaches. In particular, formal modelling and tools to support this are covered. The inclusion of these derives from the demand of critical systems for rigorous Requirements Engineering with strong Validation and Verification practice. The module is compulsory for MSc Software Engineering students. Experience of Object-Oriented programming is assumed and some familiarity with UML would be an advantage.