计算机代写|COM3529: Assignment 2
这是一篇来自英国的计算机作业代写
1 Introduction
This assignment concerns mutation testing. You should submit your answers as a PDF document via the Assessment page of the COM3529 module on Blackboard. The deadline for this work to be handed in is Friday 31st March, 3pm.
2 Question 1
Consider the fragment of code below. All variables are integer inputs.
if (a==b) {
if (x>y) {
if (x>=z) {
if (x==z) x=x+1;
}}}
else
y=y+1;
if (q==r)
x=y;
else
y=x;
- (10 marks) Design a set of mutants such that if all mutants are killed then the test suite must have achieved 100% statement coverage.
- (10 marks) Design a set of mutants such that if all mutants are killed then the test suite must have achieved 100% branch coverage.
- (20 marks) Are your sets of mutants minimal (ie no set with fewer mutants is suffiffifficient)? Justify your answer and, if not, produce minimal sets.
- (20 marks) Defifine three equivalent mutants for the code.
- (10 marks) Defifine three stubborn mutants (mutants that are not equivalent but are killed by relatively few inputs). Ideally make these the most stubborn (the most diffiffifficult non-equivalent mutants to kill) that you can think of.
- (10 marks) Find test input data to kill these stubborn mutants.
3 Question 2
Consider the following fragment of code in which three integer variables act as input (x, y, and z) and output is a method that outputs its parameter. The fragment of code checks whether the values for x, y, and z are increasing (in this order), decreasing, or unordered.
if (x>y && y>z)
output(“increasing”);
else if (x<y && y<z)
output(“decreasing”);
else
output(“unordered”);
In the following, you will need to explore the notion of multiple-condition coverage. This is a strictly stronger coverage criterion than branch coverage that aims to test the contribution that the individual conditions make. To see how multiple condition coverage works, consider a predicate (decision) in which there are two atomic predicates (conditions). The following is an example.
if (x>0 && y>0) z=1;
Here there is a decision x>0 && y>0 and the decision contains two conditions: x>0 and y>0. For branch coverage, it would be suffiffifficient to have one test case in which x>0 && y>0 evaluates to true and one under which it evaluates to false. Under multiple-condition coverage we instead require that tests cover all four combinations of truth values for the two conditions. We therefore require:
- A test case where, when execution reaches the if statement, x>0 is true and y>0 is true.
- A test case where, when execution reaches the if statement, x>0 is true and y>0 is false.
- A test case where, when execution reaches the if statement, x>0 is false and y>0 is true.
- A test case where, when execution reaches the if statement, x>0 is false and y>0 is false.
There is only one part to this question:
- (20 marks) Design a set of mutants such that if all mutants are killed then the test suite must have achieved 100% multiple-condition coverage.