software testing and quality assurance syntax-based testing (2)

31
Software Testing and Software Testing and Quality Assurance Quality Assurance Syntax-Based Testing Syntax-Based Testing (2) (2) 1

Upload: asa

Post on 08-Jan-2016

90 views

Category:

Documents


1 download

DESCRIPTION

Software Testing and Quality Assurance Syntax-Based Testing (2). Reading Assignment. P. Ammann and J. Offutt “Introduction to Software Testing” Chapter 5 Section 5.2 Section 5.3. Outline. Program-based Grammars Killing Mutants Coverage Criteria Testing Programs with Mutation - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Software Testing and Quality  Assurance Syntax-Based Testing (2)

Software Testing and Quality Software Testing and Quality AssuranceAssurance

Syntax-Based Testing (2)Syntax-Based Testing (2)

1

Page 2: Software Testing and Quality  Assurance Syntax-Based Testing (2)

Reading AssignmentReading AssignmentP. Ammann and J. Offutt

“Introduction to Software Testing”◦Chapter 5

Section 5.2 Section 5.3

2

Page 3: Software Testing and Quality  Assurance Syntax-Based Testing (2)

3

OutlineOutlineProgram-based Grammars

◦Killing Mutants◦Coverage Criteria

Testing Programs with MutationWhy Mutation Works?Designing Mutation Operators

◦Mutation Operators for JavaIntegration Mutation

Page 4: Software Testing and Quality  Assurance Syntax-Based Testing (2)

4

Program-based GrammarsProgram-based GrammarsThe original and most widely

known application of syntax-based testing is to modify programs

Operators modify a ground string (program under test) to create mutant programs

Mutant programs must compile correctly (valid strings)

Page 5: Software Testing and Quality  Assurance Syntax-Based Testing (2)

5

Program-based GrammarsProgram-based GrammarsMutants are not tests, but used

to find testsOnce mutants are defined, tests

must be found to cause mutants to fail when executed

This is called “killing mutants”

Page 6: Software Testing and Quality  Assurance Syntax-Based Testing (2)

6

Killing MutantsKilling Mutants

If mutation operators are designed well, the resulting tests will be very powerful

Different operators must be defined for different programming languages and goals

Given a mutant m M for a ground string program P and a test t, t is said to kill m if and only if the output of t on P is different from the output of t on m.

Page 7: Software Testing and Quality  Assurance Syntax-Based Testing (2)

7

Killing MutantsKilling MutantsTesters can keep adding tests

until all mutants have been killed◦Dead mutant : A test case has killed

it◦Stillborn mutant : Syntactically illegal◦Trivial mutant : Almost every test

can kill it◦Equivalent mutant : No test can kill it

(equivalent to original program)

Page 8: Software Testing and Quality  Assurance Syntax-Based Testing (2)

8

Program-based GrammarsProgram-based Grammars

Original Method

int Min (int A, int B){ int minVal; minVal = A; if (B < A) { minVal = B; } return (minVal);} // end Min

With Embedded Mutants

int Min (int A, int B){ int minVal; minVal = A;∆ 1 minVal = B; if (B < A)∆ 2 if (B > A)∆ 3 if (B < minVal) { minVal = B;∆ 4 Bomb ();∆ 5 minVal = A;∆ 6 minVal = failOnZero (B); } return (minVal);} // end Min

6 mutants

Each represents a separate program

Replace one variable Replace one variable with anotherwith another

Changes operatorChanges operator

Immediate runtime Immediate runtime failure … if reachedfailure … if reached

Immediate runtime Immediate runtime failure if B==0 else failure if B==0 else does nothing (return does nothing (return the original value)the original value)

Page 9: Software Testing and Quality  Assurance Syntax-Based Testing (2)

9

Coverage CriteriaCoverage Criteria

Strongly Killing MutantsWeakly Killing Mutants

Mutation Coverage (MC)Mutation Coverage (MC) : For each : For each mm MM, TR contains , TR contains exactly one requirement, to kill exactly one requirement, to kill mm..

Page 10: Software Testing and Quality  Assurance Syntax-Based Testing (2)

10

Coverage CriteriaCoverage CriteriaStrongly Killing Mutants

Given a mutant m M for a program P and a test t,

t is said to strongly kill m if and only if the output of t on P is different from the output of t on m

Page 11: Software Testing and Quality  Assurance Syntax-Based Testing (2)

11

Coverage CriteriaCoverage CriteriaWeakly Killing MutantsGiven a mutant m M that modifies a

location l in a program P, and a test t,

t is said to weakly kill m if and only if the state of the execution of P on t is different from the state of the execution of m immediately on t after l

