Download presentation
Presentation is loading. Please wait.
1
Critical systems development
2
Objectives To explain how fault tolerance and fault avoidance contribute to the development of dependable systems To describe characteristics of dependable software processes To introduce programming techniques for fault avoidance To describe fault tolerance mechanisms and their use of diversity and redundancy
3
Topics covered Dependable processes Dependable programming
Fault tolerance Fault tolerant architectures
4
Software dependability
In general, software customers expect all software to be dependable. However, for non-critical applications, they may be willing to accept some system failures. Some applications, however, have very high dependability requirements and special software engineering techniques may be used to achieve this.
5
Approaches for developing dependable software
Fault avoidance The system is developed in such a way that human error is avoided and thus system faults are minimised. The development process is organised so that faults in the system are detected and repaired before delivery to the customer. Activities: dependable programming practices Fault detection (Chapter 24) Verification and validation techniques are used to discover and remove faults in a system before it is deployed. Activities: reviews, formal verification, testing Fault tolerance The system is designed so that faults in the delivered software do not result in system failure. Activities: fault detection, damage assessment, recovery, repair.
6
Fault-free software Fault-free software means software which conforms to its specification. It does NOT mean software which will always perform correctly as there may be specification errors. The cost of producing fault free software is very high. It is only cost-effective in exceptional situations. It is often cheaper to accept software faults and pay for their consequences than to expend resources on developing fault-free software.
7
Fault removal costs Man y F e w V ery fe w Number of residual errors a
8
Fault-free software development
Current methods of software engineering now allow for the production of fault-free software, at least for relatively small systems. Examples Dependable software processes Quality management Formal specification Static verification Strong typing Safe programming Protected information
9
Dependable processes To ensure a minimal number of software faults, it is important to have a well-defined, repeatable software process. A well-defined repeatable process is one that does not depend entirely on individual skills; rather can be enacted by different people. For fault detection, it is clear that the process activities should include significant effort devoted to verification and validation.
10
Dependable process characteristics
11
Validation activities
Requirements inspections. Requirements management. Model checking. Design and code inspection. Static analysis. Test planning and management. Configuration management.
12
Topics covered Dependable processes Dependable programming
Fault tolerance Fault tolerant architectures
13
Dependable programming
Use programming constructs and techniques that contribute to fault avoidance and fault tolerance Design for simplicity; Protect information from unauthorised access; Minimise the use of unsafe programming constructs.
14
Safe programming practices
Faults in programs are usually a consequence of programmers making mistakes. These mistakes occur because people lose track of the relationships between program variables. Examples of safe programming practices Design for simplicity. Protect information from unauthorised access. Avoid “unsafe” programming language constructs. Handle exceptions consistently.
15
Information protection
Information should only be exposed to those parts of the program which need to access it. This involves the creation of objects or abstract data types that maintain state and that provide operations on that state. This avoids faults for three reasons: the probability of accidental corruption of information is reduced; the information is surrounded by ‘firewalls’ so that problems are less likely to spread to other parts of the program; as all information is localised, you are less likely to make errors and reviewers are more likely to find errors.
16
A queue specification in Java
17
Signal declaration in Java
18
Structured programming
First proposed in 1968 as an approach to development that makes programs easier to understand and that avoids programmer errors. Programming without gotos. While loops and if statements as the only control statements. Top-down design. An important development because it promoted thought and discussion about programming.
19
Error-prone constructs
Floating-point numbers Inherently imprecise. The imprecision may lead to invalid comparisons. Pointers Pointers referring to the wrong memory areas can corrupt data. Aliasing can make programs difficult to understand and change. Dynamic memory allocation Run-time allocation can cause memory overflow. Parallelism Can result in subtle timing errors because of unforeseen interaction between parallel processes. Recursion Errors in recursion can cause memory overflow.
20
Error-prone constructs
Interrupts Interrupts can cause a critical operation to be terminated and make a program difficult to understand. Inheritance Code is not localised. This can result in unexpected behaviour when changes are made and problems of understanding. Aliasing Using more than 1 name to refer to the same state variable. Unbounded arrays Buffer overflow failures can occur if no bound checking on arrays. Default input processing An input action that occurs irrespective of the input.
21
Exception handling A program exception is an error or some unexpected event such as a power failure. Using normal control constructs to detect exceptions needs many additional statements to be added to the program. This adds a significant overhead and is potentially error-prone. Exception handling constructs allow for such events to be handled without the need for continual status checking to detect exceptions.
22
Exceptions in Java 1
23
Exceptions in Java 2
24
A temperature controller
Exceptions can be used as a normal programming technique and not just as a way of recovering from faults. Consider an example of a freezer controller that keeps the freezer temperature within a specified range. Switches a refrigerant pump on and off. Sets off an alarm is the maximum allowed temperature is exceeded. Uses exceptions as a normal programming technique.
25
Freezer controller 1
26
Freezer controller 2
27
Topics covered Dependable processes Dependable programming
Fault tolerance Fault tolerant architectures
28
Fault tolerance In critical situations, software systems must be fault tolerant. Fault tolerance is required where there are high availability requirements or where system failure costs are very high. Fault tolerance means that the system can continue in operation in spite of software failure. Even if the system has been proved to conform to its specification, it must also be fault tolerant as there may be specification errors or the validation may be incorrect.
29
Fault tolerance actions
Fault detection The system must detect that a fault (an incorrect system state) has occurred. Damage assessment The parts of the system state affected by the fault must be detected. Fault recovery The system must restore its state to a known safe state. Fault repair The system may be modified to prevent recurrence of the fault. As many software faults are transitory, this is often unnecessary.
30
Fault detection and damage assessment
The first stage of fault tolerance is to detect that a fault (an erroneous system state) has occurred or will occur. Fault detection involves defining constraints that must hold for all legal states and checking the state against these constraints.
31
Insulin pump state constraints
32
Fault detection Preventative fault detection
The fault detection mechanism is initiated before the state change is committed. If an erroneous state is detected, the change is not made. Retrospective fault detection The fault detection mechanism is initiated after the system state has been changed. This is used when a incorrect sequence of correct actions leads to an erroneous state or when preventative fault detection involves too much overhead.
33
Type system extension Preventative fault detection really involves extending the type system by including additional constraints as part of the type definition. These constraints are implemented by defining basic operations within a class definition.
34
PositiveEvenInteger 1
35
PositiveEvenInteger 2
36
Damage assessment Analyse system state to judge the extent of corruption caused by a system failure. The assessment must check what parts of the state space have been affected by the failure. Generally based on ‘validity functions’ that can be applied to the state elements to assess if their value is within an allowed range.
37
Robust array 1
38
Robust array 2
39
Damage assessment techniques
Checksums are used for damage assessment in data transmission. Redundant pointers can be used to check the integrity of data structures. Watch dog timers can check for non-terminating processes. If no response after a certain time, a problem is assumed.
40
Fault recovery and repair
Forward recovery Apply repairs to a corrupted system state. Backward recovery Restore the system state to a known safe state. Forward recovery is usually application specific - domain knowledge is required to compute possible state corrections. Backward error recovery is simpler. Details of a safe state are maintained and this replaces the corrupted system state.
41
Forward recovery Corruption of data coding Redundant pointers
Error coding techniques which add redundancy to coded data can be used for repairing data corrupted during transmission. Redundant pointers When redundant pointers are included in data structures (e.g. two-way lists), a corrupted list or filestore may be rebuilt if a sufficient number of pointers are uncorrupted Often used for database and file system repair.
42
Backward recovery Transactions are a frequently used method of backward recovery. Changes are not applied until computation is complete. If an error occurs, the system is left in the state preceding the transaction. Periodic checkpoints allow system to 'roll-back' to a correct state.
43
Safe sort procedure A sort operation monitors its own execution and assesses if the sort has been correctly executed. It maintains a copy of its input so that if an error occurs, the input is not corrupted. Based on identifying and handling exceptions. Possible in this case as the condition for a‘valid’ sort is known. However, in many cases it is difficult to write validity checks.
44
Safe sort 1
45
Safe sort 2
46
Topics covered Dependable processes Dependable programming
Fault tolerance Fault tolerant architectures
47
Fault tolerant architecture
Defensive programming cannot cope with faults that involve interactions between the hardware and the software. Misunderstandings of the requirements may mean that checks and the associated code are incorrect. Where systems have high availability requirements, a specific architecture designed to support fault tolerance may be required. This must tolerate both hardware and software failure.
48
Diversity and redundancy
Keep more than 1 version of a critical component available so that if one fails then a backup is available. Diversity Provide the same functionality in different ways so that they will not fail in the same way. However, adding diversity and redundancy adds complexity and this can increase the chances of error. Some engineers advocate simplicity and extensive V & V is a more effective route to software dependability.
49
Diversity and redundancy examples
Redundancy. Where availability is critical (e.g. in e-commerce systems), companies normally keep backup servers and switch to these automatically if failure occurs. Diversity. To provide resilience against external attacks, different servers may be implemented using different operating systems (e.g. Windows and Linux)
50
Hardware fault tolerance
Depends on triple-modular redundancy (TMR). There are three replicated identical components that receive the same input and whose outputs are compared. If one output is different, it is ignored and component failure is assumed. Based on most faults resulting from component failures rather than design faults and a low probability of simultaneous component failure.
51
Hardware reliability with TMR
Output A2 comparator A3
52
Output selection The output comparator is a (relatively) simple hardware unit. It compares its input signals and, if one is different from the others, it rejects it. Essentially, the selection of the actual output depends on the majority vote. The output comparator is connected to a fault management unit that can either try to repair the faulty unit or take it out of service.
53
Fault tolerant software architectures
The success of TMR at providing fault tolerance is based on two fundamental assumptions The hardware components do not include common design faults; Components fail randomly and there is a low probability of simultaneous component failure. Neither of these assumptions are true for software It isn’t possible simply to replicate the same component as they would have common design faults; Simultaneous component failure is therefore virtually inevitable. Software systems must therefore be diverse.
54
Design diversity Different versions of the system are designed and implemented in different ways. They therefore ought to have different failure modes. Different approaches to design (e.g object-oriented and function oriented) Implementation in different programming languages; Use of different tools and development environments; Use of different algorithms in the implementation.
55
Software analogies to TMR
N-version programming The same specification is implemented in a number of different versions by different teams. All versions compute simultaneously and the majority output is selected using a voting system. This is the most commonly used approach e.g. in many models of the Airbus commercial aircraft. Recovery blocks A number of explicitly different versions of the same specification are written and executed in sequence. An acceptance test is used to select the output to be transmitted.
56
N-version programming
57
Output comparison As in hardware systems, the output comparator is a simple piece of software that uses a voting mechanism to select the output. In real-time systems, there may be a requirement that the results from the different versions are all produced within a certain time frame.
58
N-version programming
The different system versions are designed and implemented by different teams. It is assumed that there is a low probability that they will make the same mistakes. The algorithms used should but may not be different. There is some empirical evidence that teams commonly misinterpret specifications in the same way and chose the same algorithms in their systems.
59
Recovery blocks Acceptance test Algorithm 2 Algorithm 1 Algorithm 3 R
est f or success e-test etry ry algorithm 1 Contin ue e x ecution if acceptance test succeeds Signal e ception if all algorithms fail Acceptance test fails – r
60
Recovery blocks These force a different algorithm to be used for each version so they reduce the probability of common errors. However, the design of the acceptance test is difficult as it must be independent of the computation used. There are problems with this approach for real-time systems because of the sequential operation of the redundant versions.
61
Problems with design diversity
Teams are not culturally diverse so they tend to tackle problems in the same way. Characteristic errors Different teams make the same mistakes. Some parts of an implementation are more difficult than others so all teams tend to make mistakes in the same place; Specification errors; If there is an error in the specification then this is reflected in all implementations; This can be addressed to some extent by using multiple specification representations.
62
Specification dependency
Both approaches to software redundancy are susceptible to specification errors. If the specification is incorrect, the system could fail This is also a problem with hardware but software specifications are usually more complex than hardware specifications and harder to validate. This has been addressed in some cases by developing separate software specifications from the same user specification.
63
Critical Systems Validation
64
Objectives To explain how system reliability can be measured and how reliability growth models can be used for reliability prediction To describe safety arguments and how these are used To discuss the problems of safety assurance To introduce safety cases and how these are used in safety validation
65
Topics covered Reliability validation Safety assurance
Security assessment Safety and dependability cases
66
Validation of critical systems
The verification and validation costs for critical systems involves additional validation processes and analysis than for non-critical systems: The costs and consequences of failure are high so it is cheaper to find and remove faults than to pay for system failure; You may have to make a formal case to customers or to a regulator that the system meets its dependability requirements. This dependability case may require specific V & V activities to be carried out.
67
Validation costs Because of the additional activities involved, the validation costs for critical systems are usually significantly higher than for non-critical systems. Normally, V & V costs take up more than 50% of the total system development costs.
68
Reliability validation
Reliability validation involves exercising the program to assess whether or not it has reached the required level of reliability. This cannot normally be included as part of a normal defect testing process because data for defect testing is (usually) atypical of actual usage data. Reliability measurement therefore requires a specially designed data set that replicates the pattern of inputs (the operational profile) to be processed by the system.
69
The reliability measurement process
70
Reliability validation activities
Establish the operational profile for the system. Construct test data reflecting the operational profile. Test the system and observe the number of failures and the times of these failures. Compute the reliability after a statistically significant number of failures have been observed.
71
Statistical testing Testing software for reliability rather than fault detection. Measuring the number of errors allows the reliability of the software to be predicted. Note that, for statistical reasons, more errors than are allowed for in the reliability specification must be induced. An acceptable level of reliability should be specified and the software tested and amended until that level of reliability is reached.
72
Reliability measurement problems
Operational profile uncertainty The operational profile may not be an accurate reflection of the real use of the system. High costs of test data generation Costs can be very high if the test data for the system cannot be generated automatically. Statistical uncertainty You need a statistically significant number of failures to compute the reliability but highly reliable systems will rarely fail.
73
Operational profiles An operational profile is a set of test data whose frequency matches the actual frequency of these inputs from ‘normal’ usage of the system. A close match with actual usage is necessary otherwise the measured reliability will not be reflected in the actual usage of the system. It can be generated from real data collected from an existing system or (more often) depends on assumptions made about the pattern of usage of a system.
74
An operational profile
75
Operational profile generation
Should be generated automatically whenever possible. Automatic profile generation is difficult for interactive systems. May be straightforward for ‘normal’ inputs but it is difficult to predict ‘unlikely’ inputs and to create test data for them.
76
Reliability prediction
A reliability growth model is a mathematical model of the system reliability change as it is tested and faults are removed. It is used as a means of reliability prediction by extrapolating from current data Simplifies test planning and customer negotiations. You can predict when testing will be completed and demonstrate to customers whether or not the reliability growth will ever be achieved. Prediction depends on the use of statistical testing to measure the reliability of a system version.
77
Equal-step reliability growth
(ROC OF) t1 t2 t3 t4 t5 T ime
78
Observed reliability growth
The equal-step growth model is simple but it does not normally reflect reality. Reliability does not necessarily increase with change as the change can introduce new faults. The rate of reliability growth tends to slow down with time as frequently occurring faults are discovered and removed from the software. A random-growth model where reliability changes fluctuate may be a more accurate reflection of real changes to reliability.
79
Random-step reliability growth
ime Note dif fer ent r elia bility impr o v ements F ault r epair ad ds ne w fault and decreases reliability (increases ROC OF) R (ROC
80
Growth model selection
Many different reliability growth models have been proposed. There is no universally applicable growth model. Reliability should be measured and observed data should be fitted to several models. The best-fit model can then be used for reliability prediction.
81
Reliability prediction
equir ed r Fitted r model curv e Estima ted time of achie v ement T ime = Measur ed r
82
Topics covered Reliability validation Safety assurance
Security assessment Safety and dependability cases
83
Safety assurance Safety assurance and reliability measurement are quite different: Within the limits of measurement error, you know whether or not a required level of reliability has been achieved; However, quantitative measurement of safety is impossible. Safety assurance is concerned with establishing a confidence level in the system.
84
Safety assurance activities
Safety reviews Safety arguments Safety-oriented processes Run-time checking
85
Safety confidence Confidence in the safety of a system can vary from very low to very high. Confidence is developed through: Past experience with the company developing the software; The use of dependable processes and process activities geared to safety; Extensive V & V including both static and dynamic validation techniques.
86
Safety reviews Review for correct intended function.
Review for maintainable, understandable structure. Review to verify algorithm and data structure design against specification. Review to check code consistency with algorithm and data structure design. Review adequacy of system testing.
87
Review guidance Make software as simple as possible.
Use simple techniques for software development avoiding error-prone constructs such as pointers and recursion. Use information hiding to localise the effect of any data corruption. Make appropriate use of fault-tolerant techniques but do not be seduced into thinking that fault-tolerant software is necessarily safe.
88
Safety arguments Safety arguments are intended to show that the system cannot reach in unsafe state. These are weaker than correctness arguments which must show that the system code conforms to its specification. They are generally based on proof by contradiction Assume that an unsafe state can be reached; Show that this is contradicted by the program code. A graphical model of the safety argument may be developed.
89
Construction of a safety argument
Establish the safe exit conditions for a component or a program. Starting from the END of the code, work backwards until you have identified all paths that lead to the exit of the code. Assume that the exit condition is false. Show that, for each path leading to the exit that the assignments made in that path contradict the assumption of an unsafe exit from the component.
90
currentDose > maxDose?
Insulin delivery code currentDose > maxDose?
91
Safety argument model
92
Program paths Neither branch of if-statement 2 is executed
Can only happen if CurrentDose is >= minimumDose and <= maxDose. then branch of if-statement 2 is executed currentDose = 0. else branch of if-statement 2 is executed currentDose = maxDose. In all cases, the post conditions contradict the unsafe condition that the dose administered is greater than maxDose.
93
Process assurance Process assurance involves defining a dependable process and ensuring that this process is followed during the system development. As discussed in Chapter 20, the use of a safe process is a mechanism for reducing the chances that errors are introduced into a system. Accidents are rare events so testing may not find all problems; Safety requirements are sometimes ‘shall not’ requirements so cannot be demonstrated through testing.
94
Safety related process activities
Creation of a hazard logging and monitoring system. Appointment of project safety engineers. Extensive use of safety reviews. Creation of a safety certification system. Detailed configuration management (see Chapter 29).
95
Hazard analysis Hazard analysis involves identifying hazards and their root causes. There should be clear traceability from identified hazards through their analysis to the actions taken during the process to ensure that these hazards have been covered. A hazard log may be used to track hazards throughout the process.
96
Hazard log entry
97
Run-time safety checking
During program execution, safety checks can be incorporated as assertions to check that the program is executing within a safe operating ‘envelope’. Assertions can be included as comments (or using an assert statement in some languages). Code can be generated automatically to check these assertions.
98
Insulin administration with assertions
99
Topics covered Reliability validation Safety assurance
Security assessment Safety and dependability cases
100
Security assessment Security assessment has something in common with safety assessment. It is intended to demonstrate that the system cannot enter some state (an unsafe or an insecure state) rather than to demonstrate that the system can do something. However, there are differences Safety problems are accidental; security problems are deliberate; Security problems are more generic - many systems suffer from the same problems; Safety problems are mostly related to the application domain
101
Security validation Experience-based validation Tool-based validation
The system is reviewed and analysed against the types of attack that are known to the validation team. Tool-based validation Various security tools such as password checkers are used to analyse the system in operation. Tiger teams A team is established whose goal is to breach the security of the system by simulating attacks on the system. Formal verification The system is verified against a formal security specification.
102
Security checklist
103
Topics covered Reliability validation Safety assurance
Security assessment Safety and dependability cases
104
Safety and dependability cases
Safety and dependability cases are structured documents that set out detailed arguments and evidence that a required level of safety or dependability has been achieved. They are normally required by regulators before a system can be certified for operational use.
105
The system safety case It is now normal practice for a formal safety case to be required for all safety-critical computer-based systems e.g. railway signalling, air traffic control, etc. A safety case is: A documented body of evidence that provides a convincing and valid argument that a system is adequately safe for a given application in a given environment. Arguments in a safety or dependability case can be based on formal proof, design rationale, safety proofs, etc. Process factors may also be included.
106
Components of a safety case
107
Argument structure
108
Insulin pump argument
109
Claim hierarchy The maximum single dose computed by the pump software
will not exceed maxDose maxDose is set up correctly when the pump is configured maxDose is a safe dose for the user of the insulin pump The insulin pump will not deliver a single dose of insulin that is unsafe In normal operation, the maximum dose computed will not exceed maxDose If the software fails, the maximum dose
110
Key points (Chapter 20) Approaches to developing dependable systems: fault avoidance, fault detection and fault tolerance. Fault avoidance measures include The use of a well-defined repeatable process. Dependable programming practices The four aspects of program fault tolerance are: failure detection, damage assessment, fault recovery and fault repair. Fault tolerant architectures employ redundancy and diversity.
111
Key points (Chapter 24) Reliability measurement and prediction relies on exercising the system using an operational profile and modelling how the reliability of a software system improves as it is tested and faults are removed. Safety arguments or proofs are a way of demonstrating that a hazardous condition can never occur. Security validation may involve experience-based analysis, tool-based analysis or the use of ‘tiger teams’ to attack the system.
Similar presentations
© 2025 SlidePlayer.com Inc.
All rights reserved.