+ All Categories
Home > Documents > SWE 637: Syntax-based...

SWE 637: Syntax-based...

Date post: 22-Mar-2020
Category:
Upload: others
View: 1 times
Download: 0 times
Share this document with a friend
19
Mutation Testing The original slides are taken from Chap. 9 of Intro. to SW Testing 2 nd ed by Ammann and Offutt Moonzoo Kim School of Computing KAIST
Transcript
Page 1: SWE 637: Syntax-based Testingswtv.kaist.ac.kr/courses/cs492-fall18/part1-coverage/lec11-mutation-testing.pdf · Syntax-Based Coverage Criteria. 5. ... An Analysis and Survey of the

Mutation Testing

The original slides are taken from Chap. 9 of Intro. to SW Testing 2nd ed by Ammann and Offutt

Moonzoo KimSchool of Computing

KAIST

Page 2: SWE 637: Syntax-based Testingswtv.kaist.ac.kr/courses/cs492-fall18/part1-coverage/lec11-mutation-testing.pdf · Syntax-Based Coverage Criteria. 5. ... An Analysis and Survey of the

Mutation Testing

Operators modify a program under test to create mutant programsMutant programs must compile correctly Mutants are not tests, but used to find good tests

Once mutants are defined, tests must be found to cause mutants to fail when executed This is called “killing mutants”

Most slides are taken from the text book “Introduction to Software Testing” by P.Ammann and J.Offutt

Page 3: SWE 637: Syntax-based Testingswtv.kaist.ac.kr/courses/cs492-fall18/part1-coverage/lec11-mutation-testing.pdf · Syntax-Based Coverage Criteria. 5. ... An Analysis and Survey of the

Killing Mutants

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

Different operators must be defined for different programming languages and goals Testers can keep adding tests until all mutants have been killed

Dead mutant : A test case has killed it Trivial mutant : Almost every test can kill it Equivalent mutant : No test can kill it (equivalent to original program) Stubborn mutant: Almost no test can kill it (a.k.a hard-to-kill mutants)

3

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

Page 4: SWE 637: Syntax-based Testingswtv.kaist.ac.kr/courses/cs492-fall18/part1-coverage/lec11-mutation-testing.pdf · Syntax-Based Coverage Criteria. 5. ... An Analysis and Survey of the

Program-based Grammars

4

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 with another

Changes operator

Immediate runtime failure … if reached

Immediate runtime failure if B==0 else does nothing

Page 5: SWE 637: Syntax-based Testingswtv.kaist.ac.kr/courses/cs492-fall18/part1-coverage/lec11-mutation-testing.pdf · Syntax-Based Coverage Criteria. 5. ... An Analysis and Survey of the

Syntax-Based Coverage Criteria

5

Mutation Coverage (MC) : For each m ∈ M, TR contains exactly one requirement, to kill m.

• The RIP model • Reachability : The test causes the faulty statement to be

reached (in mutation – the mutated statement)• Infection : The test causes the faulty statement to result in an

incorrect state• Propagation : The incorrect state propagates to incorrect

output• The RIP model leads to two variants of mutation coverage …

Page 6: SWE 637: Syntax-based Testingswtv.kaist.ac.kr/courses/cs492-fall18/part1-coverage/lec11-mutation-testing.pdf · Syntax-Based Coverage Criteria. 5. ... An Analysis and Survey of the

Strong v.s. Weak Mutants

6

1) Strongly 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

2) Weakly Killing Mutants:Given 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

• Weakly killing satisfies reachability and infection, but not propagation

Page 7: SWE 637: Syntax-based Testingswtv.kaist.ac.kr/courses/cs492-fall18/part1-coverage/lec11-mutation-testing.pdf · Syntax-Based Coverage Criteria. 5. ... An Analysis and Survey of the

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

7

minVal = A;if (B < A)

∆ 3 if (B < minVal)

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

