6Software Error Detection and Recovery Through Software Analysis
6.1 Introduction
From the initial days of ILLIAC I – the first von Neumann architecture to be built using the stored program concept – software has evolved to become a very large and failure‐prone component of computer systems. Failures of software systems can occur because of runtime errors (e.g. hardware transients) or bugs introduced at any phase in their lifecycles (development, deployment, or maintenance). Those errors should be detected and recovered from with minimum impact on system/application availability. To achieve that goal, software can be fortified with a fault/error detection mechanism at any of the phases in its lifecycle. During the development stage, software specifications can be implemented by independent groups of programmers to provide what is commonly called N‐version programming. Alternatively, a recovery‐blocks scheme can be used to enable redundant execution and rapid recovery. During the implementation phase, formal proof techniques can be utilized to prove the correctness of the software from both functional and nonfunctional standpoints. Compile‐time techniques – which might be implemented as additional passes in a compiler – include static invariant detection, duplication, diversification of code at the source, or application‐specific assertions and can be used to provide the required resiliency. Runtime checking techniques, such as array bounds checking, memory leak protection, ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access