White-Box Testing Techniques I

Slides:



Advertisements
Similar presentations
Chapter 14 Testing Tactics
Advertisements

Unit Testing CS 4311 Hans Van Vliet, Software Engineering, Principles and Practice, 3rd edition, John Wiley & Sons, Chapter 13.
SOFTWARE TESTING. INTRODUCTION  Software Testing is the process of executing a program or system with the intent of finding errors.  It involves any.
White-Box Testing Techniques IV
White Box Testing Techniques Dynamic Testing. White box testing(1) Source code is known and used for test design While executing the test cases, the internal.
Chapter 8: Path Testing Csci 565.
BASIS PATH TESTING ● By Tom McCabe ● McCabe, T., "A Software Complexity Measure," IEEE Trans. Software Engineering, vol. SE-2, December 1976, pp
Testing an individual module
SOFTWARE TESTING WHITE BOX TESTING 1. GLASS BOX/WHITE BOX TESTING 2.
Verification and Validation (Part 2) John Morris Computer Science/ Electrical and Computer Engineering 28-Aug-151 A hard day’s work ensuring that some.
Software Systems Verification and Validation Laboratory Assignment 3
Topics in Software Dynamic White-box Testing Part 2: Data-flow Testing
CMSC 345 Fall 2000 Unit Testing. The testing process.
White-Box Testing Techniques II Originals prepared by Stephen M. Thebaut, Ph.D. University of Florida Dataflow Testing.
Agenda Introduction Overview of White-box testing Basis path testing
1 Software Testing. 2 Path Testing 3 Structural Testing Also known as glass box, structural, clear box and white box testing. A software testing technique.
Test Coverage CS-300 Fall 2005 Supreeth Venkataraman.
Unit Testing 101 Black Box v. White Box. Definition of V&V Verification - is the product correct Validation - is it the correct product.
White-box Testing.
CS 217 Software Verification and Validation Week 7, Summer 2014 Instructor: Dong Si
Software Testing and Reliability Southern Methodist University CSE 7314.
1 Program Testing (Lecture 14) Prof. R. Mall Dept. of CSE, IIT, Kharagpur.
White Box Testing Arun Lakhotia University of Southwestern Louisiana P.O. Box Lafayette, LA 70504, USA
Theory and Practice of Software Testing
SOFTWARE TESTING. Introduction Software Testing is the process of executing a program or system with the intent of finding errors. It involves any activity.
White Box Testing by : Andika Bayu H.
White-Box Testing Techniques I Prepared by Stephen M. Thebaut, Ph.D. University of Florida Software Testing and Verification Lecture 7.
CSC 395 – Software Engineering Lecture 27: White-Box Testing.
Software Dynamic White-box Testing Part 2: Data-flow Testing Lecture 7 Prof. Mostafa Abdel Aziem Mostafa.
SOFTWARE TESTING LECTURE 9. OBSERVATIONS ABOUT TESTING “ Testing is the process of executing a program with the intention of finding errors. ” – Myers.
White-Box Testing Techniques. Definition of White-Box Testing Testing based on analysis of internal logic (design, code, etc.). (But expected results.
Software Testing. SE, Testing, Hans van Vliet, © Nasty question  Suppose you are being asked to lead the team to test the software that controls.
1 Software Testing. 2 What is Software Testing ? Testing is a verification and validation activity that is performed by executing program code.
PREPARED BY G.VIJAYA KUMAR ASST.PROFESSOR
Software TestIng White box testing.
TQS - Teste e Qualidade de Software (Software Testing and Quality) Test Case Design: White Box Testing João Pascoal Faria.
BASIS PATH TESTING.
White-Box Testing Techniques IV
Software Testing.
White-Box Testing Pfleeger, S. Software Engineering Theory and Practice 2nd Edition. Prentice Hall, Ghezzi, C. et al., Fundamentals of Software Engineering.
Software Testing.
White-Box Testing Techniques IV
Cyclomatic complexity
Software Engineering (CSI 321)
Data Coverage and Code Coverage
CONTROL FLOW TESTING.
Structural testing, Path Testing
White-Box Testing Techniques
Types of Testing Visit to more Learning Resources.
White Box Testing.
Prepared by Stephen M. Thebaut, Ph.D. University of Florida
White-Box Testing.
White-Box Testing Techniques II
CHAPTER 4 Test Design Techniques
UNIT-4 BLACKBOX AND WHITEBOX TESTING
Dataflow Testing G. Rothermel.
Functional Verification III
White-Box Testing Techniques III
Software Testing (Lecture 11-a)
White-Box Testing Techniques II
White-Box Testing.
Exercise Solutions: Functional Verification
White-Box Testing Techniques III
White-Box Testing Techniques II
Functional Verification II
Black-Box Testing Techniques II
Functional Verification III
Black-Box Testing Techniques II
UNIT-4 BLACKBOX AND WHITEBOX TESTING
Unit III – Chapter 3 Path Testing.
Presentation transcript:

White-Box Testing Techniques I Software Testing and Verification Lecture 7 Prepared by Stephen M. Thebaut, Ph.D. University of Florida

Definition of White-Box Testing Testing based on analysis of internal logic (design, code, etc.). (But expected results still come from requirements.) Also know as structural testing. White-box testing concerns techniques for designing tests; it is not a “level” of testing. White-box testing techniques apply primarily to lower levels of testing (e.g., unit and component).

Definition of White-Box Testing Testing based on analysis of internal logic (design, code, etc.). (But expected results still come from requirements.) Also know as structural testing. White-box testing concerns techniques for designing tests; it is not a “level” of testing. White-box testing techniques apply primarily to lower levels of testing (e.g., unit and component).

Definition of White-Box Testing Testing based on analysis of internal logic (design, code, etc.). (But expected results still come from requirements.) Also know as structural testing. White-box testing concerns techniques for designing tests; it is not a “level” of testing. White-box testing techniques apply primarily to lower levels of testing (e.g., unit and component).

Definition of White-Box Testing Testing based on analysis of internal logic (design, code, etc.). (But expected results still come from requirements.) Also know as structural testing. White-box testing concerns techniques for designing tests; it is not a “level” of testing. White-box testing techniques apply primarily to lower levels of testing (e.g., unit and component).

White-Box Testing Topics Logic coverage (lecture I) Dataflow coverage (lecture II) Path conditions and symbolic execution (lecture III) Other white-box testing strategies (e.g., “fault-based testing”) (lecture IV)

Types of Logic Coverage Statement: each statement executed at least once Branch: each branch traversed (and every entry point taken) at least once Condition: each condition True at least once and False at least once Branch/Condition: both Branch and Condition coverage achieved

Types of Logic Coverage Statement: each statement executed at least once Branch: each branch traversed (and every entry point taken) at least once Condition: each condition True at least once and False at least once Branch/Condition: both Branch and Condition coverage achieved

Types of Logic Coverage Statement: each statement executed at least once Branch: each branch traversed (and every entry point taken) at least once Condition: each condition True at least once and False at least once Branch/Condition: both Branch and Condition coverage achieved

Types of Logic Coverage Statement: each statement executed at least once Branch: each branch traversed (and every entry point taken) at least once Condition: each condition True at least once and False at least once Branch/Condition: both Branch and Condition coverage achieved (cont’d)

Types of Logic Coverage (cont’d) Compound Condition: all combinations of condition values at every branch statement covered (and every entry point taken) Path: all program paths traversed at least once

Types of Logic Coverage (cont’d) Compound Condition: all combinations of condition values at every branch statement covered (and every entry point taken) Path: all program paths traversed at least once

Pseudocode and Control Flow Graphs input(Y) if (Y<=0) then Y := −Y end_if while (Y>0) do input(X) Y := Y-1 end_while “nodes” “edges”

Statement Coverage Statement Coverage requires that each statement will have been executed at least once. Simplest form of logic coverage. Also known as Node Coverage. What is the minimum number of test cases required to achieve statement coverage for the program segment given below?

Statement Coverage Statement Coverage requires that each statement will have been executed at least once. Simplest form of logic coverage. Also known as Node Coverage. What is the minimum number of test cases required to achieve statement coverage for the program segment given below?

Statement Coverage Statement Coverage requires that each statement will have been executed at least once. Simplest form of logic coverage. Also known as Node Coverage. What is the minimum number of test cases required to achieve statement coverage for the program segment given below?

Statement Coverage Statement Coverage requires that each statement will have been executed at least once. Simplest form of logic coverage. Also known as Node Coverage. What is the minimum number of test cases required to achieve statement coverage for the program segment given below?

How many test cases required for Statement Coverage? input(Y) if (Y<=0) then Y := −Y end_if while (Y>0) do input(X) Y := Y-1 end_while

How many test cases required for Statement Coverage? input(Y) if (Y<=0) then Y := −Y end_if while (Y>0) do input(X) Y := Y-1 end_while Claim: only 1 test case is required.

How many test cases required for Statement Coverage? input(Y) if (Y<=0) then Y := −Y end_if while (Y>0) do input(X) Y := Y-1 end_while Claim: only 1 test case is required.

How many test cases required for Statement Coverage? input(Y) if (Y<=0) then Y := −Y end_if while (Y>0) do input(X) Y := Y-1 end_while Claim: only 1 test case is required.

How many test cases required for Statement Coverage? input(Y) if (Y<=0) then Y := −Y end_if while (Y>0) do input(X) Y := Y-1 end_while Claim: only 1 test case is required.

How many test cases required for Statement Coverage? input(Y) if (Y<=0) then Y := −Y end_if while (Y>0) do input(X) Y := Y-1 end_while Claim: only 1 test case is required.

How many test cases required for Statement Coverage? input(Y) if (Y<=0) then Y := −Y end_if while (Y>0) do input(X) Y := Y-1 end_while Claim: only 1 test case is required.

How many test cases required for Statement Coverage? input(Y) if (Y<=0) then Y := −Y end_if while (Y>0) do input(X) Y := Y-1 end_while Claim: only 1 test case is required.

Branch Coverage Branch Coverage requires that each branch will have been traversed, and that every program entry point will have been taken, at least once. Also known as Edge Coverage. (cont’d)

Branch Coverage (cont’d) Why “…and that every program entry point will have been taken, at least once”?

Branch Coverage (cont’d) Why “…and that every program entry point will have been taken, at least once”?

Branch Coverage (cont’d) Why “…and that every program entry point will have been taken, at least once”? (cont’d)

Branch Coverage (cont’d) What is the relationship between Statement and Branch Coverage?

Branch Coverage (cont’d) What is the relationship between Statement and Branch Coverage? Possible relationships: None. Statement Coverage subsumes Branch Coverage (“statement => branch”). Branch Coverage subsumes Statement Coverage (“branch => statement”). Both (2) and (3) (i.e., they are equivalent)

Branch Coverage (cont’d) What is the relationship between Statement and Branch Coverage? Possible relationships: None. Statement Coverage subsumes Branch Coverage (“statement => branch”). Branch Coverage subsumes Statement Coverage (“branch => statement”). Both (2) and (3) (i.e., they are equivalent)

Branch Coverage (cont’d) What is the relationship between Statement and Branch Coverage? Possible relationships: None. Statement Coverage subsumes Branch Coverage (“statement => branch”). Branch Coverage subsumes Statement Coverage (“branch => statement”). Both (2) and (3) (i.e., they are equivalent)

Branch Coverage (cont’d) What is the relationship between Statement and Branch Coverage? Possible relationships: None. Statement Coverage subsumes Branch Coverage (“statement => branch”). Branch Coverage subsumes Statement Coverage (“branch => statement”). Both (2) and (3) (i.e., they are equivalent)

Branch Coverage (cont’d) What is the relationship between Statement and Branch Coverage? Possible relationships: None. Statement Coverage subsumes Branch Coverage (“statement => branch”). Branch Coverage subsumes Statement Coverage (“branch => statement”). Both (2) and (3) (i.e., they are equivalent)

Does “statement => branch” ??? Min. number of cases required for Statement Coverage? Min. number of cases required for Branch Coverage?

Does “statement => branch” ??? Min. number of cases required for Statement Coverage? Min. number of cases required for Branch Coverage? 1

Does “statement => branch” ??? Min. number of cases required for Statement Coverage? Min. number of cases required for Branch Coverage? 1 2

Does “statement => branch” ??? Min. number of cases required for Statement Coverage? Min. number of cases required for Branch Coverage? 1 2 Therefore, Statement Coverage does NOT subsume Branch Coverage.

Does “branch => statement” ??? Normally, YES…

Does “branch => statement” ??? Normally, YES… in the absence of “DEAD CODE”. DEAD CODE is not reachable via any executable program path. (cont’d)

Does “branch => statement” ??? If a program has "dead (i.e., unreachable) code", then "statement coverage" is unachievable. (We would need to modify the program in order to bring the dead code back to “life”.) Bottom line: we will always assume the nominal case of “no dead code" unless explicitly stated otherwise. Under this assumption, Branch Coverage does indeed subsume Statement Coverage.

Condition Coverage A branch predicate may have more than one condition. input(X,Y) if (Y<=0) or (X=0) then Y := -Y end_if while (Y>0) and (not EOF) do input(X) Y := Y-1 end_while (cont’d)

Condition Coverage (cont’d) Condition Coverage requires that each condition will have been True at least once and False at least once. What is the relationship between Branch and Condition Coverage?

Condition Coverage (cont’d) Condition Coverage requires that each condition will have been True at least once and False at least once. What is the relationship between Branch and Condition Coverage? (cont’d)

Condition Coverage (cont’d) if A or B then s1 else s2 end_if_then_else A B Branch test 1 T F ? test 2

Condition Coverage (cont’d) if A or B then s1 else s2 end_if_then_else A B Branch test 1 T F true test 2 ?

Condition Coverage (cont’d) if A or B then s1 else s2 end_if_then_else A B Branch test 1 T F true test 2 false

Condition Coverage (cont’d) if A or B then s1 else s2 end_if_then_else A B Branch test 1 T F true test 2 false   

Condition Coverage (cont’d) if A or B then s1 else s2 end_if_then_else A B Branch test 1 T F true test 2 false     Branch Coverage => Condition Coverage

Condition Coverage (cont’d) if A or B then s1 else s2 end_if_then_else A B Branch test 3 T F ? test 4

Condition Coverage (cont’d) if A or B then s1 else s2 end_if_then_else A B Branch test 3 T F true test 4 ?

Condition Coverage (cont’d) if A or B then s1 else s2 end_if_then_else A B Branch test 3 T F true test 4

Condition Coverage (cont’d) if A or B then s1 else s2 end_if_then_else A B Branch test 3 T F true test 4   

Condition Coverage (cont’d) if A or B then s1 else s2 end_if_then_else A B Branch test 3 T F true test 4     Condition Coverage => Branch Coverage

Branch/Condition Coverage Branch/Condition Coverage requires that both Branch AND Condition Coverage will have been achieved. Therefore, Branch/Condition Coverage subsumes both Branch Coverage and Condition Coverage.

Branch/Condition Coverage Branch/Condition Coverage requires that both Branch AND Condition Coverage will have been achieved. Therefore, Branch/Condition Coverage subsumes both Branch Coverage and Condition Coverage.

Compound Condition Coverage What if the compiler generates code that masks the evaluation of conditions? That is, suppose if (A) or (y/x=5) then... is compiled in such a way that if A is true, y/x=5 will not be evaluated. (cont’d)

Compound Condition Coverage (cont’d) Compound Condition Coverage requires that all combinations of condition values at every branch statement will have been covered, and that every entry point will have been taken, at least once. Also know as Multiple Condition Coverage. Subsumes Branch/Condition Coverage, regardless of the order in which conditions are evaluated.

Compound Condition Coverage (cont’d) Compound Condition Coverage requires that all combinations of condition values at every branch statement will have been covered, and that every entry point will have been taken, at least once. Also know as Multiple Condition Coverage. Subsumes Branch/Condition Coverage, regardless of the order in which conditions are evaluated.

Compound Condition Coverage (cont’d) Compound Condition Coverage requires that all combinations of condition values at every branch statement will have been covered, and that every entry point will have been taken, at least once. Also know as Multiple Condition Coverage. Subsumes Branch/Condition Coverage, regardless of the order in which conditions are evaluated. (cont’d)

Compound Condition Coverage (cont’d) Combinations of condition values: TT, TF, FT, FF input(X,Y) if (Y<=0) or (X=0) then Y := -Y end_if (cont’d)

Compound Condition Coverage (cont’d) In general, how many different combinations of condition values must be considered when a branch predicate has N conditions?

Compound Condition Coverage (cont’d) In general, how many different combinations of condition values must be considered when a branch predicate has N conditions? 2 N

Path Coverage Path Coverage requires that all program paths will have been traversed at least once. Often described as the “strongest” form of logic coverage. (Is it stronger than Compound Condition Coverage?) Path Coverage is usually impossible when loops are present. (How many test cases would be required to cover all paths in the example below?)

Path Coverage Path Coverage requires that all program paths will have been traversed at least once. Often described as the “strongest” form of logic coverage. (Is it stronger than Compound Condition Coverage?) Path Coverage is usually impossible when loops are present. (How many test cases would be required to cover all paths in the example below?)

Path Coverage Path Coverage requires that all program paths will have been traversed at least once. Often described as the “strongest” form of logic coverage. (Is it stronger than Compound Condition Coverage?) Path Coverage is usually impossible when loops are present. (How many test cases would be required to cover all paths in the example below?) (cont’d)

Path Coverage (cont’d) for I = 1 to 30 do input(X,Y) if (Y<=0) then if (X<=0) then Y := -X else Y:=-Y end_if_else Y := X+Y end_for_do repeat 29 times

Path Coverage (cont’d) 3 paths 3 X 3 = 9 paths 3 paths

Path Coverage (cont’d) repeat 29 times 3 X 3 X…X 3 = 3 paths 30 (cont’d)

Path Coverage (cont’d) Various strategies have been developed for identifying useful subsets of paths for testing when Path Coverage is impractical: Loop Coverage, Basis Paths Coverage, and Dataflow Coverage (Lecture 8).

Loop Coverage Loop Coverage requires that the body of loops be executed 0, 1, 2, t, max, and max+1 times, where possible.

Loop Coverage Loop Coverage requires that the body of loops be executed 0, 1, 2, t, max, and max+1 times, where possible. Rationale: 0: Is some action taken in the body that must also be taken when the body is not executed? 1: Check lower bound on number of times body may be executed.

Loop Coverage Loop Coverage requires that the body of loops be executed 0, 1, 2, t, max, and max+1 times, where possible. Rationale: 0: Is some action taken in the body that must also be taken when the body is not executed? 1: Check lower bound on number of times body may be executed.

Loop Coverage Loop Coverage requires that the body of loops be executed 0, 1, 2, t, max, and max+1 times, where possible. Rationale: 0: Is some action taken in the body that must also be taken when the body is not executed? 1: Check lower bound on number of times body may be executed. (cont’d)

Loop Coverage (cont’d) Rationale: (cont’d) 2: Check loop re-initialization. t: Check typical number of iterations. max: Check upper (valid) bound on number of times body may be executed. max+1: If the maximum can be exceeded, what behavior results?

Loop Coverage (cont’d) Rationale: (cont’d) 2: Check loop re-initialization. t: Check typical number of iterations. max: Check upper (valid) bound on number of times body may be executed. max+1: If the maximum can be exceeded, what behavior results?

Loop Coverage (cont’d) Rationale: (cont’d) 2: Check loop re-initialization. t: Check typical number of iterations. max: Check upper (valid) bound on number of times body may be executed. max+1: If the maximum can be exceeded, what behavior results?

Loop Coverage (cont’d) Rationale: (cont’d) 2: Check loop re-initialization. t: Check typical number of iterations. max: Check upper (valid) bound on number of times body may be executed. max+1: If the maximum can be exceeded, what behavior results?

Basis Paths Coverage A coverage criterion associated with McCabe’s Structured Testing. Based on idea of identifying a “spanning” (i.e., basis) set of paths for a program’s “path space.” The number, C, of such paths is equal to the number of (2-way) branch statements in the program + 1. (This is also the number of enclosed regions in the program graph + 1.)

Basis Paths Coverage A coverage criterion associated with McCabe’s Structured Testing. Based on idea of identifying a “spanning” (i.e., basis) set of paths for a program’s “path space.” The number, C, of such paths is equal to the number of (2-way) branch statements in the program + 1. (This is also the number of enclosed regions in the program graph + 1.)

Spanning vectors in 3n-space X-coordinate A = (x, y, z) = x (1, 0, 0) + y (0, 1, 0) + z (0, 0, 1)

Basis Paths Coverage A coverage criterion associated with McCabe’s Structured Testing. Based on idea of identifying a “spanning” (i.e., basis) set of paths for a program’s “path space.” The number, C, of such paths is equal to the number of (2-way) branch statements in the program + 1. (This is also the number of enclosed regions in the program graph + 1.) (cont’d)

Basis Paths Coverage (cont’d) C is what McCabe calls the Cyclomatic Complexity of a program. Any C distinct, simple program paths that provide branch coverage also form a basis set of paths. (In a simple program path, while loop bodies are executed at most once and repeat-until loop bodies are executed at most twice.)

Basis Paths Coverage (cont’d) C is what McCabe calls the Cyclomatic Complexity of a program. Any C distinct, simple program paths that provide branch coverage also form a basis set of paths. (In a simple program path, while loop bodies are executed at most once and repeat-until loop bodies are executed at most twice.)

Example 1 if a then s1 else if b then s2 else if c then s3 else s4 end_if_then_else Paths: ___ Basis Paths: ___ Cases for branch coverage: ___

Example 1 4 if a then s1 else if b then s2 else if c then s3 else s4 end_if_then_else 4 Paths: ___ Basis Paths: ___ Cases for branch coverage: ___

Example 1 1 2 3 4 if a then s1 else if b then s2 else if c then s3 else s4 end_if_then_else 1 2 3 4 Paths: ___ Basis Paths: ___ Cases for branch coverage: ___

Example 1 1 2 3 4 4 if a then s1 else if b then s2 else if c then s3 else s4 end_if_then_else 1 2 3 4 4 Paths: ___ Basis Paths: ___ Cases for branch coverage: ___

Example 1 1 2 3 4 4 4 if a then s1 else if b then s2 else if c then s3 else s4 end_if_then_else 1 2 3 4 4 4 Paths: ___ Basis Paths: ___ Cases for branch coverage: ___

Example 2 if a then s1 end_if_then if b then s2 if c then s3 Paths: ___ Basis Paths: ___ Cases for branch coverage: ___

Example 2 if a then s1 end_if_then if b then s2 if c then s3 8 Paths: ___ Basis Paths: ___ Cases for branch coverage: ___

Example 2 if a then s1 end_if_then if b then s2 1 if c then s3 2 3 8 Paths: ___ Basis Paths: ___ Cases for branch coverage: ___

Example 2 if a then s1 end_if_then if b then s2 if c then s3 1 2 3 8 4 Paths: ___ Basis Paths: ___ Cases for branch coverage: ___

Example 2 if a then s1 end_if_then if b then s2 if c then s3 1 2 3 8 4 Paths: ___ Basis Paths: ___ Cases for branch coverage: ___

Example 3 while a do if b then s1 else s2 end_if_then_else end_while Paths: ___ Basis Paths: ___ Cases for branch coverage: ___

 Example 3 while a do if b then s1 else s2 end_if_then_else end_while Paths: ___ Basis Paths: ___ Cases for branch coverage: ___

 Example 3 while a do if b then s1 else s2 end_if_then_else end_while Paths: ___ Basis Paths: ___ Cases for branch coverage: ___

 Example 3 while a do if b then s1 else s2 end_if_then_else end_while Paths: ___ Basis Paths: ___ Cases for branch coverage: ___

 Example 3 while a do if b then s1 else s2 end_if_then_else end_while Paths: ___ Basis Paths: ___ Cases for branch coverage: ___

In General…   => => Number of test cases required for branch coverage Number of program Paths Number of Basis Paths   Basis Paths Coverage Path Coverage => => Branch Coverage

Exercise Prove that Path and Compound Condition Coverage are independent. (Hint: consider the proof that Branch and Condition Coverage are independent.)

Coming Up Next… In the next lecture we consider a family of path selection criteria based on the idea that program paths along which variables are defined and then used should be covered. The strategy is popularly known as Dataflow Coverage.

White-Box Testing Techniques I Software Testing and Verification Lecture 7 Prepared by Stephen M. Thebaut, Ph.D. University of Florida