Page 12: Software Testing and Quality  Assurance Syntax-Based Testing (2)

12

Weak MutationWeak Mutation

“Weak mutation” is so named because it is easier to kill mutants under this assumption

Weak mutation also requires less analysis

Some mutants can be killed under weak mutation but not under strong mutation (no propagation)

In practice, there is little difference

Weak Mutation Coverage (WMC)Weak Mutation Coverage (WMC) : For each : For each mm MM, TR , TR contains exactly one requirement, to weakly kill contains exactly one requirement, to weakly kill mm..

Page 13: Software Testing and Quality  Assurance Syntax-Based Testing (2)

13

Equivalent Mutation Equivalent Mutation ExampleExampleMutant 3 in the Min() example is equivalent:

The infection condition is “(B < A) != (B < minVal)”

However, the previous statement was “minVal = A”◦ Substituing, we get: “(B < A) != (B < A)”

Thus no input can kill this mutant

minVal = A; if (B < A)∆ 3 if (B < minVal)

Page 14: Software Testing and Quality  Assurance Syntax-Based Testing (2)

14

Testing Programs with Testing Programs with MutationMutation

Automated Automated stepssteps

Input test method

Prog Create mutants

Run T on P

Run mutants:• schema-based• weak• selective

Eliminate ineffective

TCs

Generate test cases

Run equivalence

detector

Threshold reached

?

Define threshold

no

P (T) correct

?

yesFix P

no

Page 15: Software Testing and Quality  Assurance Syntax-Based Testing (2)

15

Why Mutation Works?Why Mutation Works?

Fundamental Premise of Mutation TestingFundamental Premise of Mutation Testing

If the software contains a fault, there will If the software contains a fault, there will usually be a set of mutants that can only be usually be a set of mutants that can only be killed by a test case that also detects that faultkilled by a test case that also detects that fault

Page 16: Software Testing and Quality  Assurance Syntax-Based Testing (2)

16

Why Mutation Works?Why Mutation Works?This is not an absolute !

The mutants guide the tester to a very effective set of tests

A very challenging problem : ◦ Find a fault and a set of mutation-adequate tests

that do not find the fault

Of course, this depends on the mutation operators …

Page 17: Software Testing and Quality  Assurance Syntax-Based Testing (2)

17

Designing Mutation Designing Mutation OperatorsOperatorsAt the method level, mutation operators

for different programming languages are similar

Mutation operators do one of two things:◦ Mimic typical programmer mistakes

( incorrect variable name )◦ Encourage common test heuristics ( cause

expressions to be 0 )Researchers design lots of operators,

then experimentally select the most useful

Page 18: Software Testing and Quality  Assurance Syntax-Based Testing (2)

18

Designing Mutation Designing Mutation OperatorsOperators

Effective Mutation OperatorsEffective Mutation OperatorsIf tests that are created specifically to kill If tests that are created specifically to kill mutants created by a collection of mutation mutants created by a collection of mutation operators operators OO = { = {o1, o2,o1, o2, …} also kill mutants …} also kill mutants created by all remaining mutation operators with created by all remaining mutation operators with very high probability, then very high probability, then OO defines an effective defines an effective set of mutation operatorsset of mutation operators

Page 19: Software Testing and Quality  Assurance Syntax-Based Testing (2)

19

Mutation Operators for Mutation Operators for JavaJava

Each occurrence of one of the arithmetic operators +, - ,*, / , and % is replaced by each of the other operators. In addition, each is replaced by the special mutation operators leftOp, and rightOp.

2. AOR –– Arithmetic Operator Replacement:

Each arithmetic expression (and subexpression) is modified by the functions abs(), negAbs(), and failOnZero().

1. ABS –– Absolute Value Insertion:

Each occurrence of one of the relational operators (<, ≤, >, ≥, =, ≠) is replaced by each of the other operators and by falseOp and trueOp.

3. ROR –– Relational Operator Replacement:

Page 20: Software Testing and Quality  Assurance Syntax-Based Testing (2)

20

Mutation Operators for Mutation Operators for JavaJava

Each occurrence of one of the logical operators (and - &&, or - || , and with no conditional evaluation - &, or with no conditional evaluation - |, not equivalent - ^) is replaced by each of the other operators; in addition, each is replaced by falseOp, trueOp, leftOp, and rightOp.

4. COR –– Conditional Operator Replacement:

5. SOR –– Shift Operator Replacement:

Each occurrence of one of the shift operators <<, >>, and >>> is replaced by each of the other operators. In addition, each is replaced by the special mutation operator leftOp.

Page 21: Software Testing and Quality  Assurance Syntax-Based Testing (2)

21

Mutation Operators for Mutation Operators for JavaJava

