Complexity is a critical problem in the design of modern control software. Software's discontinuous behaviour means that model-based descriptions must deal with large and complex spaces of system states in which it is not possible safely to draw conclusions from tests on selected sample values. Discrete Event (DE) modellers typically deploy several techniques to manage complexity, and modelling languages such as the Vienna Development Method (VDM) support these. The first is abstraction, which is the deliberate suppression of detail that is not relevant to a model's purpose. Second, structuring techniques are used to organise models so that the system can be understood as the composition of units that can be modelled and analysed separately. Third, a high degree of rigour in modelling allows the systematic analysis of models and identification of flaws. Given a sufficiently formal modelling language, some analyses are so systematic that they can be performed automatically.
Conventional programming languages have the benefit of a structuring mechanism and some degree of rigour, but it is the capacity for abstraction that makes a DE modelling language such as the VDM radically different and able to provide early-stage analysis of controllers before they are implemented in code on specific devices. VDM has three dialects: the ISO standardised VDM Specification Language (VDM-SL), its object-oriented extension (VDM++), and a further extension for describing real-time systems (VDM-RT). The latter dialect is used in most of this work. VDM is supported by the Overture tool which has been extended to be able to export FMUs.