(c) 2007 Mauro Pezzè & Michal Young Ch 12, slide 1 Structural Testing.

Slides:



Advertisements
Similar presentations
Coverage Criteria Drawn mostly from Ammann&Offutt and Pezze&Yooung.
Advertisements

1 ECE 453 – CS 447 – SE 465 Software Testing & Quality Assurance Lecture 11 Instructor Paulo Alencar.
SOFTWARE TESTING. INTRODUCTION  Software Testing is the process of executing a program or system with the intent of finding errors.  It involves any.
(c) 2007 Mauro Pezzè & Michal Young Ch 9, slide 1 Test Case Selection and Adequacy Criteria.
(c) 2007 Mauro Pezzè & Michal Young Ch 9, slide 1 Test Case Selection and Adequacy Criteria.
(c) 2007 Mauro Pezzè & Michal Young Ch 13, slide 1 Data flow testing.
Software Testing Sudipto Ghosh CS 406 Fall 99 November 16, 1999.
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.
Ch6: Software Verification. 1 Statement coverage criterion  Informally:  Formally:  Difficult to minimize the number of test cases and still ensure.
©Ian Sommerville 2004Software Engineering, 7th edition. Chapter 23 Slide 1 Software testing.
Chapter 8: Path Testing Csci 565.
IMSE Week 18 White Box or Structural Testing Reading:Sommerville (4th edition) ch 22 orPressman (4th edition) ch 16.
(c) 2007 Mauro Pezzè & Michal Young Ch 10, slide 1 Functional testing.
Testing an individual module
DAIMI(c) Henrik Bærbak Christensen1 White-box Testing Let us open the box...
Unit Testing CS 414 – Software Engineering I Don Bagert Rose-Hulman Institute of Technology January 16, 2003.
SOFTWARE TESTING WHITE BOX TESTING 1. GLASS BOX/WHITE BOX TESTING 2.
Software Testing and QA Theory and Practice (Chapter 4: Control Flow Testing) © Naik & Tripathy 1 Software Testing and Quality Assurance Theory and Practice.
1 Software Testing Techniques CIS 375 Bruce R. Maxim UM-Dearborn.
Software Testing Sudipto Ghosh CS 406 Fall 99 November 9, 1999.
Software Systems Verification and Validation Laboratory Assignment 3
System/Software Testing
Objectives Understand the basic concepts and definitions relating to testing, like error, fault, failure, test case, test suite, test harness. Explore.
CMSC 345 Fall 2000 Unit Testing. The testing process.
Testing phases. Test data Inputs which have been devised to test the system Test cases Inputs to test the system and the predicted outputs from these.
CS4311 Spring 2011 Unit Testing Dr. Guoqiang Hu Department of Computer Science UTEP.
©Ian Sommerville 2000 Software Engineering, 6th edition. Chapter 20 Slide 1 Defect testing l Testing programs to establish the presence of system defects.
CSC 480 Software Engineering Lecture 14 Oct 16, 2002.
Overview of Software Testing 07/12/2013 WISTPC 2013 Peter Clarke.
Path Testing + Coverage Chapter 9 Assigned reading from Binder.
1 Software testing. 2 Testing Objectives Testing is a process of executing a program with the intent of finding an error. A good test case is in that.
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.
Black-box Testing.
White-box Testing.
1 Program Testing (Lecture 14) Prof. R. Mall Dept. of CSE, IIT, Kharagpur.
Software Engineering1  Verification: The software should conform to its specification  Validation: The software should do what the user really requires.
Software Construction Lecture 19 Software Testing-2.
CS451 Lecture 10: Software Testing Yugi Lee STB #555 (816)
Introduction to Software Testing Chapter 3.1 Logic Coverage Paul Ammann & Jeff Offutt.
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.
Agent program is the one part(class)of Othello program. How many test cases do you have to test? Reversi [Othello]
SE 433/333 Software Testing & Quality Assurance Dennis Mumaugh, Instructor Office: CDM, Room 428 Office Hours: Tuesday, 4:00 –
White-Box Testing Techniques I Prepared by Stephen M. Thebaut, Ph.D. University of Florida Software Testing and Verification Lecture 7.
Dynamic White-Box Testing What is code coverage? What are the different types of code coverage? How to derive test cases from control flows?
SOFTWARE TESTING LECTURE 9. OBSERVATIONS ABOUT TESTING “ Testing is the process of executing a program with the intention of finding errors. ” – Myers.
Verification vs. Validation Verification: "Are we building the product right?" The software should conform to its specification.The software should conform.
Software Testing. SE, Testing, Hans van Vliet, © Nasty question  Suppose you are being asked to lead the team to test the software that controls.
Defect testing Testing programs to establish the presence of system defects.
1 Software Testing. 2 What is Software Testing ? Testing is a verification and validation activity that is performed by executing program code.
Testing Integral part of the software development process.
Software TestIng White box testing.
Structural Testing.
Software Testing.
Control Flow Testing Handouts
Software Engineering (CSI 321)
Software Testing and Maintenance 1
Outline of the Chapter Basic Idea Outline of Control Flow Testing
Structural testing, Path Testing
White-Box Testing Techniques
Types of Testing Visit to more Learning Resources.
White-Box Testing.
UNIT-4 BLACKBOX AND WHITEBOX TESTING
White-Box Testing.
White-Box Testing Techniques I
UNIT-4 BLACKBOX AND WHITEBOX TESTING
Software Testing.
Unit III – Chapter 3 Path Testing.
Presentation transcript:

