18
Code Coverage Metrics …And How to Use (and Misuse) Them #include <stdio.h> main() { int i, n, pp, p, c; printf("Enter element count: "); scanf("%d", &n); if (n < 0) { printf("No %d series!\n", n); n = -1; } else { printf("{ "); pp = 0; p = 1; for (i=0; i < n; i++) { c = pp + p; c pp + p; printf("%d ", c); pp = p; p = c; } printf("} \n"); } exit(n); }

Code Coverage Metrics.ppt - RBCS, Inc...Tools Simulators, code analyzers, spell- and hk Profilers, coverage analyzers, harnesses, db d Intrusive and non-intrusive GUI tools, grammar

  • Upload
    others

  • View
    7

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Code Coverage Metrics.ppt - RBCS, Inc...Tools Simulators, code analyzers, spell- and hk Profilers, coverage analyzers, harnesses, db d Intrusive and non-intrusive GUI tools, grammar

Code Coverage Metrics…And How to Use (and Misuse) Them

#include <stdio.h>main()(){int i, n, pp, p, c;printf("Enter element count: ");scanf("%d", &n);if (n < 0) {printf("No %d series!\n", n);n = -1;

} else {printf("{ ");pp = 0;p = 1;for (i=0; i < n; i++) {c = pp + p;c pp + p;printf("%d ", c);pp = p;p = c;

}printf("} \n");

}exit(n);

}

Page 2: Code Coverage Metrics.ppt - RBCS, Inc...Tools Simulators, code analyzers, spell- and hk Profilers, coverage analyzers, harnesses, db d Intrusive and non-intrusive GUI tools, grammar

C d C M t iCode Coverage MetricsCode coverage metrics are tools for measuring Code coverage metrics are tools for measuring the extent of white box test coverageWhat types of white box coverage apply?

Statement branch condition multicondition Statement, branch, condition, multicondition, multicondition decision, and loop coverageMcCabe basis pathsSet-use pair (dataflow) coverageSet use pair (dataflow) coverageChecklist-based test requirements

How does white box testing compare to other types of testing?types of testing?Can tools help with the tedious bits?What bugs does white box testing miss?

Code Coverage Metrics Copyright (c) 2004-2009 RBCS Page 2

Page 3: Code Coverage Metrics.ppt - RBCS, Inc...Tools Simulators, code analyzers, spell- and hk Profilers, coverage analyzers, harnesses, db d Intrusive and non-intrusive GUI tools, grammar

C d C d Whit B T tiCode Coverage and White Box TestingDynamic test (compiled, executable)y ( p , )

Execute the item under testCreate test conditions (e.g., submit inputs)Compare expected and actual results

Pure requirements-based tests can miss 80% or more of the code: Do you know which 80% you are not testing?Test design based on how the system works

Figure out the control flowsFigure out data flowsCheck against standard checklists or bug taxonomies

Code coverage tools monitor the completeness of white box tests and handle the tedious details for you

Code Coverage Metrics Copyright (c) 2004-2009 RBCS Page 3

Let’s look at these in more detail

Page 4: Code Coverage Metrics.ppt - RBCS, Inc...Tools Simulators, code analyzers, spell- and hk Profilers, coverage analyzers, harnesses, db d Intrusive and non-intrusive GUI tools, grammar

C d B d T tiCode-Based Testing Creating tests to achieve levels of coverageCreating tests to achieve levels of coverage

Statement coverage: every statement executed Branch coverage: every branch (decision) taken each way, true and falseCondition coverage: every condition evaluated once true and once falseMulticondition coverage: for compound conditions, every g p ypossible combination of constituent conditions coveredMulticondition decision coverage: for compound conditions, every possible combination of constituent conditions that can ff t th d i i daffect the decision covered

Loop coverage: Ideally all possible loop paths taken, but usually loop paths taken zero, once, and multiple (ideally, maximum) times

Code Coverage Metrics Copyright (c) 2004-2009 RBCS Page 4

maximum) times

Page 5: Code Coverage Metrics.ppt - RBCS, Inc...Tools Simulators, code analyzers, spell- and hk Profilers, coverage analyzers, harnesses, db d Intrusive and non-intrusive GUI tools, grammar

