Paul Ammann & Jeff Offutt

Slides:



Advertisements
Similar presentations
Introduction to Software Testing Chapter 1
Advertisements

Introduction to Software Testing Chapter 1 Model-Driven Test Design Paul Ammann & Jeff Offutt
Introduction to Software Testing Chapter 3.3 Logic Coverage from Source Code Paul Ammann & Jeff Offutt.
Introduction to Software Testing Chapter 1 Paul Ammann & Jeff Offutt SUMMARY OF PARTS 1 AND 2 FROM LAST WEEK.
Paul Ammann & Jeff Offutt
Introduction to Software Testing Chapter 2.1, 2.2 Overview Graph Coverage Criteria Paul Ammann & Jeff Offutt
Introduction to Software Testing Chapter 5.2 Program-based Grammars Paul Ammann & Jeff Offutt
Introduction to Software Testing Chapter 2.3 Graph Coverage for Source Code Paul Ammann & Jeff Offutt
Paul Ammann & Jeff Offutt
Introduction to Software Testing Chapter 2.4 Graph Coverage for Design Elements Paul Ammann & Jeff Offutt
Overview Graph Coverage Criteria ( Introduction to Software Testing Chapter 2.1, 2.2) Paul Ammann & Jeff Offutt.
Software Testing and Maintenance Lecture 4 Graph Coverage for Design Element Paul Ammann & Jeff Offutt Instructor: Hossein Momeni Mazandaran.
Introduction to Software Testing Chapter 8.1 Building Testing Tools –Instrumentation Paul Ammann & Jeff Offutt
Introduction to Software Testing Chapter 2.3 Graph Coverage for Source Code Paul Ammann & Jeff Offutt
Paul Ammann & Jeff Offutt
Introduction to Software Testing (2nd edition) Chapter 7.4 Graph Coverage for Design Elements Paul Ammann & Jeff Offutt
Introduction to Software Testing Chapter 2.3 Graph Coverage for Source Code Paul Ammann & Jeff Offutt.
Introduction to Software Testing Chapter 9.2 Program-based Grammars Paul Ammann & Jeff Offutt
1 Graph Coverage (3). Reading Assignment P. Ammann and J. Offutt “Introduction to Software Testing” ◦ Section 2.2 ◦ Section
Paul Ammann & Jeff Offutt
Coupling-based Criteria for Integration Testing Journal of Software Testing, Verification, and Analysis, 8(3): , September 1998, Jenny Jin and Jeff.
Software Testing and Maintenance Lecture 3 Graph Coverage for Source Code Paul Ammann & Jeff Offutt Instructor: Hossein Momeni Mazandaran.
Introduction to Software Testing Model-Driven Test Design and Coverage testing Paul Ammann & Jeff Offutt Update.
Software Testing and Quality Assurance Practical Considerations (1) 1.
Introduction to Software Testing (2nd edition) Chapter 5 Criteria-Based Test Design Paul Ammann & Jeff Offutt
Paul Ammann & Jeff Offutt
Paul Ammann & Jeff Offutt
Paul Ammann & Jeff Offutt
Paul Ammann & Jeff Offutt
Paul Ammann & Jeff Offutt
Paul Ammann & Jeff Offutt
Paul Ammann & Jeff Offutt
Paul Ammann & Jeff Offutt
White-Box Testing Pfleeger, S. Software Engineering Theory and Practice 2nd Edition. Prentice Hall, Ghezzi, C. et al., Fundamentals of Software Engineering.
Paul Ammann & Jeff Offutt
Introduction to Software Testing Chapter 9.2 Program-based Grammars
Paul Ammann & Jeff Offutt
Paul Ammann & Jeff Offutt
Introduction to Software Testing Chapter 3.5 Logic Coverage for FSMs
Outline of the Chapter Basic Idea Outline of Control Flow Testing
Paul Ammann & Jeff Offutt
Introduction to Software Testing Chapter 3.1, 3.2 Logic Coverage
Introduction to Software Testing Chapter 5.1 Syntax-based Testing
Paul Ammann & Jeff Offutt
Introduction to Software Testing Chapter 2 Model-Driven Test Design
Introduction to Software Testing Chapter 9.2 Program-based Grammars
Paul Ammann & Jeff Offutt
Paul Ammann & Jeff Offutt
Paul Ammann & Jeff Offutt
Introduction to Software Testing Chapter 5.2 Program-based Grammars
Paul Ammann & Jeff Offutt
Introduction to Software Testing Chapter 3, Sec# 3.5
Paul Ammann & Jeff Offutt
Paul Ammann & Jeff Offutt
Introduction to Software Testing Chapter 3.5 Logic Coverage for FSMs
Graph Coverage for Design Elements CS 4501 / 6501 Software Testing
Graph Coverage for Specifications CS 4501 / 6501 Software Testing
Graph Coverage for Source Code
Paul Ammann & Jeff Offutt
Graph Coverage Criteria CS 4501 / 6501 Software Testing
Logic Coverage for Source Code CS 4501 / 6501 Software Testing
Introduction to Software Testing Chapter 5.1 Syntax-based Testing
Paul Ammann & Jeff Offutt
Introduction to Software Testing Chapter 8.5 Logic Coverage for FSMs
George Mason University
Paul Ammann & Jeff Offutt
Paul Ammann & Jeff Offutt
Paul Ammann & Jeff Offutt
Introduction to Software Testing Chapter 3.1, 3.2 Logic Coverage
Presentation transcript:

Paul Ammann & Jeff Offutt http://www.cs.gmu.edu/~offutt/softwaretest/ Introduction to Software Testing Chapter 8.1 Building Testing Tools –Instrumentation Paul Ammann & Jeff Offutt http://www.cs.gmu.edu/~offutt/softwaretest/

Chapter 8 Outline Instrumentation for Graph and Logical Expression Criteria Building Mutation Testing Tools Instrumentation for Graph and Logical Expression Criteria Introduction to Software Testing (Ch 8.1) © Ammann & Offutt 2

Categories of Test Tools Research Private non-commercial Commercial Advanced techniques Generators Very powerful Often code-based Usually incomplete General purpose Moderate techniques Acceptors Mostly complete Some code-based Often special purpose Test management Simple coverage Metrics Code independent Introduction to Software Testing (Ch 8.1) © Ammann & Offutt

Types of Test Tools Coverage analyzers (Acceptors) What coverage ? (most common is node) What level? (sometimes object code) Flow graph generators Metrics Instrumentation support Test execution automation Runs scripts and reports results JUnit, HttpUnit, … Capture / replay Useful for GUIs Stubs and Drivers Test data generators Graph path – based Data flow Logic based Functional Mutation Random Only random test data generators exist Introduction to Software Testing (Ch 8.1) © Ammann & Offutt

Tools Instrumentation The key technology behind many test tools is “instrumentation”

Tools Instrumentation Coverage analysis is measured with instrumentation Instrument : One or more statements inserted into the program to monitor some aspect of the program Must not affect the behavior May affect timing Source level or object code level public int min (int A, B) { int m = A; if (A > B) m = B; } return (m); Mark: “if body is reached” Introduction to Software Testing (Ch 8.1) © Ammann & Offutt

Instrumenting for Statement Coverage Each node is given a unique id # Node # or statement # Create an array indexed by id #s – nodeCover [ ] Insert an instrument at each node nodeCover [ i ] ++; Save nodeCover [ ] after each execution Must accumulate results across multiple test cases Introduction to Software Testing (Ch 8.1) © Ammann & Offutt

Statement Coverage Example int nodeCover[] = {0,0,0,0,0,0,0,0,0,0} Read (nodeCover []) nodeCover [1] ++ 1 nc [3]++ nc [2]++ nc [5]++ nc [4]++ nc [6]++ nc [9]++ nc [7]++ nc [10]++ nc [8]++ After running a sequence of tests, any node for which nodeCover[node] == 0 has not been covered. 2 3 5 4 7 8 6 9 10 Introduction to Software Testing (Ch 8.1) © Ammann & Offutt

Edge Coverage Instrumentation int edgeCover[] = {0,0,0,0,0,0,0,0,0,0,0,0,0} ec [2]++ ec [1]++ Read (edgeCover []) 1 For each edge e, put edgeCover[e]++ on the edge. If edgeCover[e] == 0, e has not been covered. 2 3 ec [3]++ ec [4]++ ec [6]++ ec [5]++ ec [7]++ ec [8]++ ec [10]++ ec [9]++ ec [11]++ 5 4 7 8 6 9 ec [12]++ ec [13]++ Note that the arrays could be boolean 10 Introduction to Software Testing (Ch 8.1) © Ammann & Offutt

CACC Coverage Instrumentation CACC_Mark_1 (A, B) 1 CACC_Mark_1 (A, B) { if (!A) { // Don’t allow short circuit if (B) CACCCover[1]++; } else if (A) CACCCover [2]++; else CACCCover[3]++ } } if (A && B) if (C && (D || E)) 2 3 CACC_Mark_2 (C, D, E) 5 4 A && B CACCCover [ ] F t 1 T t 2 t F 3 t T 6 Introduction to Software Testing (Ch 8.1) © Ammann & Offutt

CACC Coverage Instrumentation (2) CACC_Mark_2 (C, D, E) { if (! C) if (D || E) CACCCover [4]++; } else if (! D) if (! E) CACCCover [6]++; else CACCCover [5]++; CACCCover [8]++; else // C and D CACCCover [7]++; C && (D || E) CC [ ] F 4 T 5 t F f 6 t T f 7 t f F t f T 8 t t t f f t Introduction to Software Testing (Ch 8.1) © Ammann & Offutt

All-Uses Coverage Instrumentation defCover [y] = 2 1 def (x, y) use (x) defCover [x] = 1 defCover [y] = 1 For each variable, keep track of its current def location. def (y) use (y) 2 3 5 4 useCover [5, x, defCover[x]] ++ useCover [4, x, defCover[x]] ++ 6 At each use, increment a counter for the def that reached it. useCover [6, y, defCover[y]] ++ Introduction to Software Testing (Ch 8.1) © Ammann & Offutt

Instrumentation Summary Instrumentation can be added in multiple copies of the program Source code Java byte code (or other intermediate code) Executable Instrumentation must not change or delete functionality Only add new functionality Instrumentation may affect timing behavior Requires the program to be parsed Once parsed, inserting instruments is straightforward Most challenging part is the user interface Present reports as dumps of instrument arrays ? Present tables ? Program source with colored annotations ? Graph of program with colored annotations ? Introduction to Software Testing (Ch 8.1) © Ammann & Offutt