(c) 2007 Mauro Pezzè & Michal Young Ch 12, slide 1 Structural Testing

(c) 2007 Mauro Pezzè & Michal Young Ch 12, slide 2 Learning objectives Understand rationale for structural testing –How structural (code-based or glass-box) testing complements functional (black-box) testing Recognize and distinguish basic terms –Adequacy, coverage Recognize and distinguish characteristics of common structural criteria Understand practical uses and limitations of structural testing

(c) 2007 Mauro Pezzè & Michal Young Ch 12, slide 3 “ Structural ” testing Judging test suite thoroughness based on the structure of the program itself –Also known as “ white-box ”, “ glass-box ”, or “ code- based ” testing –To distinguish from functional (requirements-based, “ black-box ” testing) –“ Structural ” testing is still testing product functionality against its specification. Only the measure of thoroughness has changed.

(c) 2007 Mauro Pezzè & Michal Young Ch 12, slide 4 Why structural (code-based) testing? One way of answering the question “ What is missing in our test suite? ” –If part of a program is not executed by any test case in the suite, faults in that part cannot be exposed –But what ’ s a “ part ” ? Typically, a control flow element or combination: Statements (or CFG nodes), Branches (or CFG edges) Fragments and combinations: Conditions, paths Complements functional testing: Another way to recognize cases that are treated differently –Recall fundamental rationale: Prefer test cases that are treated differently over cases treated the same

(c) 2007 Mauro Pezzè & Michal Young Ch 12, slide 5 No guarantees Executing all control flow elements does not guarantee finding all faults –Execution of a faulty statement may not always result in a failure The state may not be corrupted when the statement is executed with some data values Corrupt state may not propagate through execution to eventually lead to failure What is the value of structural coverage? –Increases confidence in thoroughness of testing Removes some obvious inadequacies

(c) 2007 Mauro Pezzè & Michal Young Ch 12, slide 6 Structural testing complements functional testing Control flow testing includes cases that may not be identified from specifications alone –Typical case: implementation of a single item of the specification by multiple parts of the program –Example: hash table collision (invisible in interface spec) Test suites that satisfy control flow adequacy criteria could fail in revealing faults that can be caught with functional criteria –Typical case: missing path faults