C d C E plCode Coverage ExampleWhat test values for n do

1 main()2 {

we need to cover all the statements?

n < 0, n > 0

3 int i, n, pp, p, c;4 printf("Enter element count: ");5 scanf("%d", &n);6 if (n < 0) {7 printf("No %d series!\n" n);

Does that get us branch coverage?

No, need to add n = 0

7 printf( No %d series!\n , n);8 n = -1;9 } else {10 printf("{ ");11 pp = 0;,

Does that get us condition coverage?

Yes: no compound

12 p = 1;13 for (i=0; i < n; i++) {14 c = pp + p;15 printf("%d ", c);16 pp = p;Yes: no compound

conditionsHow about loop coverage?

Need to cover n = 1 and

16 pp = p;17 p = c;18 }19 printf("} \n");20 }

Code Coverage Metrics Copyright (c) 2004-2009 RBCS Page 5

Need to co e a d n = max 21 exit(n);

22 }

Page 6: Code Coverage Metrics.ppt - RBCS, Inc...Tools Simulators, code analyzers, spell- and hk Profilers, coverage analyzers, harnesses, db d Intrusive and non-intrusive GUI tools, grammar

V i ti C diti CVariations on Condition CoverageSo, when do condition 1 if (( 0) (b )) {So, when do condition coverage, multicondition coverage, and multicondition decision coverage vary?

1 if ((a>0) && (b>a)) {2 printf(”Success.\n”);3 } else {4 printf(”Failure.\n”);5 }decision coverage vary?

How many tests for each type of coverage for lines 1-5?H b t f li 7 11?

5 }67 if ((f!=NULL) && (*f==0)) { 8 printf(”Found.\n”);9 } else {

\How about for lines 7-11?Does multicondition coverage even make sense for lines 7-

10 printf(”Not found.\n”);11 }12 13 if ((a<=0) || (b<=a)) {14 printf(”Failure \n”);

11?Let’s compare the testing for lines 1-5 with lines 13-17

14 printf( Failure.\n );15 } else {16 printf(”Success.\n”);17 }

Code Coverage Metrics Copyright (c) 2004-2009 RBCS Page 6

lines 1 5 with lines 13 17

Page 7: Code Coverage Metrics.ppt - RBCS, Inc...Tools Simulators, code analyzers, spell- and hk Profilers, coverage analyzers, harnesses, db d Intrusive and non-intrusive GUI tools, grammar

M C b C l ti C pl itMcCabe Cyclomatic ComplexityMcCabe’s Cyclomatic Complexity measures McCabe s Cyclomatic Complexity measures control flow complexity

Measured by drawing a directed graph Nodes represent entries, exits, decisionsEdges represent non-branching statements

It has some useful testing implicationsIt has some useful testing implicationsHigh-complexity modules are inherently buggy and regression-proneg pThe number of basis paths through the graph is equal to the number of basis tests to cover the graph

Code Coverage Metrics Copyright (c) 2004-2009 RBCS Page 7

graphLet’s see how…

Page 8: Code Coverage Metrics.ppt - RBCS, Inc...Tools Simulators, code analyzers, spell- and hk Profilers, coverage analyzers, harnesses, db d Intrusive and non-intrusive GUI tools, grammar

C l ti C pl it f Fib iCyclomatic Complexity for FibonacciCyclomatic ComplexityC #R i 1C = #Regions + 1 = 2 + 1 = 3

C = #Edges - #Nodes +2= 5 - 4 +2 = 3

Code Coverage Metrics Copyright (c) 2004-2009 RBCS Page 8

Page 9: Code Coverage Metrics.ppt - RBCS, Inc...Tools Simulators, code analyzers, spell- and hk Profilers, coverage analyzers, harnesses, db d Intrusive and non-intrusive GUI tools, grammar

B i P th d T tBasis Paths and TestsBasis Paths1 1241. 1242. 12343. 12334

Basis Tests1. n = -12. n = 03 n = 13. n = 1

Code Coverage Metrics Copyright (c) 2004-2009 RBCS Page 9

