350 likes | 378 Views
Chapter 2.11. Program Validation. = Reliable Hardware AND Reliable Software AND Compatible Hardware and Software. Reliable System. Good Design Diagnostic Circuits Build-in Redundancy Diagnostic Programs. Reliable Hardware. should be ADEQUATE (accomplishes the tasks it is used for)
E N D
Chapter 2.11 Program Validation
= Reliable Hardware AND Reliable Software AND Compatible Hardware and Software Reliable System
Good Design Diagnostic Circuits Build-in Redundancy Diagnostic Programs Reliable Hardware
should be ADEQUATE (accomplishes the tasks it is used for) and ROBUST (survives all abnormal inputs) Reliable Software
Before being used a program should be VALIDATED for ADEQUACY and ROBUSTNESS Software Validation
Validation can never improve the quality of software, it can only prevent the use of erroneous programs Software ValidationWARNING !
Syntax errors Detected by the compiler Run-time errors The program stops with an error message Special recovery software is activated Erroneous results Consequences can be catastrophic !!! Software engineering tries to push errors upwards in the list Program Errors
Mandatory Declarations BEGIN ... L0AD := 1000. ... Force:= LOAD * ... ... VAR LOAD, Force : REAL; BEGIN ... L0AD := 1000. Undeclared:L0AD ... Force := LOAD * ... Cross reference: .. . L0AD : 15 LOAD : 20,27,39,44 Normal execution Erroneous value of Force No execution Compilation error
Static validation: based on the analysis of the program source code required could guarantee correctness Dynamic validation (testing): based on the execution of the program only the object code is required can only prove the presence of errors, never their absence Static vs. Dynamic Validation
Start with small building blocks Finish with the entire system Natural and intuitively attractive Major incompatibilities between building blocks discovered last For dynamic validation: Test programs required for each building block Bottom-up Validation
Start with the entire system, ignoring details. Finish with the small building blocks Somewhat counter-intuitive Major incompatibilities between building blocks discovered first For dynamic validation: Dummy substitutes for all building blocks have to be made for high-level tests. Top-down Validation
Syntax checking by the compiler Manual code checking Desk checking Walk through Inspection Data flow analysis Correctness proofs Static Validation Techniques
Syntax checking by the compiler Manual code checking Desk checking Walk through Inspection Data flow analysis Correctness proofs Static Validation Techniques
Syntax checking by the compiler Manual code checking Desk checking Walk through Inspection Data flow analysis Correctness proofs Static Validation Techniques
Desk checking Informal code reading preferably by somebody else Walk through Formal meeting Simulated execution of code on blackboard Inspection Formal meeting Contradictory discussion of code and programming style Manual code checking
Syntax checking by the compiler Manual code checking Desk checking Walk through Inspection Data flow analysis Correctness proofs Static Validation Techniques
Example : Second order equation Read a,b,c d:=b 2 - 4ac No d > 0 ? No d = 0 ? x1 := … x:= … x2 := … Write "no roots" Write x1, x2 Write x
Dataflow of a : Read a,b,c d:=b 2 - 4ac No d > 0 ? No d = 0 ? x1 := … x:= … x2 := … Write "no roots" Write x1, x2 Write x
Dataflow of x1 : Read a,b,c d:=b 2 - 4ac No d > 0 ? No d = 0 ? x1 := … x:= … x2 := … Write "no roots" Write x1, x2 Write x
:= X Uninitialized variable ? x := ...
x := exp1 Why this statement ??? x := exp2 Write x Useless statement
Syntax checking by the compiler Manual code checking Desk checking Walk through Inspection Data flow analysis Correctness proofs Static Validation Techniques
Specifications Inputs Outputs EQUIVALENCE Program Correctness Proof
Formal proofs can be long and complex Impossible for large systems Very error prone Could be automated Doesn't help with specification errors… Useful for well specified, short, but complex, algorithms. Correctness Proof
Testing No guarantee !!! Black box vs. white box testing. Test data Debugging The program state Control flow breakpoints Data flow breakpoints Real time considerations Dynamic Validation Techniques
Testing No guarantee !!! Black box vs. white box testing. Test data Debugging The program state Control flow breakpoints Data flow breakpoints Real time considerations Dynamic Validation Techniques
"Testing can proof the presence of errors but not their absence" TESTING E.W.Dijkstra
Testing No guarantee !!! Black box vs. white box testing. Test data Debugging The program state Control flow breakpoints Data flow breakpoints Real time considerations Dynamic Validation Techniques
Testing No guarantee !!! Black box vs. white box testing. Test data Debugging The program state Control flow breakpoints Data flow breakpoints Real time considerations Dynamic Validation Techniques
Test data Tests should exercise all paths through a program a b c d 1 3 2 1 1 2 1 0 1 1 1 -3 Read a,b,c d:=b 2 - 4ac No d > 0 ? No d = 0 ? x1 := … x:= … x2 := … Write "no roots" Write x1, x2 Write x
Test data Tests should exercise exceptional values a b c d 0 1 1 1 1 0 1 -4 1 1 0 1 Read a,b,c d:=b 2 - 4ac No d > 0 ? No d = 0 ? x1 := … x:= … x2 := … Write "no roots" Write x1, x2 Write x
Test data Tests should exercise very large and very small values a b c 1 10000000001 10000000000 Read a,b,c d:=b 2 - 4ac No d > 0 ? No d = 0 ? x1 := … x:= … x2 := … Write "no roots" Write x1, x2 Write x
Testing No guarantee !!! Black box vs. white box testing. Test data Debugging The program state Control flow breakpoints Data flow breakpoints Real time considerations Dynamic Validation Techniques
Testing No guarantee !!! Black box vs. white box testing. Test data Debugging The program state Control flow breakpoints Data flow breakpoints Real time considerations Dynamic Validation Techniques
Testing No guarantee !!! Black box vs. white box testing. Test data Debugging The program state Control flow breakpoints Data flow breakpoints Real time considerations Dynamic Validation Techniques