Each occurrence of one of the logical operators (bitwise and - &, bitwise or - |, exclusive or - ^) is replaced by each of the other operators; in addition, each is replaced by leftOp and rightOp.

6. LOR –– Logical Operator Replacement:

Each occurrence of one of the assignment operators (+=, -=, *=, /=, %=, &=, |=, ^=, <<=, >>=, >>>=) is replaced by each of the other operators.

7. ASR –– Assignment Operator Replacement:

8. UOI –– Unary Operator Insertion:

Each unary operator (arithmetic +, arithmetic -, conditional !, logical ~) is inserted in front of each expression of the correct type.

Page 22: Software Testing and Quality  Assurance Syntax-Based Testing (2)

22

Mutation Operators for Mutation Operators for JavaJava

Each unary operator (arithmetic +, arithmetic -, conditional !, logical~) is deleted.

9. UOD –– Unary Operator Deletion:

Each variable reference is replaced by every other variable of the appropriate type that is declared in the current scope.

10. SVR –– Scalar Variable Replacement:

11. BSR –– Bomb Statement Replacement:

Each statement is replaced by a special Bomb() function.

Page 23: Software Testing and Quality  Assurance Syntax-Based Testing (2)

23

Integration and Object-Oriented Integration and Object-Oriented TestingTesting

Integration TestingIntegration Testing

Testing connections among separate program unitsTesting connections among separate program units

In Java, testing the way classes, packages and components are connected◦“Component” is used as a generic

term

Page 24: Software Testing and Quality  Assurance Syntax-Based Testing (2)

24

Integration and Object-Oriented Integration and Object-Oriented TestingTestingThis tests features that are

unique to object-oriented programming languages ◦inheritance, polymorphism and

dynamic bindingIntegration testing is often based

on couplings – ◦the explicit and implicit relationships

among software components

Page 25: Software Testing and Quality  Assurance Syntax-Based Testing (2)

25

Integration MutationIntegration MutationFaults related to component

integration often depend on a mismatch of assumptions◦Callee thought a list was sorted,

caller did not◦Callee thought all fields were

initialized, caller only initialized some of the fields

◦Caller sent values in kilometers, callee thought they were miles

Page 26: Software Testing and Quality  Assurance Syntax-Based Testing (2)

26

Integration MutationIntegration MutationIntegration mutation focuses on

mutating the connections between components◦Sometimes called “interface

mutation”◦Both caller and callee methods are

considered

Page 27: Software Testing and Quality  Assurance Syntax-Based Testing (2)

27

Four Types of Mutation Four Types of Mutation OperatorsOperatorsChange a calling method by modifying

values that are sent to a called method

Change a calling method by modifying the call

Change a called method by modifying values that enter and leave a method◦ Includes parameters as well as variables

from higher scopes (class level, package, public, etc.)

Change a called method by modifying return statements from the method

Page 28: Software Testing and Quality  Assurance Syntax-Based Testing (2)

28

Five Integration Mutation Five Integration Mutation OperatorsOperators

Each parameter in a method call is replaced by each other variable in the scope of the method call that is of compatible type.

1. IPVR –– Integration Parameter Variable Replacement

• This operator replaces primitive type variables as well as objects.

Each expression in a method call is modified by inserting all possible unary operators in front and behind it.

2. IUOI –– Integration Unary Operator Insertion

• The unary operators vary by language and type

Page 29: Software Testing and Quality  Assurance Syntax-Based Testing (2)

29

Five Integration Mutation Five Integration Mutation OperatorsOperators

Each parameter in a method call is exchanged with each parameter of compatible types in that method call.

3. IPEX –– Integration Parameter Exchange

• max (a, b) is mutated to max (b, a)

Each method call is deleted. If the method returns a value and it is used in an expression, the method call is replaced with an appropriate constant value.

4. IMCD –– Integration Method Call Deletion

• Method calls that return objects are replaced with calls to “new ()”

Each expression in each return statement in a method is modified by applying the UOI and AOR operators.

5. IREM –– Integration Return Expression Modification

Page 30: Software Testing and Quality  Assurance Syntax-Based Testing (2)

30

Key Points (1/2)Key Points (1/2)Mutants are not tests, but used

to find testsMutation Coverage Criteria

◦Strong Killing Mutation◦Weak Killing Mutation◦Equivalent Mutation

Designing Mutation Operators

Page 31: Software Testing and Quality  Assurance Syntax-Based Testing (2)

31

Key Points (2/2)Key Points (2/2)Designing Mutation Operators

◦Eleven basic mutation operators for Java

Integration Testing◦Testing connections among separate

program units.Integration Mutation

◦Five integration mutation operators