Software Testing. Jeffrey Carver University of Alabama. April 7, 2016

Similar documents
Test Case Design Techniques

Test case design techniques I: Whitebox testing CISS

Introduction to Computers and Programming. Testing

Software Testing. Definition: Testing is a process of executing a program with data, with the sole intention of finding errors in the program.

Test case design techniques I: Whitebox testing CISS

Test Design: Functional Testing

Test case design techniques II: Blackbox testing CISS

Standard for Software Component Testing

Software Engineering. Software Testing. Based on Software Engineering, 7 th Edition by Ian Sommerville

Optimizations. Optimization Safety. Optimization Safety. Control Flow Graphs. Code transformations to improve program

Selecting Software Testing Criterion based on Complexity Measurement

Software Testing. Quality & Testing. Software Testing

CS 141: Introduction to (Java) Programming: Exam 1 Jenny Orr Willamette University Fall 2013

A Formal Model of Program Dependences and Its Implications for Software Testing, Debugging, and Maintenance

Introduction to Software Testing Chapter 8.1 Building Testing Tools Instrumentation. Chapter 8 Outline

Testing LTL Formula Translation into Büchi Automata

A Static Analyzer for Large Safety-Critical Software. Considered Programs and Semantics. Automatic Program Verification by Abstract Interpretation

Software testing. Objectives

Different Approaches to White Box Testing Technique for Finding Errors

Debugging. Common Semantic Errors ESE112. Java Library. It is highly unlikely that you will write code that will work on the first go

Dataflow approach to testing Java programs supported with DFC

Static Analysis. Find the Bug! : Analysis of Software Artifacts. Jonathan Aldrich. disable interrupts. ERROR: returning with interrupts disabled

Test Case Design Using Classification Trees

J a v a Quiz (Unit 3, Test 0 Practice)

Designing with Exceptions. CSE219, Computer Science III Stony Brook University

1 Description of The Simpletron

Introduction to Data-flow analysis

Programming Languages CIS 443

Translating to Java. Translation. Input. Many Level Translations. read, get, input, ask, request. Requirements Design Algorithm Java Machine Language

Module 10. Coding and Testing. Version 2 CSE IIT, Kharagpur

Static Program Transformations for Efficient Software Model Checking

Relational Databases

9 Control Statements. 9.1 Introduction. 9.2 Objectives. 9.3 Statements

Scan-Line Fill. Scan-Line Algorithm. Sort by scan line Fill each span vertex order generated by vertex list

Software Engineering. Software Development Process Models. Lecturer: Giuseppe Santucci

National University of Ireland, Maynooth MAYNOOTH, CO. KILDARE, IRELAND. Testing Guidelines for Student Projects

Efficiency of algorithms. Algorithms. Efficiency of algorithms. Binary search and linear search. Best, worst and average case.

2.3 WINDOW-TO-VIEWPORT COORDINATE TRANSFORMATION

Lecture 17 : Equivalence and Order Relations DRAFT

ISTQB Certified Tester. Foundation Level. Sample Exam 1

Logistics. Software Testing. Logistics. Logistics. Plan for this week. Before we begin. Project. Final exam. Questions?

The SPES Methodology Modeling- and Analysis Techniques

JavaScript: Control Statements I

MIDTERM 1 REVIEW WRITING CODE POSSIBLE SOLUTION

EVALUATING METRICS AT CLASS AND METHOD LEVEL FOR JAVA PROGRAMS USING KNOWLEDGE BASED SYSTEMS

Lecture 2 Introduction to Data Flow Analysis

Why? A central concept in Computer Science. Algorithms are ubiquitous.

SOFTWARE TESTING. A Craftsmcm's Approach THIRD EDITION. Paul C. Jorgensen. Auerbach Publications. Taylor &. Francis Croup. Boca Raton New York

Temporal Logics. Computation Tree Logic

Symbol Tables. Introduction

Reducing Clocks in Timed Automata while Preserving Bisimulation

Chapter 13: Query Processing. Basic Steps in Query Processing

Chapter 8 Software Testing

Getting the Most Out of Synthesis

Chapter 3. Cartesian Products and Relations. 3.1 Cartesian Products