(c) 2007 Mauro Pezzè & Michal Young Ch 12, slide 7 Structural testing in practice Create functional test suite first, then measure structural coverage to identify see what is missing Interpret unexecuted elements –may be due to natural differences between specification and implementation –or may reveal flaws of the software or its development process inadequacy of specifications that do not include cases present in the implementation coding practice that radically diverges from the specification inadequate functional test suites Attractive because automated –coverage measurements are convenient progress indicators –sometimes used as a criterion of completion use with caution: does not ensure effective test suites

(c) 2007 Mauro Pezzè & Michal Young Ch 12, slide 8 Statement testing Adequacy criterion: each statement (or node in the CFG) must be executed at least once Coverage: # executed statements # statements Rationale: a fault in a statement can only be revealed by executing the faulty statement

(c) 2007 Mauro Pezzè & Michal Young Ch 12, slide 9 Statements or blocks? Nodes in a control flow graph often represent basic blocks of multiple statements –Some standards refer to basic block coverage or node coverage –Difference in granularity, not in concept No essential difference –100% node coverage 100% statement coverage but levels will differ below 100% –A test case that improves one will improve the other though not by the same amount, in general

(c) 2007 Mauro Pezzè & Michal Young Ch 12, slide 10 Example T 0 = { “”, “ test ”, “ test+case%1Dadequacy ” } 17/18 = 94% Stmt Cov. T 1 = { “ adequate+test%0Dexecuti on%7U ” } 18/18 = 100% Stmt Cov. T 2 = { “ %3D ”, “ %A ”, “ a+b ”, “ test ” } 18/18 = 100% Stmt Cov.

(c) 2007 Mauro Pezzè & Michal Young Ch 12, slide 11 Coverage is not size Coverage does not depend on the number of test cases –T 0, T 1 : T 1 > coverage T 0 T 1 < cardinality T 0 –T 1, T 2 : T 2 = coverage T 1 T 2 > cardinality T 1 Minimizing test suite size is seldom the goal –small test cases make failure diagnosis easier –a failing test case in T 2 gives more information for fault localization than a failing test case in T 1

(c) 2007 Mauro Pezzè & Michal Young Ch 12, slide 12 “ All statements ” can miss some cases Complete statement coverage may not imply executing all branches in a program Example: –Suppose block F were missing –Statement adequacy would not require false branch from D to L T 3 = { “”, “ +%0D+%4J ” } 100% Stmt Cov. No false branch from D

(c) 2007 Mauro Pezzè & Michal Young Ch 12, slide 13 Branch testing Adequacy criterion: each branch (edge in the CFG) must be executed at least once Coverage: # executed branches # branches T 3 = { “”, “ +%0D+%4J ” } 100% Stmt Cov.88% Branch Cov. (7/8 branches) T 2 = { “ %3D ”, “ %A ”, “ a+b ”, “ test ” } 100% Stmt Cov. 100% Branch Cov. (8/8 branches)

(c) 2007 Mauro Pezzè & Michal Young Ch 12, slide 14 Statements vs branches Traversing all edges of a graph causes all nodes to be visited –So test suites that satisfy the branch adequacy criterion for a program P also satisfy the statement adequacy criterion for the same program The converse is not true (see T 3 ) –A statement-adequate (or node-adequate) test suite may not be branch-adequate (edge-adequate)

(c) 2007 Mauro Pezzè & Michal Young Ch 12, slide 15 “ All branches ” can still miss conditions Sample fault: missing operator (negation) digit_high == 1 || digit_low == -1 Branch adequacy criterion can be satisfied by varying only digit_low –The faulty sub-expression might never determine the result –We might never really test the faulty condition, even though we tested both outcomes of the branch

(c) 2007 Mauro Pezzè & Michal Young Ch 12, slide 16 Condition testing Branch coverage exposes faults in how a computation has been decomposed into cases –intuitively attractive: check the programmer ’ s case analysis –but only roughly: groups cases with the same outcome Condition coverage considers case analysis in more detail –also individual conditions in a compound Boolean expression e.g., both parts of digit_high == 1 || digit_low == -1