• However, the previous statement was “minVal = A”– Substituting, we get: “(B < A) != (B < A)”– This is a logical contradiction !

• Thus no input can kill this mutant

Page 8: SWE 637: Syntax-based Testingswtv.kaist.ac.kr/courses/cs492-fall18/part1-coverage/lec11-mutation-testing.pdf · Syntax-Based Coverage Criteria. 5. ... An Analysis and Survey of the

Strong Versus Weak Mutation

1 boolean isEven (int X)2 {3 if (X < 0)4 X = 0 - X;∆ 4 X = 0;5 if (double) (X/2) == ((double) X) / 2.06 return (true);7 else8 return (false);9 }

8

Reachability : X < 0

Infection : X != 0

(X = -6) will kill mutant 4 under weak mutation

Propagation :

((double) ((0-X)/2) == ((double) 0-X) / 2.0)

!= ((double) (0/2) == ((double) 0) / 2.0)

That is, X is not even …

Thus (X = -6) does not kill the mutant under strong mutation

Page 9: SWE 637: Syntax-based Testingswtv.kaist.ac.kr/courses/cs492-fall18/part1-coverage/lec11-mutation-testing.pdf · Syntax-Based Coverage Criteria. 5. ... An Analysis and Survey of the

Testing Programs with Mutation

9

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 ?

no

P (T) correct

?yesFix

Pno

Page 10: SWE 637: Syntax-based Testingswtv.kaist.ac.kr/courses/cs492-fall18/part1-coverage/lec11-mutation-testing.pdf · Syntax-Based Coverage Criteria. 5. ... An Analysis and Survey of the

Why Mutation Testing Works

Also known as “Coupling Effect” “a test data set that distinguishes all programs with simple faults is so sensitive that it

will also distinguish programs with more complex faults” R. A. DeMillo, R. J. Lipton, and F. G. Sayward. Hints on test data selection: Help for the practicing

programmer. Computer, 11(4), April 1978.

The mutants guide the tester to an 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 … 10

Fundamental Premise of Mutation Testing

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

Page 11: SWE 637: Syntax-based Testingswtv.kaist.ac.kr/courses/cs492-fall18/part1-coverage/lec11-mutation-testing.pdf · Syntax-Based Coverage Criteria. 5. ... An Analysis and Survey of the

Designing Mutation Operators At 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

11

Effective Mutation OperatorsIf tests that are created specifically to kill mutants created bya collection of mutation operators O = {o1, o2, …} also killmutants created by all remaining mutation operators withvery high probability, then O defines an effective set ofmutation operators

Page 12: SWE 637: Syntax-based Testingswtv.kaist.ac.kr/courses/cs492-fall18/part1-coverage/lec11-mutation-testing.pdf · Syntax-Based Coverage Criteria. 5. ... An Analysis and Survey of the

Mutation Operators

12

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:

Examples:a = m * (o + p);

∆1 a = abs (m * (o + p));∆2 a = m * abs ((o + p));∆3 a = failOnZero (m * (o + p));

Examples:a = m * (o + p);

∆1 a = m + (o + p);∆2 a = m * (o * p);∆3 a = m leftOp (o + p);

Page 13: SWE 637: Syntax-based Testingswtv.kaist.ac.kr/courses/cs492-fall18/part1-coverage/lec11-mutation-testing.pdf · Syntax-Based Coverage Criteria. 5. ... An Analysis and Survey of the

13

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:

Examples:if (X <= Y)

∆1 if (X > Y)∆2 if (X < Y)∆3 if (X falseOp Y) // always returns false

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:

Examples:if (X <= Y && a > 0)

∆1 if (X <= Y || a > 0)∆2 if (X <= Y leftOp a > 0) // returns result of left clause

Page 14: SWE 637: Syntax-based Testingswtv.kaist.ac.kr/courses/cs492-fall18/part1-coverage/lec11-mutation-testing.pdf · Syntax-Based Coverage Criteria. 5. ... An Analysis and Survey of the

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.

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:

