White Box Testing by : Andika Bayu H
Introduction White Box Testing or Glass Box Testing Test case design method that uses the control structure of the procedural design to derive test cases SW Engineer can derive test cases that guarantee that all independent paths within a module have been exercised at least once exercise all logical decisions on their true and false bounds execute all loops at their boundaries and within their operational bounds exercise internal data structures to assure their validity Why not just validate the requirement ? Logic errors and incorrect assumptions are inversely proportional to the probability that a program path will be executed We often believe that a logical path is not likely to be executed when, in fact, it may be executed on a regular basis Typographical errors are random
Basis Path/Control Structure Testing Proposed by Tom McCabe The basis path method enables the test case designer to derive a logical complexity measure of a procedural design and use this measure as a guide for defining a basis set of execution paths Flow Graph Notation:
Pseudo Code - Flow Chart Procedure Sort Flow Chart Procedure Sort 1. do while not eof 2. Read Record 3. if record field 1 = 0 4. then process record 5. store in buffer; 6. increment counter 7. else if record field 2 = 0 8. then reset counter 9. else process record 10. store in file 11. endif 12. endif 13. enddo
Flow Chart - Flow Graph Flow Chart Flow Graph
Compound Logic IF a or b then procedure X else procedure Y endif
Cyclomatic Complexity ( V(G) ) software metric that provide a quantitative measure of the logical complexity of a program] V(G) = E - N + 2 V(G) = 9 - 8 + 2 = 3 The number of regions of the flow graph correspond to the cyclomatic complexity. V(G) = P + 1, where P is the number of predicate nodes
Independent Path path 1: 1-13 path 2: 1-2-3-7-8-11-12-1-13 An independent path is any path through the program that introduces at least one new set of processing statements or a new condition An independent path must move along at least one edge that has not been traversed before the path is defined path 1: 1-13 path 2: 1-2-3-7-8-11-12-1-13 path 3: 1-2-3-7-9-10-11-12-1-13 path 4: 1-2-3-4-5-6-12-1-13 Is the path 1-2-3-4-5-6-12-1-2-3-7-8-11-12-1-13 an independent path ?
Deriving Test Cases Draw a corresponding flowgraph using the design or code as a foundation Determine the cyclomatic complexity of the resultant flow graph (V(g)) Determine a basis set of linearly independent paths Prepare test cases that will force execution of each path in the basis set if we have 6 independent paths, then we should have at least 6 test cases. For each test cases, we should define the input conditions and the expected result.
Graph Matrices Can automate derivation of flow graph and determination of a set of basis paths. Software tools to do this can use a graph matrix. Graph matrix: is square with #sides equal to #nodes Rows and columns correspond to the nodes Entries correspond to the edges. Can associate a number with each edge entry. Use a value of 1 to calculate the cyclomatic complexity For each row, sum column values and subtract 1. Sum these totals and add 1.
Some other interesting link weights: Probability that a link (edge) will be executed Processing time for traversal of a link Memory required during traversal of a link Resources required during traversal of a link
Loop Testing Loop is fundamental to many algorithms. Loop can be defined as simple, concatenated, nested, and unstructured.
Loop Testing (2) Simple Loops of size n: Nested Loops To test: Simple Loops of size n: Skip loop entirely Only one pass through loop Two passes through loop m passes through loop where m<n. (n-1), n, and (n+1) passes through the loop. Nested Loops Start with inner loop. Set all other loops to minimum values. Conduct simple loop testing on inner loop. Work outwards Continue until all loops tested. Concatenated Loops If independent loops, use simple loop testing. If dependent, treat as nested loops. Unstructured loops Don't test - redesign.