Source: https://resources.healthgrades.com/right-care/pacemakers/frequently-asked-questions-about-pa cemakers The modern technological world is becoming increasingly dependent on software systems that control processes where a single logical error can lead to physical destruction, environmental catastrophe, or loss of human life. Conventional approaches to software verification such as unit testing, integration testing, and fuzzing are fundamentally empirical. Software validation techniques can identify the presence of logical errors in programs, but cannot prove total absence of errors. As modern flight control systems, cardiac pacemakers, and robotic surgery systems become significantly more complex, such approaches to software validation may become inadequate. The most rigorous methods of verifying high-integrity software employ interactive proof assistants and automated theorem proving to mathematically verify that a computer program meets its specifications. Computer software can be verified for correctness using formal methods of verification. Software systems and their specifications can be mathematically formalized and submitted to automatic or interactive theorem proving. Automated proof assistants such as Satisfiability Modulo Theories (SMT) solvers can be employed to prove that programs do not contain certain classes of logical errors. More complex software verification tasks require assistance from human proof assistants who guide the process of applying mathematical logic to verify that the system behaves according to the specifications. Theorem proving can be used to confirm memory safety of production software, to prove that distributed consensus algorithms are free from deadlock, or to verify that a compiler does not introduce logical errors at the instruction set architecture level. Aerospace systems are among the first domains to adopt formal methods of software verification because of the extreme safety requirements in commercial aviation and aerospace engineering. Federal Aviation Administration (FAA) regulations require that aviation software systems undergo formal verification in order to achieve the highest level of aviation software safety (DO-178C Level A). Software systems in modern commercial airplanes and spacecraft are highly integrated and employ fly-by-wire and automated command and control systems. Such systems require the highest degree of reliability since pilot error or technical failure of an automated system could lead to loss of an aircraft. Aerospace engineers use formal methods of software verification to prove that automated flight control algorithms, spacecraft thruster control systems, and air traffic control systems do not experience logic errors or memory safety violations. Modern medical devices and hospital machinery are similarly safety-critical systems that require the highest degree of reliability. The U.S. Food and Drug Administration (FDA) regulates medical devices and issues guidelines for software verification and validation of medical equipment. Medical systems require the highest degree of software safety since system failure can quickly lead to loss of human life. Formal software verification methods are being used to prove that cardiac pacemakers, implantable sensors, and robotic surgical systems do not have logic errors. Theorem proving can be used to verify that a closed-loop artificial pancreas system will not deliver an incorrect dosage of insulin to a patient. Software verification using theorem proving is a resource-intensive process. Formal specification of a software system typically requires a substantial amount of time and expertise of a human mathematical logician. Building mathematical proofs for complex software algorithms can be challenging even for an experienced proof assistant. Current research is focused on the development of automated translation tools that convert high-level programming language constructs to logical assertions that can be automatically proved by a theorem prover. Software systems which utilize formal methods of verification are typically developed in special programming languages which allow for easier transition to mathematical logic. Formal software verification is the most rigorous approach to ensure that safety-critical computer programs are free from logical errors. Using automated and interactive theorem proving, engineers can systematically prove that particular classes of logic errors are absent from a computer program. Formal software verification approaches are being used in aerospace engineering, commercial aviation, and medical automation domains to ensure that software-controlled systems do not fail. As the role of computer software in controlling and monitoring human lives becomes increasingly important, the application of formal methods of software verification will become ubiquitous.
Sources
https://ntrs.nasa.gov/citations/20040068177 https://dl.acm.org/doi/10.1145/3522582