Page 10: Code Coverage Metrics.ppt - RBCS, Inc...Tools Simulators, code analyzers, spell- and hk Profilers, coverage analyzers, harnesses, db d Intrusive and non-intrusive GUI tools, grammar

A l i D t Fl S t U P iAnalyzing Data Flow Set-Use PairsSo far we’ve focused on testing control So far, we ve focused on testing control flowsHow about testing data flows?How about testing data flows?We can analyze data flows using set-use pair coveragepair coverageDo we cover every variable set-and-subsequent-use (assigning the variable subsequent-use (assigning the variable a value, then using that variable, but before assigning the variable again)?

Code Coverage Metrics Copyright (c) 2004-2009 RBCS Page 10

g g g )

Page 11: Code Coverage Metrics.ppt - RBCS, Inc...Tools Simulators, code analyzers, spell- and hk Profilers, coverage analyzers, harnesses, db d Intrusive and non-intrusive GUI tools, grammar

D t Fl C E plData Flow Coverage Examplei: (13,13)

n=0 covers assign-use1 main()2 {g

n=1 covers increment-usen: (5,6), (5,13), (5,21), (8,21)

n=-1 covers (5,6), (8,21)0 dd (5 13) (5 21)

3 int i, n, pp, p, c;4 printf("Enter element count: ");5 scanf("%d", &n);6 if (n < 0) {7 printf("No %d series!\n" n);n=0 adds (5,13), (5,21)

pp: (11,14),(16,14)n=1 covers (11,14)n=max adds (16,14)

7 printf( No %d series!\n , n);8 n = -1;9 } else {10 printf("{ ");11 pp = 0;( , )

p: (12,14), (12,16), (17,14)n=1 covers (12,14)n=max adds (12,16), (17,14)

(14 15) (14 17)

12 p = 1;13 for (i=0; i < n; i++) {14 c = pp + p;15 printf("%d ", c);16 pp = p;c: (14,15), (14,17)

n=1 covers (14,15)n=max adds (14,17)

Basis cover != data-flow cover

16 pp = p;17 p = c;18 }19 printf("} \n");20 }

Code Coverage Metrics Copyright (c) 2004-2009 RBCS Page 11

For c into p into pp into c, iterate loop three times

21 exit(n);22 }

Page 12: Code Coverage Metrics.ppt - RBCS, Inc...Tools Simulators, code analyzers, spell- and hk Profilers, coverage analyzers, harnesses, db d Intrusive and non-intrusive GUI tools, grammar

Ch kli t b d T t R i tChecklist-based Test RequirementsTests can be designed based on a catalog of Tests can be designed based on a catalog of test requirements, a bug taxonomy or other checklists of important aspects to be testedp pFrequent program operations combined with typical buggy aspects of those operations yp ggy p pmake a good catalog of test requirementsSelect test requirements; cover with testsLet’s test Fibonacci with Brian Marick’s catalog, from The Craft of Software Testing

Code Coverage Metrics Copyright (c) 2004-2009 RBCS Page 12

Click here to see the test requirements catalog, from Marick’s book

Click here to see the tests developed using the test requirements catalog

Page 13: Code Coverage Metrics.ppt - RBCS, Inc...Tools Simulators, code analyzers, spell- and hk Profilers, coverage analyzers, harnesses, db d Intrusive and non-intrusive GUI tools, grammar

A B i C t l B d T t D i PA Basic Catalog-Based Test Design ProcessReview requirements design code and data Review requirements, design, code, and data structures

Compare each element to checklist or catalogp gAccumulate clues and test requirements

Design tests to cover the test requirementsg qAvoid covering multiple error-related test requirements in one test where possibleSeek as much test variety as possible

Run tests

Code Coverage Metrics Copyright (c) 2004-2009 RBCS Page 13

Page 14: Code Coverage Metrics.ppt - RBCS, Inc...Tools Simulators, code analyzers, spell- and hk Profilers, coverage analyzers, harnesses, db d Intrusive and non-intrusive GUI tools, grammar

Comparing TechniquesComparing TechniquesStatic White box Black box

What Test without running Test how system works Test what system does