Examples:byte b = (byte) 16;b = b >> 2;

∆1 b = b << 2;∆2 b = b leftOp 2; // result is b

Examples:int a = 60; int b = 13;int c = a & b;

∆1 int c = a | b;∆2 int c = a rightOp b; // result is b

Page 15: SWE 637: Syntax-based Testingswtv.kaist.ac.kr/courses/cs492-fall18/part1-coverage/lec11-mutation-testing.pdf · Syntax-Based Coverage Criteria. 5. ... An Analysis and Survey of the

15

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.

Examples:a = m * (o + p);

∆1 a += m * (o + p);∆2 a *= m * (o + p);

Examples:a = m * (o + p);

∆1 a = m * -(o + p);∆2 a = -(m * (o + p));

Page 16: SWE 637: Syntax-based Testingswtv.kaist.ac.kr/courses/cs492-fall18/part1-coverage/lec11-mutation-testing.pdf · Syntax-Based Coverage Criteria. 5. ... An Analysis and Survey of the

16

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

9. UOD –– Unary Operator Deletion:

Examples:if !(X <= Y && !Z)

∆1 if (X > Y && !Z)∆2 if !(X < Y && Z)

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:

Examples:a = m * (o + p);

∆ 1 a = o * (o + p);∆ 2 a = m * (m + p);∆ 3 a = m * (o + o);∆ 4 p = m * (o + p);

Page 17: SWE 637: Syntax-based Testingswtv.kaist.ac.kr/courses/cs492-fall18/part1-coverage/lec11-mutation-testing.pdf · Syntax-Based Coverage Criteria. 5. ... An Analysis and Survey of the

17

11. BSR –– Bomb Statement Replacement:Each statement is replaced by a special Bomb() function.

Example:a = m * (o + p);

∆1 Bomb() // Raises exception when reached

Page 18: SWE 637: Syntax-based Testingswtv.kaist.ac.kr/courses/cs492-fall18/part1-coverage/lec11-mutation-testing.pdf · Syntax-Based Coverage Criteria. 5. ... An Analysis and Survey of the

Summary : Subsumption of Other Criteria

Mutation is widely considered the strongest test criterion And most expensive ! By far the most test requirements (each mutant) Not always the most tests

Mutation subsumes other criteria by including specific mutation operators Subsumption can only be defined for weak mutation – other criteria impose

local requirements, like weak mutation Node coverage Edge coverage Clause coverage All-defs data flow coverage

Reference: An Analysis and Survey of the Development of Mutation Testing by Y.Jia et al.

IEEE Transactions on Software Engineering Volume: 37 Issue: 5 Design Of Mutant Operators For The C Programming Language by H.Agrawal et al.

Technical report

18

Page 19: SWE 637: Syntax-based Testingswtv.kaist.ac.kr/courses/cs492-fall18/part1-coverage/lec11-mutation-testing.pdf · Syntax-Based Coverage Criteria. 5. ... An Analysis and Survey of the

Bug Observability/Detection Model: Reachability, Infection, Propagation, and Revealation (RIPR)

Terminology Fault: static defect in a

program text (a.k.a a bug) Error: dynamic

(intermediate) behavior that deviates from its (internal) intended goal A fault causes an error (i.e.

error is a symptom of fault) Failiure: dynamic

behavior which violates a ultimate goal of a target program Not every error leads to

failure due to error masking or fault tolerance

Graph coverage Test requirement satisfaction == Reachability

the fault in the code has to be reached

Logic coverage Test requirement satisfaction == Infection

the fault has to put the program into an error state. Note that a program is in an error state does not mean

that it will always produce the failure

Mutation coverage Test requirement satisfaction == Propagation

the program needs to exhibit incorrect outputs

Furthermore, test oracle plays critical role to reveal failure of a target program (Revealation)


Recommended