Behind every high-tech system is the software that makes it run, but few people outside the field of software engineering can understand the important role it plays, or how challenging it can be to build it. Safety-critical software engineering is one of the most fundamental aspects of the development of modern safety-critical systems. Today we’ll explore what makes software engineering uniquely difficult for safety-critical applications, and how taking a different, more agile approach can address these challenges.
What is Safety-Critical Software Engineering?
As the name implies, safety-critical software engineering is the development of specialized software to work with safety-critical systems. The type of software and its capabilities will vary significantly based on the specific application and the type of industry. Almost any industry with safety-critical systems makes use of software to make it run properly.
In aviation, safety-critical systems include the flight control system, primary flight displays, air traffic control systems, and more. All of these require custom-built software that meets specific requirements and industry guidelines that ensure these systems perform as intended. Medical equipment like MRI machines and infusion pumps have safety-critical components, as do modern braking systems in cars and trucks, railway control systems and nuclear reactor control systems. These industries are very different from one another, but they all have their own safety-critical systems, each requiring expertly-developed software to allow these systems to do their job.
What Makes Safety-Critical Software Engineering So Challenging?
Most engineering disciplines have increasingly embraced agile development over traditional waterfall methods. For most applications, switching to agile is often just a matter of getting the right decision-makers and stakeholders to buy in and commit to the process. With safety-critical software engineering, however, it’s not quite that simple.
Because there is so little room for error with safety-critical systems, there are more regulatory guidelines and standards in place that software engineers must comply with to make sure that the software is safe and effective enough to be used. Examples include the IEC 62304 (for the medical device software), the IEC 61513 (for nuclear engineering) and Software Considerations in Airborne Systems and Equipment Certification or DO-178C (for avionics software). In each of these documents, the criteria for what is acceptable are defined, and the software must be built with that in mind or it cannot be used.
While attention to detail and quality is certainly important in all software engineering, these standards represent an additional hurdle that software engineers must overcome that would not be an issue when developing software for other types of systems.
Software intended for safety-critical systems is required to pass regulatory audits based on these standards before it can go to market. Companies and teams developing this software must devote considerable amounts of time and resources to making sure that their product can pass all the necessary audits. In addition, the sheer complexity of many safety-critical systems means that in many cases, multiple teams and even multiple companies are involved in the software engineering process. Very detailed specifications need to be recorded for every step of the development lifecycle, including the records of any changes made and/or requested. This creates a large trail of documentation which must be entered and logged correctly, making the process even more arduous.
These standards and guidelines are a good thing— they clearly establish the criteria that safety-critical software must meet, and they prevent substandard software from getting to market and putting people’s lives and property in danger. But the time and resources required to ensure compliance will slow down development and drive up costs. In scenarios where multiple teams are involved, the likelihood of miscommunication, mistakes, and delays is much higher.
Here is where a new approach like Model-Based Systems Engineering (MBSE) can help. Our teams use MBSE to develop world-class safety-critical software for government applications, as well as the transportation industry, aerospace industry and more. MBSE is an agile methodology that reduces inefficiency and eliminates miscommunication throughout every step of the System Development Life Cycle, even when multiple teams and organizations are working together, and complex standards and guidelines must be met. We invite you to learn more about how MBSE applies to safety-critical software engineering, and how we can design the best software for your organization and get your systems to market faster.