Module 10. Coding and Testing. Version 2 CSE IIT, Kharagpur

A Model-driven Approach to Predictive Non Functional Analysis of Component-based Systems

First Java Programs. V. Paúl Pauca. CSC 111D Fall, Department of Computer Science Wake Forest University. Introduction to Computer Science

So let us begin our quest to find the holy grail of real analysis.

Formal Languages and Automata Theory - Regular Expressions and Finite Automata -

Review; questions Discussion of Semester Project Arbitrary interprocedural control flow Assign (see Schedule for links)

Tool-Assisted Unit-Test Generation and Selection Based on Operational Abstractions

1 White-Box Testing by Stubs and Drivers

6.852: Distributed Algorithms Fall, Class 2

A binary search tree or BST is a binary tree that is either empty or in which the data element of each node has a key, and:

APPROACHES TO SOFTWARE TESTING PROGRAM VERIFICATION AND VALIDATION

What is a Loop? Pretest Loops in C++ Types of Loop Testing. Count-controlled loops. Loops can be...

Regression Verification: Status Report

Introduction to Java

Lecture 17: Testing Strategies" Developer Testing"

Comparing the Effectiveness of Penetration Testing and Static Code Analysis

Programming by Contract. Programming by Contract: Motivation. Programming by Contract: Preconditions and Postconditions

An Analysis on Objectives, Importance and Types of Software Testing

Outline. 1 Denitions. 2 Principles. 4 Implementation and Evaluation. 5 Debugging. 6 References

[Refer Slide Time: 05:10]

Automatic Test Data Synthesis using UML Sequence Diagrams

6.080/6.089 GITCS Feb 12, Lecture 3

MapReduce. MapReduce and SQL Injections. CS 3200 Final Lecture. Introduction. MapReduce. Programming Model. Example

Lecture Notes on Linear Search

ALGEBRA. sequence, term, nth term, consecutive, rule, relationship, generate, predict, continue increase, decrease finite, infinite

5. A full binary tree with n leaves contains [A] n nodes. [B] log n 2 nodes. [C] 2n 1 nodes. [D] n 2 nodes.

Sudoku puzzles and how to solve them

Form Validation. Server-side Web Development and Programming. What to Validate. Error Prevention. Lecture 7: Input Validation and Error Handling

Exercises for Design of Test Cases

Modeling Guidelines Manual

Measuring the Performance of an Agent

Guide to Performance and Tuning: Query Performance and Sampled Selectivity

Embedded Systems. Review of ANSI C Topics. A Review of ANSI C and Considerations for Embedded C Programming. Basic features of C

SYSM 6304: Risk and Decision Analysis Lecture 5: Methods of Risk Analysis

Unit 6. Loop statements

Transcription:

Software Testing Jeffrey Carver University of Alabama April 7, 2016

Warm-up Exercise Software testing Graphs Control-flow testing Data-flow testing Input space testing Test-driven development

Introduction

Goal of Testing Cannot ensure code is defect-free Can increase confidence in correctness Often neglected because of lack of time or lack of funding dangerous situation Various ways to approach testing and define test cases

What to Test Functional (Black Box) External behavior User-observable behavior Focus: reducing the chances of a target user encountering a functional problem Structural (White Box) Internal structure Correct implementation Focus: reducing internal faults so the software is less likely to fail in an unknown situation

When to Stop Testing Can use coverage criteria Assumption: higher coverage à fewer remaining defects Functional or Structural Reliability Goals Can be more objective Measures what users are likely to encounter Can be tailored for anticipated user groups

Definitions Human Error Mistake in the human mental process that leads to a problem in the software or software artifacts Software Fault A static defect in the software Software Error An incorrect internal state that is the manifestation of some fault Software Failure External, incorrect behavior with respect to the requirements or other description of the expected behavior

