Course synopsis

This 2-day course is about a safer and more reliable way of using the language C. It is based on extensive measurements of how C systems fail and the lessons we can learn from these failures. It is particularly relevant to the production of modern embedded systems for consumer electronics and provides a comprehensive introduction to the development of modern high-integrity, business-critical and safety-critical developments. It is suitable for both inexperienced and experienced C programmers and forms a sound, rigorous basis for such development.

The course is copiously illustrated with data from real systems containing many surprises and important clues how to make software more reliable. Workshops, self-assessments and intriguing problems are included.

A considerable amount of background reading can be freely downloaded from:-

Day 1 and first half of Day 2

  • Introduction to software failure with many important examples and a summary of lessons to learn.
  • Standardisation and validation in safety-related systems and the C language. The importance of assessing compiler quality is emphasised and methods of doing this are described.
  • A safety-critique of the C language: cataloguing poorly-defined behaviour. Various sources of information about C failure are referenced and used to provide a comprehensive understanding of how C systems fail in practice to assist in future avoidance of failure.
  • Safer subsets including the MISRA standard are discussed in some detail.
  • Key areas of difficulty (with many examples and strategically placed workshops)
    • The pre-processor
    • Conversions
    • Interfaces
    • Pointers
    • Expressions and types
    • Memory
    • The library

Second half of Day 2

  • The wider picture: Systems engineering concepts
    In building reliable systems, the programming language is only part of the puzzle. In this section, attention is focussed on development techniques and systems engineering concepts such as control process feedback and its role in improving reliability. In particular, a section on inspections, one of the most successful methods for detecting defect ever discovered, occupies a substantial part of the afternoon. The following topics are covered:-
    • Code inspections
      This section describes the basics of inspections and includes an inspection workshop to teach fundamental principles.
    • Complexity: its measurement and system implications
      The influence of complexity on system properties is discussed with reference to several well-known metrics. The unusual nature of the defect curve is explained and methods of exploiting it described.
    • Software measurement
      This section describes the basics of software measurement and how such measurements can be used. Measurements from OO systems are presented to contrast with those found in conventional systems.