Debugging Once errorsare identified: ◦ it is necessary to identify the precise location of the errors and to fix them. Each debugging approach has its own advantages and disadvantages: ◦ each is useful in appropriate circumstances.
3.
Some Debugging Approaches •Brute Force method • Symbolic Debugger • Backtracking • Cause-Elimination Method • Program Slicing 3
4.
Brute-force method Thisis the most common method of debugging: ◦ least efficient method. ◦ program is loaded with print statements ◦ print the intermediate values ◦ hope that some of printed values will help identify the error.
5.
Symbolic Debugger Bruteforce approach becomes more systematic: ◦ with the use of a symbolic debugger, ◦ symbolic debuggers get their name for historical reasons ◦ early debuggers let you only see values from a program dump: determine which variable it corresponds to.
6.
Symbolic Debugger Usinga symbolic debugger: ◦ values of different variables can be easily checked and modified ◦ single stepping to execute one instruction at a time ◦ break points and watch points can be set to test the values of variables.
7.
Backtracking This isa fairly common approach. Beginning at the statement where an error symptom has been observed: ◦ source code is traced backwards until the error is discovered.
Backtracking Unfortunately, asthe number of source lines to be traced back increases, ◦ the number of potential backward paths increases ◦ becomes unmanageably large for complex programs.
10.
Cause-elimination method Inthis method, once a failure is observed, the symptoms of the failure (e.g. certain variable is having a negative value though it should be positive) are noted. Determine a list of causes: ◦ which could possibly have contributed to the error symptom. ◦ tests are conducted to eliminate each. A related technique of identifying errors by examining error symptoms: ◦ software fault tree analysis.
11.
Program Slicing Thistechnique is similar to back tracking. However, the search space is reduced by defining slices. A slice is defined for a particular variable at a particular statement: ◦ set of source lines preceding this statement which can influence the value of the variable.
12.
Program Slicing cont… Slice of a program w.r.t. program point p and variable x: - All statements and predicates that might affect the value of x at point p. <p, x> known as slicing criterion.
13.
Example 1 main( ) 2{ 3 int i, sum; 4 sum = 0; 5 i = 1; 6 while(i <= 10) 7 { 8 Sum = sum + 1; 9 ++ i; 10 } 11 printf(“%d”, sum); 12 printf(“%d”, i); 13 } An Example Program & its backward slice w.r.t. <12, i>
Example 1. int main(){ 2. int i, s; 3. i=1; 4. s=1; 5. while(i<=10){ 6. s=s+i; 7. i++;} 8. printf(“%d”,s); 9. printf(“%d”,i); 10. } An Example Program & its slice w.r.t. <9, i>
16.
Types of Slices StaticSlice: Statements that may affect value of a variable at a program point for all possible executions. Dynamic Slice: Statements that actually affect value of a variable at a program point for that particular execution. Backward Slice: Statements that might have affected the variable at a program point. Forward Slice: Statements that might be affected by the variable at a program point.
17.
Example of ForwardSlice 1 main( ) 2 { 3 int i, sum; 4 sum = 0; 5 i = 1; 6 while(i <= 10) 7 { 8 sum = sum + 1; 9 ++ i; 10 } 11 printf(“%d”, sum); 12 printf(“%d”, i); 13 } An Example Program & its forward slice w.r.t. <5, i>
18.
Types of Slicescont … Intra-Procedural Slice: for programs having only one procedure ◦ Not applicable for OOPs Inter-Procedural Slice: for programs having more than one procedure ◦ Applicable for OOPs
19.
Applications of Slicing Debugging Program understanding Testing Software maintenance Complexity measurement Program integration Reverse engineering Software reuse
20.
Debugging Guidelines Debuggingusually requires a thorough understanding of the program design. Debugging may sometimes require full redesign of the system. A common mistake novice programmers often make: ◦ not fixing the error but the error symptoms.
21.
Debugging Guidelines Beaware of the possibility: ◦ an error correction may introduce new errors. After every round of error-fixing: ◦ regression testing must be carried out.
22.
Program Analysis Tools An automated tool: ◦ takes program source code as input ◦ produces reports regarding several important characteristics of the program, ◦ such as size, complexity, adequacy of commenting, adherence to programming standards, etc.
23.
Program Analysis Tools Some program analysis tools: ◦ produce reports regarding the adequacy of the test cases. There are essentially two categories of program analysis tools: ◦ Static analysis tools ◦ Dynamic analysis tools
24.
Static Analysis Tools Static analysis tools: ◦ Assess properties of a program without executing it. ◦ Analyze the source code provide analytical conclusions.
25.
Static Analysis Tools Whether coding standards have been adhered to? ◦ Commenting is adequate? Programming errors such as: ◦ uninitialized variables ◦ mismatch between actual and formal parameters. ◦ Variables declared but never used, etc.
26.
Static Analysis Tools Code walk through and inspection can also be considered as static analysis methods: ◦ however, the term static program analysis is generally used for automated analysis tools.
27.
Dynamic Analysis Tools Dynamic program analysis tools require the program to be executed: ◦ its behaviour recorded. ◦ Produce reports such as, extent of coverage achieved, adequacy of test cases, etc.
28.
Summary Discussed differentdebugging approaches. ◦ Brute Force method ◦ Symbolic Debugger ◦ Backtracking ◦ Cause-Elimination Method ◦ Program Slicing Presented some debugging guidelines. Explained the Program Analysis Tools ◦ Static analysis tools ◦ Dynamic analysis tools 28