Software Safety

What Is Software Safety?

Software safety is the discipline of software engineering concerned with ensuring that software systems do not contribute to hazardous conditions that could result in injury, loss of life, damage to property, or harm to the environment. It encompasses the systematic identification of software-related hazards, the derivation of safety requirements from hazard analysis, and the application of development and verification processes rigorous enough to give confidence that those requirements are met. The discipline applies most directly to safety-critical systems, where software controls physical processes whose failure could cause harm.

Software safety draws from systems safety engineering, reliability theory, and formal methods. It is governed by a family of domain-specific standards including IEC 61508 for general functional safety, DO-178C for airborne software, ISO 26262 for automotive systems, IEC 62304 for medical device software, and EN 50128 for rail applications. These standards share a common structure: they require hazard identification, risk classification, and process-based evidence that safety requirements have been met. The IEEE Standard 1228 for software safety plans provides a framework for planning and executing software safety activities across the development lifecycle.

Hazard Analysis and Safety Requirements

The starting point for software safety work is a systematic hazard analysis of the system as a whole. Techniques including Failure Mode and Effects Analysis (FMEA), Fault Tree Analysis (FTA), and System-Theoretic Process Analysis (STPA) are used to identify sequences of events that could lead to harm and to determine the contribution of software to each hazard. From this analysis, safety requirements are derived and assigned Safety Integrity Levels (SILs) under IEC 61508 or analogous classification schemes under domain standards. The IEC 61508 functional safety standard defines four SIL levels, each associated with a target probability of dangerous failure per hour that the software must not exceed. Safety requirements specify both required behaviors and prohibited states, making them more demanding than ordinary functional requirements.

Safety-Oriented Design and Architecture

Safe software design applies a set of well-established architectural principles to reduce the probability and consequence of failures. Fail-safe design ensures that any detected failure transitions the system to a safe state rather than an undefined or dangerous one. Defensive programming techniques detect unexpected inputs or states and handle them in a controlled manner. Separation of safety functions from non-safety functions limits the complexity of the code subject to the most stringent verification. Comparative safety assessment examines alternative architectures against each other to determine which configuration best achieves the required safety level. Software reliability, defined as the probability that software will perform its required functions for a specified period under stated conditions, is a measurable design target that architectural decisions directly influence.

Verification and Testing for Safety

Safety-critical software demands a higher level of verification rigor than general-purpose software. Structural coverage criteria, including statement, branch, and modified condition/decision coverage (MC/DC), are required by airborne software standards to demonstrate that test suites exercise the safety-relevant logic. Formal verification methods, such as model checking and theorem proving, are applied where the highest integrity levels require mathematical proof rather than testing alone. Independent verification and validation by a party separate from the development team is mandated by most safety standards to guard against systematic errors in both requirements and code. The NIST guidelines on minimum standards for developer verification of software outline verification practices relevant to safety-sensitive development contexts. Software security requirements are incorporated as a category of safety requirements in connected systems where a successful cyber attack could compromise safe operation.

Applications

Software safety engineering has applications in a wide range of disciplines, including:

  • Avionics flight control and navigation systems certified to DO-178C
  • Automotive active safety systems including collision avoidance and electronic stability control
  • Medical devices such as infusion pumps and radiation therapy systems
  • Rail signaling and train control systems
  • Industrial process control in nuclear, chemical, and oil and gas facilities
Loading…