1 / 87

Software Testing (continued) Lecture 11b

Software Testing (continued) Lecture 11b. Dr. R. Mall. Organization of this Lecture :. Review of last lecture. Data flow testing Mutation testing Cause effect graphing Performance testing. Test summary report Summary. Review of last lecture. White box testing:

sylviaj
Télécharger la présentation

Software Testing (continued) Lecture 11b

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Software Testing (continued) Lecture 11b Dr. R. Mall

  2. Organization of this Lecture: • Review of last lecture. • Data flow testing • Mutation testing • Cause effect graphing • Performance testing. • Test summary report • Summary

  3. Review of last lecture • White box testing: • requires knowledge about internals of the software. • design and code is required. • also called structural testing.

  4. Review of last lecture • We discussed a few white-box test strategies. • statement coverage • branch coverage • condition coverage • path coverage

  5. Data Flow-Based Testing • Selects test paths of a program: • according to the locations of • definitions and uses of different variables in a program.

  6. Data Flow-Based Testing • For a statement numbered S, • DEF(S) = {X/statement S contains a definition of X} • USES(S)= {X/statement S contains a use of X} • Example: 1: a=b; DEF(1)={a}, USES(1)={b}. • Example: 2: a=a+b; DEF(1)={a}, USES(1)={a,b}.

  7. Data Flow-Based Testing • A variable X is said to be live at statement S1, if • X is defined at a statement S: • there exists a path from S to S1 not containing any definition of X.

  8. DU Chain Example 1 X(){ 2 a=5; /* Defines variable a */ 3 While(C1) { 4 if (C2) 5 b=a*a; /*Uses variable a */ 6 a=a-1; /* Defines variable a */ 7 } 8 print(a); } /*Uses variable a */

  9. Definition-use chain (DU chain) • [X,S,S1], • S and S1 are statement numbers, • X in DEF(S) • X in USES(S1), and • the definition of X in the statement S is live at statement S1.

  10. Data Flow-Based Testing • One simple data flow testing strategy: • every DU chain in a program be covered at least once.

  11. Data Flow-Based Testing • Data flow testing strategies: • useful for selecting test paths of a program containing nested if and loop statements

  12. Data Flow-Based Testing • 1 X(){ • 2 B1; /* Defines variable a */ • 3 While(C1) { • 4 if (C2) • 5 if(C4) B4; /*Uses variable a */ • 6 else B5; • 7 else if (C3) B2; • 8 else B3; } • 9 B6 }

  13. Data Flow-Based Testing • [a,1,5]: a DU chain. • Assume: • DEF(X) = {B1, B2, B3, B4, B5} • USED(X) = {B2, B3, B4, B5, B6} • There are 25 DU chains. • However only 5 paths are needed to cover these chains.

  14. Mutation Testing • The software is first tested: • using an initial testing method based on white-box strategies we already discussed. • After the initial testing is complete, • mutation testing is taken up. • The idea behind mutation testing: • make a few arbitrary small changes to a program at a time.

  15. Mutation Testing • Each time the program is changed, • it is called a mutated program • the change is called a mutant.

  16. Mutation Testing • A mutated program: • tested against the full test suite of the program. • If there exists at least one test case in the test suite for which: • a mutant gives an incorrect result, • then the mutant is said to be dead.

  17. Mutation Testing • If a mutant remains alive: • even after all test cases have been exhausted, • the test suite is enhanced to kill the mutant. • The process of generation and killing of mutants: • can be automated by predefining a set of primitive changes that can be applied to the program.

  18. Mutation Testing • The primitive changes can be: • altering an arithmetic operator, • changing the value of a constant, • changing a data type, etc.

  19. Mutation Testing • A major disadvantage of mutation testing: • computationally very expensive, • a large number of possible mutants can be generated.

  20. Cause and Effect Graphs • Testing would be a lot easier: • if we could automatically generate test cases from requirements. • Work done at IBM: • Can requirements specifications be systematically used to design functional test cases?

  21. Cause and Effect Graphs • Examine the requirements: • restate them as logical relation between inputs and outputs. • The result is a Boolean graph representing the relationships • called a cause-effect graph.

  22. Cause and Effect Graphs • Convert the graph to a decision table: • each column of the decision table corresponds to a test case for functional testing.

  23. Steps to create cause-effect graph • Study the functional requirements. • Mark and number all causes and effects. • Numbered causes and effects: • become nodes of the graph.

  24. Steps to create cause-effect graph • Draw causes on the LHS • Draw effects on the RHS • Draw logical relationship between causes and effects • as edges in the graph. • Extra nodes can be added • to simplify the graph

  25. Drawing Cause-Effect Graphs A B If A then B A B C If (A and B)then C

  26. Drawing Cause-Effect Graphs A B C If (A or B)then C A B C If (not(A and B))then C

  27. Drawing Cause-Effect Graphs A B C If (not (A or B))then C A B If (not A) then B

  28. Cause effect graph- Example • A water level monitoring system • used by an agency involved in flood control. • Input: level(a,b) • a is the height of water in dam in meters • b is the rainfall in the last 24 hours in cms

  29. Cause effect graph- Example • Processing • The function calculates whether the level is safe, too high, or too low. • Output • message on screen • level=safe • level=high • invalid syntax

  30. Cause effect graph- Example • We can separate the requirements into 5 clauses: • first five letters of the command is “level” • command contains exactly two parameters • separated by comma and enclosed in parentheses

  31. Cause effect graph- Example • Parameters A and B are real numbers: • such that the water level is calculated to be low • or safe. • The parameters A and B are real numbers: • such that the water level is calculated to be high.

  32. Cause effect graph- Example • Command is syntactically valid • Operands are syntactically valid.

  33. Cause effect graph- Example • Three effects • level = safe • level = high • invalid syntax

  34. Cause effect graph- Example 1 10 E3 11 2 3 E1 4 E2 5

  35. Cause effect graph- Decision table Test 3 Test 4 Test 5 Test 1 Test 2 Cause 1 I I I S I Cause 2 I S I I X Cause 3 I X S S X Cause 4 I X S S X S S Cause 5 I X X Effect 1 P P A A A A P A A A Effect 2 A P P Effect 3 A A

  36. Cause effect graph- Example • Put a row in the decision table for each cause or effect: • in the example, there are five rows for causes and three for effects.

  37. Cause effect graph- Example • The columns of the decision table correspond to test cases. • Define the columns by examining each effect: • list each combination of causes that can lead to that effect.

  38. Cause effect graph- Example • We can determine the number of columns of the decision table • by examining the lines flowing into the effect nodes of the graph.

  39. Cause effect graph- Example • Theoretically we could have generated 25=32 test cases. • Using cause effect graphing technique reduces that number to 5.

  40. Cause effect graph • Not practical for systems which: • include timing aspects • feedback from processes is used for some other processes.

  41. Testing • Unit testing: • test the functionalities of a single module or function. • Integration testing: • test the interfaces among the modules. • System testing: • test the fully integrated system against its functional and non-functional requirements.

  42. Integration testing • After different modules of asystem have been coded and unit tested: • modules are integrated in steps according to an integration plan • partially integrated system is tested at each integration step.

  43. System Testing • System testing: • validate a fully developed system against its requirements.

  44. Integration Testing • Develop the integration plan by examining the structure chart : • big bang approach • top-down approach • bottom-up approach • mixed approach

  45. Example Structured Design root rms Valid-numbers rms Valid-numbers Get-good-data Compute-solution Display-solution Validate-data Get-data

  46. Big bang Integration Testing • Big bang approach is the simplest integration testing approach: • all the modules are simply put together and tested. • this technique is used only for very small systems.

  47. Big bang Integration Testing • Main problems with this approach: • if an error is found: • it is very difficult to localize the error • the error may potentially belong to any of the modules being integrated. • debugging errors found during big bang integration testing are very expensive to fix.

  48. Bottom-up Integration Testing • Integrate and test the bottom level modules first. • A disadvantage of bottom-up testing: • when the system is made up of a large number of small subsystems. • This extreme case corresponds to the big bang approach.

  49. Top-down integration testing • Top-down integration testing starts with the main routine: • and one or two subordinate routines in the system. • After the top-level 'skeleton’ has been tested: • immediate subordinate modules of the 'skeleton’ are combined with it and tested.

  50. Mixed integration testing • Mixed (or sandwiched) integration testing: • uses both top-down and bottom-up testing approaches. • Most common approach

More Related