Why Identify bugs before they’re built

Identify bugs in functions or interfaces

Identify bugs in system results and behaviorthey re built functions or interfaces results and behavior

Who All stakeholders Typically developers Typically testers

Phase During specification d d l

Usually unit, i i

Usually integration, d and development component, integration system, and acceptance

Tools Simulators, code analyzers, spell- and

h k

Profilers, coverage analyzers, harnesses, d b d

Intrusive and non-intrusive GUI tools, l dgrammar checkers,

graphic/diagramming, spreadsheets

debuggers, data generators, test case generators

load generators, performance tools, data generators

Code Coverage Metrics Copyright (c) 2004-2009 RBCS Page 14

Tools, data, and cases can be shared: encourage cross-pollination of techniques

Page 15: Code Coverage Metrics.ppt - RBCS, Inc...Tools Simulators, code analyzers, spell- and hk Profilers, coverage analyzers, harnesses, db d Intrusive and non-intrusive GUI tools, grammar

Wh t T di Ch !What a Tedious Chore!Trying to measure metrics like control-Trying to measure metrics like control-flow coverage and Cyclomatic Complexity is not a fun pastimep y pFortunately, there are tools that can helppIt’s harder to find data-flow coverage toolsAnyone have a test catalog coverage tool?

Code Coverage Metrics Copyright (c) 2004-2009 RBCS Page 15

Page 16: Code Coverage Metrics.ppt - RBCS, Inc...Tools Simulators, code analyzers, spell- and hk Profilers, coverage analyzers, harnesses, db d Intrusive and non-intrusive GUI tools, grammar

Wh t C ’t Whit B T t Fi d?What Can’t White Box Tests Find?As essential as it is to have well-tested units and As essential as it is to have well tested units and builds, white box testing can’t find every kind of bugBugs of omission

Missing requirements design elements codeMissing requirements, design elements, codeUse requirements, design and code reviews

Unmaintainable codeInscrutable variable names or constructs, etc. (though McCabe complexity helps)Use code reviews and static analysis tools

Systemic problemsPerformance, security, usability, interoperability, etc.Use code reviews, black-box system testing, beta/pilot tests,

Code Coverage Metrics Copyright (c) 2004-2009 RBCS Page 16

y gusability studies, prototyping, etc.

Page 17: Code Coverage Metrics.ppt - RBCS, Inc...Tools Simulators, code analyzers, spell- and hk Profilers, coverage analyzers, harnesses, db d Intrusive and non-intrusive GUI tools, grammar

C l iConclusionsWhite box testing is…g

dynamic testing (running item under test)…based on knowledge of how it works

There are four main theoretical techniquesqStatement, branch, condition, and loop coverageBasis paths Set-use pair (dataflow) coverageTest requirements catalogs

Tools are very helpful in measuring the coverage of white box testsWhite box testing is complementary to…

black box testingstatic testing

Code Coverage Metrics Copyright (c) 2004-2009 RBCS Page 17

Use all three to form a complete testing strategy

Page 18: Code Coverage Metrics.ppt - RBCS, Inc...Tools Simulators, code analyzers, spell- and hk Profilers, coverage analyzers, harnesses, db d Intrusive and non-intrusive GUI tools, grammar

C t t RBCSFor over a dozen years, RBCS has delivered services in consulting, outsourcing and training for software and hardware testing Employing the industry’s most

…Contact RBCStraining for software and hardware testing. Employing the industry s most experienced and recognized consultants, RBCS conducts product testing, builds and improves testing groups and hires testing staff for hundreds of clients worldwide. Ranging from Fortune 20 companies to start-ups, RBCS clients save g g p ptime and money through improved product development, decreased tech support calls, improved corporate reputation and more. To learn more about RBCS, visit www.rbcs-us.com.Add RBCS IAddress: RBCS, Inc.

31520 Beck RoadBulverde, TX 78163-3911USA

Phone: +1 (830) 438-4830Fax: +1 (830) 438-4831E-mail: [email protected] b b

Code Coverage Metrics Copyright (c) 2004-2009 RBCS Page 18

Web: www.rbcs-us.com