Software Engineering of Fault Tolerant Systems
When architecting dependable systems, fault tolerance is required to improve the overall system robustness. Many studies have been proposed, but the solutions are usually commissioned late during the design and implementation phases of the software life-cycle (e.g., Java and Windows NT exception handling), thus reducing the error recovery effectiveness. Since the system design typically models only normal behaviors of the system while ignoring exceptional ones, the generated system implementation is unable to handle abnormal events. Consequently, the system may fail in unexpected ways due to some faults. Researchers have advocated that fault tolerance management during the entire life-cycle improves the overall system robustness and that different classes of exceptions must be identified for each identified phase of software development, depending on the abstraction level of the software system being modeled. This book builds on this trend and investigates how fault tolerance mechanisms can be used when engineering a software system. New problems will arise, new models are needed at different abstraction levels, methodologies for mode driven engineering of such systems must be defined, new technologies are required, and new validation and verification environments are necessary.