A Concrete Example public static int numzero (int[] arr) { //Effects: if arr is null throw NullPointerException // else return the number of occurrences of 0 in arr int count = 0; for (int i = 1; i < arr.length; i++) if(arr[i] == 0) count++; return count; } Human Error: Developer misunderstood language syntax Error: i is 1, not 0, on first iteration Failure: none Test 1 [2, 7, 0] Fault: Should start searching at 0, not 1 Error: i is 1, not 0, on first iteration Error propagates to variable count Failure: count is 0 at the return statement Test 2 [0, 2, 7]

Testing and Debugging Testing: Evaluating software by observing its execution Test Failure: Execution of a test that results in a software failure Debugging: The process of finding a fault, given a failure Not all inputs will trigger a fault into causing a failure

Conditions Necessary for Failure Reachability The location or locations in the program that contain the fault must be reached Infection The state of the program must be incorrect Propagation The infected state must cause some output or final state of the program to be incorrect

Test Requirements and Criteria Test Criterion: A collection of rules and a process that define test requirements Cover every statement Cover every functional requirement Test Requirement: Specific things that must be satisfied or covered during testing Each statement is a test requirement Each functional requirement is a test requirement All criteria based on four types of structures Graphs Logical Expressions Input Domains Syntax Descriptions

Test Design Criteria-Based Design test values to satisfy coverage criteria or other engineering goal Human-Based Design test values based on domain knowledge of the program and human knowledge of testing

Changing Notion of Testing Old approach Black-box -- White-box Testing each phase differently New approach Based on structures and criteria Define a model of the software find ways to cover it Test design is largely the same at each phase Model is different Choosing the values is different

Covering Graphs

Graphs Most commonly used structure for testing Many sources Control flow Design structures FSM / statecharts Use Cases Tests usually intended to cover the graph in some way

Graphs: Definition A non-empty set N of nodes A non-empty set of N o of initial nodes A non-empty set N f of final nodes A set E of edges from one node to another (ni,nj) i is predecessor j is successor

Graphs: Paths Path: A sequence of nodes [n 1, n 2, n x ] Length: Number of edges Subpath: A subsequence of nodes Reach(n): Subgraph that can be reached from n

Graphs: Visiting and Touring Visit: A test path p visits node n if n is in p A test path p visits edge e if e is in p Tour: A test path p tours subpath q if q is a subpath of p Path: 1, 2, 4, 5, 7 Visits nodes? Visits edges? Tours subpaths?

Graphs: Test Paths Starts at an initial node and ends at a final node Represents test case execution Some can be executed by many tests Some cannot be executed by any tests SESE graphs: All test paths start at single node and end at another node Single-entry, single-exit

Graphs: Testing and Covering Using graphs for testing Develop graph of software Require tests to visit or tour specific nodes, edges, or subpaths Test Requirements (TR): Describe properties of test paths, i.e. a set of test requirements (tr) Test Criterion (C): Rules that define TR Satisfaction: Given TR for C, a set of tests T satisfies C iff for every tr in TR, there is a path(t) that meets tr

Graphs: Types of Coverage Node Coverage (NC): TR contains each reachable node in G Edge Coverage (EC): TR contains each reachable path of length 1 in G Edge-Pair Coverage (EPC): TR contains each reachable path of up to 2 in G Complete Path Coverage (CPC): TR contains all paths in G Specified Path Coverage (SPC): TR contains a set S of test paths, where S is supplied as a parameter

Example Node Coverage Edge Coverage Edge-Pair Coverage Complete Path Coverage

Coverage Challenges Loops All loops should be executed All loops should be skipped Sidetrips Leave a path and return to the same node Detours Leave a path and return to the successor node Infeasible Test Requirements

Control-Flow Testing

Control-Flow Graph Nodes: statements or sequences of statements Edges: transfers of control Basic blocks: sequence of statements without branches Control structures: if, while, for,.

If Statement if (x < y) { y = 0; x = x + 1; } else { x = y; } y = 0 x = x + 1 x < y 1 2 3 4 x >= y x = y x < y if (x < y) { y = 0 x = x + 1 2 y = 0; x = x + 1; } 3 1 x >= y

Loops x = 0; while (x < y) { y = f (x, y); x = x + 1; } x = 0 x < y 3 1 2 y =f(x,y) x = x + 1 x >= y 4 dummy node for (x = 0; x < y; x++) { y = f (x, y); } implicitly initializes loop y = f (x, y) x = 0 x < y 1 2 3 5 4 x >= y x = x + 1 implicitly increments loop

Example Using the code on the handout Draw a control-flow graph

public static void computestats (int [ ] numbers) { int length = numbers.length; double med, var, sd, mean, sum, varsum; sum = 0; for (int i = 0; i < length; i++) { sum += numbers [ i ]; } med = numbers [ length / 2]; mean = sum / (double) length; Example 1 2 3 } varsum = 0; for (int i = 0; i < length; i++) { varsum = varsum + ((numbers[i]- mean) * (numbers[i] - mean)); } var = varsum / ( length - 1.0 ); sd = Math.sqrt ( var ); System.out.println ("length: " + length); System.out.println ("mean: " + mean); System.out.println ("median: " + med); System.out.println ("variance: " + var); System.out.println ("standard deviation: " + sd); 4 7 5 6 8

Coverage 1 2 3 Node? Edge? 4 5 6 7 8

Extensions Design elements Nodes are units/methods Edges are calls to units Specifications Finite State Machines Models of behavior

Data-Flow Testing

Data Flow Criteria Goal: Ensure that values are computed and used correctly Definition (def): value for variable stored in memory Use: variable s value is accessed X = 42 Z = X*2 Defs: def(1) = {X} def(5) = {Z} def(6) = {Z} Z = X-8 Uses use(5) = {X} use(6) = {X} The value given in defs should reach at least one, some, or all possible uses

DU Pairs and DU Paths def(n): set of variables defined by node n use(n): set of variables used by node n DU Pair: pair of locations (l1, l2) such that variable v is defined at l1 and used at l2 Def-clear: path from l1 to l2 is def-clear w/r/t v, if v does not receive another value on any node or edge on the path Reach: if path from l1 to l2 is def-clear w/r/t v, then the def of v at l1 reaches the use at l2 du-path: simple subpath that is def-clear w/r/t v from def v to use of v du(n1,n2,v): set of du-paths from n1 to n2 du(n1,v): set of du-paths that start at n1

Defs and Uses Def: location where value is stored LHS of assignment statement Actual parameter in a method call that changes its value Formal parameter of a method (implicit def when method starts) Input to program Use: location where value is accessed RHS of assignment statement In a conditional test Actual parameter to a method Output of program Output of a method in a return statement

Touring DU-Paths Test path p du-tours subpath d w/r/t v if p tours d and d is def-clear w/r/t v Three criteria All-defs coverage: Every def reaches a use All-uses coverage: Every def reache all uses All-du-path-coverage: All paths between def and uses X = 42 Z = X*2 All-defs (x): All-uses (x): All du-paths: [1,2,4,5] [1,2,4,5], [1,2,4,6] [1,2,4,5], [1,2,4,6] [1,3,4,5], [1,3,4,6] Z = X-8

Example Use code and graph from before Label each node in the graph with the defs and uses

Example DU Pairs? - numbers - length - med - var - sd - mean - sum - varsum - i Convert DU Pairs into test paths 4 1 2 3 def(1) = {numbers, sum, length} def(2) = {i} use(3,4) = {I, length} def(4) = {sum,i} use(4) = {sum,numbers,i} use(3,5) = {I, length} 5 def(5) = {med,mean,varsum,i} use(5) = {nymbers,length,sum} def(7) = {varsum,i} 7 use(7) = {varsum,numbers,i,mean} 6 use(6,8) = {i,length) use(6,7) = {i,length) 8 def(8) = {var,sd} use(8) = {varsum,length,mean,med,var,sd

Extensions Similar to Control Flow Design Def-use might be in different methods Interested last-def and first-use pairs

Input Space Testing

Overview Input domain all possible inputs Maybe infinite Testing is about choosing finite set Input parameters define scope of input domain Parameters to a method Data from a file Global variables User inputs Input Space Partitioning Partition domain for each input parameter Choose at least one value from each region

Benefits Can be applied at several levels Unit Integration System Relatively easy to apply with no automation Easy to adjust to choose more or fewer test cases Requires no implementation knowledge, only knowledge of input space

Partitioning Domains Partition divide domain into blocks Disjointness blocks must not overlap Completeness blocks must cover space b 1 b 2 b 3

Using Partitions Each value assumed to be equally useful for testing Testing Find a characteristic in data Partition each characteristic Choose tests by combining values from characteristics Example characteristics Input X is null Order of input file F (sorted, not sorted, ) Min separation between two aircraft Input devide (DVD, CD, computer, )

Choosing Partitions May seem easy, but easy to get wrong Consider characteristic: Order of file F Choose b 1 = sorted in ascending order b 2 = sorted in descending order b 3 = not sorted Is there a problem? What about a file size of 1? Fits all 3 partitions Solution? Each characteristic should address only 1 property Characteristic 1 = File is sorted ascending b 1 = true b 2 = false Characteristic 2 = File is sorted descending b 1 = true b 2 = false

Input Domain Modeling: Steps Step 1: Identify testable functions Step 2: Find all parameters Step 3: Model input domain Step 4: Apply test criteria Step 5: Choose test inputs

Input Domain Modeling: Approaches Interface-based Simpler approach Syntactic view of program Characteristics correspond to individual input parameters in isolation Partially automatable Ignores relationships among parameters Functionality-based More difficult requires design effort Behavioral view of program Based on requirements rather than syntax May result in (fewer) better tests Characteristics correspond to functionality Can incorporate relationship among parameters

Input Domain Modeling: Steps 1 & 2 Identify testable functions & find all parameters Candidates for characteristics Preconditions/postconditions Variable relationships Each other Special values (e.g. 0, null, ) Does not use program source Better to have more characteristics with fewer blocks

Input Domain Modeling: Steps 1 & 2 public boolean findelement(list list, Object element) // Effects: if list or element is null throw NullPointerException // else return true if element is in the list, false otherwise Functionality-Based Approach Interface-Based Approach Two parameters: list, element Characteristics: list is null (b 1 = T, b 2 = F) list is empty (b 1 = T, b 2 = F) Two parameters: list, element Characteristics: number of occurrences of element in list (0, 1, >1) element occurs first in the list (T, F) element occurs last in the list (T, F)

Input Domain Modeling: Step 3 Model Input Domain Partitions flow directly from Steps 1 & 2 Creative design activity to decide balance between #characteristics and #blocks Strategies for identifying values Valid/invalid/special values Sub-partition some blocks Domain boundaries normal use Try to balance the number of blocks/characteristic Check for completeness/disjointness

Input Domain Modeling: Step 3 Model Input Domain Using Trityp code on handout Method Triag Interface-based 1 Testable function, 3 integer inputs Max of 3*3*3 = 27 tests Some triangles are invalid Refine Characteristic b 1 b 2 b 3 q 1 = Relation of Side 1 to 0 Greater than 0 Equal to 0 Less than 0 q 2 = Relation of Side 2 to 0 Greater than 0 Equal to 0 Less than 0 q 3 = Relation of Side 3 to 0 Greater than 0 Equal to 0 Less than 0 Characteristic b 1 b 2 b 3 b 4 q 1 = Refinement of q 1 Greater than 1 Equal to 1 Equal to 0 Less than 0 q 2 = Refinement of q 2 Greater than 1 Equal to 1 Equal to 0 Less than 0 q 3 = Refinement of q 3 Greater than 1 Equal to 1 Equal to 0 Less than 0

Input Domain Modeling: Step 3 Model Input Domain Functionality-Based Behavior is about identifying valid triangles Characteristic b 1 b 2 b 3 b 4 Triangle (4, 5, 6) (3, 3, 4) (3, 3, 3) (3, 4, 8) Another approach: Break geometric characterization into 4 separate characteristics Characteristic b 1 b 2 q 1 = Scalene True False q 2 = Isosceles True False q 3 = Equilateral True False q 4 = Valid True False

Input Domain Modeling: Steps 4 & 5 Choosing Combinations of Values Criteria All Combinations all combinations, all blocks Each choice one value from each block Pair-wise each block/each characteristic with every block/every other characteristic t-wise each block for each group of t characteristics Base choice choose a base block for each characteristic; combine all bases; hold all but one base constant Most obvious is All Combinations Some combinations are not possible

References Much of the material in the slides has been adapted from: Introduction to Software Testing, Amman and Offutt

Software Testing Jeffrey Carver University of Alabama carver@cs.ua.edu April 7, 2016