(c) 2007 Mauro Pezzè & Michal Young Ch 12, slide 17 Basic condition testing Adequacy criterion: each basic condition must be executed at least once Coverage: # truth values taken by all basic conditions 2 * # basic conditions

(c) 2007 Mauro Pezzè & Michal Young Ch 12, slide 18 Basic conditions vs branches Basic condition adequacy criterion can be satisfied without satisfying branch coverage T4 = { “ first+test%9Ktest%K9 ” } satisfies basic condition adequacy does not satisfy branch condition adequacy Branch and basic condition are not comparable (neither implies the other)

(c) 2007 Mauro Pezzè & Michal Young Ch 12, slide 19 Covering branches and conditions Branch and condition adequacy: –cover all conditions and all decisions Compound condition adequacy: –Cover all possible evaluations of compound conditions –Cover all branches of a decision tree

(c) 2007 Mauro Pezzè & Michal Young Ch 12, slide 20 Compound conditions: Exponential complexity (((a || b) && c) || d) && e Test a b c de Case (1)T—T—T (2)FTT—T (3)T—FTT (4)FTFTT (5)FF—TT (6)T—T—F (7)FTT—F (8)T—FTF (9)FTFTF (10)FF—TF (11)T—FF— (12)FTFF— (13)FF—F— short-circuit evaluation often reduces this to a more manageable number, but not always

(c) 2007 Mauro Pezzè & Michal Young Ch 12, slide 21 Modified condition/decision (MC/DC) Motivation: Effectively test important combinations of conditions, without exponential blowup in test suite size –“ Important ” combinations means: Each basic condition shown to independently affect the outcome of each decision Requires: –For each basic condition C, two test cases, –values of all evaluated conditions except C are the same –compound condition as a whole evaluates to true for one and false for the other

(c) 2007 Mauro Pezzè & Michal Young Ch 12, slide 22 MC/DC: linear complexity N+1 test cases for N basic conditions (((a || b) && c) || d) && e Test a b c de outcome Case (1)true--true--truetrue (2)falsetruetrue--truetrue (3)true--falsetruetruetrue (6)true--true--falsefalse (11)true--falsefalse--false (13)falsefalse--false--false Underlined values independently affect the output of the decision Required by the RTCA/DO-178B standard

(c) 2007 Mauro Pezzè & Michal Young Ch 12, slide 23 Comments on MC/DC MC/DC is –basic condition coverage (C) –branch coverage (DC) –plus one additional condition (M): every condition must independently affect the decision ’ s output It is subsumed by compound conditions and subsumes all other criteria discussed so far –stronger than statement and branch coverage A good balance of thoroughness and test size (and therefore widely used)

(c) 2007 Mauro Pezzè & Michal Young Ch 12, slide 24 Paths? (Beyond individual branches) Should we explore sequences of branches (paths) in the control flow? Many more paths than branches –A pragmatic compromise will be needed

(c) 2007 Mauro Pezzè & Michal Young Ch 12, slide 25 Path adequacy Decision and condition adequacy criteria consider individual program decisions Path testing focuses consider combinations of decisions along paths Adequacy criterion: each path must be executed at least once Coverage: # executed paths # paths

(c) 2007 Mauro Pezzè & Michal Young Ch 12, slide 26 Practical path coverage criteria The number of paths in a program with loops is unbounded –the simple criterion is usually impossible to satisfy For a feasible criterion: Partition infinite set of paths into a finite number of classes Useful criteria can be obtained by limiting –the number of traversals of loops –the length of the paths to be traversed –the dependencies among selected paths

(c) 2007 Mauro Pezzè & Michal Young Ch 12, slide 27 Boundary interior path testing Group together paths that differ only in the subpath they follow when repeating the body of a loop –Follow each path in the control flow graph up to the first repeated node –The set of paths from the root of the tree to each leaf is the required set of subpaths for boundary/interior coverage

(c) 2007 Mauro Pezzè & Michal Young Ch 12, slide 28 Boundary interior adequacy for cgi-decode

(c) 2007 Mauro Pezzè & Michal Young Ch 12, slide 29 Limitations of boundary interior adequacy The number of paths can still grow exponentially if (a) { S1; } if (b) { S2; } if (c) { S3; }... if (x) { Sn; } The subpaths through this control flow can include or exclude each of the statements Si, so that in total N branches result in 2 N paths that must be traversed Choosing input data to force execution of one particular path may be very difficult, or even impossible if the conditions are not independent

(c) 2007 Mauro Pezzè & Michal Young Ch 12, slide 30 Loop boundary adequacy Variant of the boundary/interior criterion that treats loop boundaries similarly but is less stringent with respect to other differences among paths Criterion: A test suite satisfies the loop boundary adequacy criterion iff for every loop: –In at least one test case, the loop body is iterated zero times –In at least one test case, the loop body is iterated once –In at least one test case, the loop body is iterated more than once Corresponds to the cases that would be considered in a formal correctness proof for the loop

(c) 2007 Mauro Pezzè & Michal Young Ch 12, slide 31 LCSAJ adequacy Linear Code Sequence And Jumps: sequential subpath in the CFG starting and ending in a branch –TER 1 = statement coverage –TER 2 = branch coverage –TER n+2 = coverage of n consecutive LCSAJs

(c) 2007 Mauro Pezzè & Michal Young Ch 12, slide 32 Cyclomatic adequacy Cyclomatic number: number of independent paths in the CFG –A path is representable as a bit vector, where each component of the vector represents an edge –“ Dependence ” is ordinary linear dependence between (bit) vectors If e = #edges, n = #nodes, c = #connected components of a graph, it is: –e - n + c for an arbitrary graph –e - n + 2 for a CFG Cyclomatic coverage counts the number of independent paths that have been exercised, relative to cyclomatic complexity

(c) 2007 Mauro Pezzè & Michal Young Ch 12, slide 33 Towards procedure call testing The criteria considered to this point measure coverage of control flow within individual procedures. –not well suited to integration or system testing Choose a coverage granularity commensurate with the granularity of testing –if unit testing has been effective, then faults that remain to be found in integration testing will be primarily interface faults, and testing effort should focus on interfaces between units rather than their internal details

(c) 2007 Mauro Pezzè & Michal Young Ch 12, slide 34 Procedure call testing Procedure entry and exit testing –procedure may have multiple entry points (e.g., Fortran) and multiple exit points Call coverage –The same entry point may be called from many points

(c) 2007 Mauro Pezzè & Michal Young Ch 12, slide 35 Subsumption relation

(c) 2007 Mauro Pezzè & Michal Young Ch 12, slide 36 Satisfying structural criteria Sometimes criteria may not be satisfiable –The criterion requires execution of statements that cannot be executed as a result of –defensive programming –code reuse (reusing code that is more general than strictly required for the application) conditions that cannot be satisfied as a result of –interdependent conditions paths that cannot be executed as a result of –interdependent decisions

(c) 2007 Mauro Pezzè & Michal Young Ch 12, slide 37 Satisfying structural criteria Large amounts of fossil code may indicate serious maintainability problems –But some unreachable code is common even in well- designed, well-maintained systems Solutions: –make allowances by setting a coverage goal less than 100% –require justification of elements left uncovered RTCA-DO-178B and EUROCAE ED-12B for modified MC/DC

(c) 2007 Mauro Pezzè & Michal Young Ch 12, slide 38 Summary We defined a number of adequacy criteria –NOT test design techniques! Different criteria address different classes of errors Full coverage is usually unattainable –Remember that attainability is an undecidable problem! …and when attainable, “ inversion ” is usually hard –How do I find program inputs allowing to cover something buried deeply in the CFG? –Automated support (e.g., symbolic execution) may be necessary Therefore, rather than requiring full adequacy, the “ degree of adequacy ” of a test suite is estimated by coverage measures –May drive test improvement