软件测试作业3
软测作业三
Using the following method printPrimes() for questions a-d below
package com.twt.test;
public class Prime {
private static final int MAXPRIMES = 20;
/*******************************************************
* Finds and prints n prime integers
* Jeff Offutt, Spring 2003
******************************************************/
public String printPrimes(int n)
{
int curPrime; // Value currently considered for primeness
int numPrimes; // Number of primes found so far.
boolean isPrime; // Is curPrime prime?
int[] primes = new int[MAXPRIMES]; // The list of prime numbers.
// Initialize 2 into the list of primes.
primes[0] = 2;
numPrimes = 1;
curPrime = 2;
while (numPrimes < n)
{
curPrime++; // next number to consider ...
isPrime = true;
for (int i = 0; i <= numPrimes - 1; i++)
{ // for each previous prime.
if (curPrime % primes[i] == 0)
{ // Found a divisor, curPrime is not prime.
isPrime = false;
break; // out of loop through primes.
}
}
if (isPrime)
{ // save it!
primes[numPrimes] = curPrime;
numPrimes++;
}
} // End while
// Print all the primes out.
StringBuilder builder = new StringBuilder();
for (int i = 0; i <= numPrimes - 1; i++)
{
builder.append(i);
builder.append(" ");
}
return builder.toString();
} // end printPrimes
}
控制流图
问题b
Consider test cases t1=(n=3) and t2=(n=5). Although these tour the same prime paths in ptinrPrimes(), they do not necessarily find the same faults. Design a simple fault that t2 would be more likely to discover than t1 would.
当MAXPRIMES = 3或4时,t2 =(n = 5)将溢出并且t1 =(n = 3)不会。
问题c
For printPrimes(), find a test case such that the corresponding test path visits the edge that connects the beginning of the while statement to the for statement withtout going through the body of the while loop.
当n = 1时,满足要求的边(2,12)。
问题d
Enumerate the test requirements for node coverage, edge coverage, amd prime path coverage for the graph fpr printPrime().
节点覆盖
TR = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};
边覆盖
TR = {(1,2), (2,3), (2,12), (3,4), (4,5), (5,6), (5,9), (6,7), (6,8), (7,5), (8,9)
(9,10), (9,11), (10,11), (11,2), (12,13), (13,14), (13,16), (14,15), (15,13)};
主路径覆盖
TR = {[1,2,3,4,5,6,7], [1,2,3,4,5,6,8,9,10,11], [1,2,3,4,5,6,8,9,11], [1,2,3,4,5,9,10,11],
[1,2,12,13,14,15], [1,2,12,13,16],
[2,3,4,5,6,8,9,10,11,2], [3,4,5,6,8,9,10,11,2,3], [4,5,6,8,9,10,11,2,3,4], [5,6,8,9,10,11,2,3,4,5],
[6,8,9,10,11,2,3,4,5,6], [8,9,10,11,2,3,4,5,6,8], [9,10,11,2,3,4,5,6,8,9], [10,11,2,3,4,5,6,8,9,10],
[11,2,3,4,5,6,8,9,10,11],
[2,3,4,5,6,8,9,11,2], [3,4,5,6,8,9,11,2,3], [4,5,6,8,9,11,2,3,4], [5,6,8,9,11,2,3,4,5],
[6,8,9,11,2,3,4,5,6], [8,9,11,2,3,4,5,6,8], [9,11,2,3,4,5,6,8,9], [11,2,3,4,5,6,8,9,11],
[2,3,4,5,9,10,11,2], [3,4,5,9,10,11,2,3], [4,5,9,10,11,2,3,4], [5,9,10,11,2,3,4,5],
[9,10,11,2,3,4,5,9], [10,11,2,3,4,5,9,10], [11,2,3,4,5,9,10,11],
[2,3,4,5,9,11,2], [3,4,5,9,11,2,3], [4,5,9,11,2,3,4], [5,9,11,2,3,4,5], [9,11,2,3,4,5,9],
[11,2,3,4,5,9,11],
[13,14,15,13], [14,15,13,14], [15,13,14,15],
[5,6,7,5], [6,7,5,6], [7,5,6,7],
[3,4,5,9,11,2,12,13,16], [3,4,5,9,10,11,2,12,13,16], [3,4,5,6,8,9,11,2,12,13,16],
[3,4,5,6,8,9,10,11,2,12,13,16],
[3,4,5,9,11,2,12,13,14,15], [3,4,5,9,10,11,2,12,13,14,15], [3,4,5,6,8,9,11,2,12,13,14,15],
[3,4,5,6,8,9,10,11,2,12,13,14,15],
[6,7,5,9,11,2,3,4], [6,7,5,9,10,11,2,3,4], [6,7,5,9,11,2,12,13,14,15], [6,7,5,9,10,11,2,12,13,14,15],
[6,7,5,9,11,2,12,13,16], [6,7,5,9,10,11,2,12,13,16],
[7,5,6,8,9,11,2,3,4], [7,5,6,8,9,10,11,2,3,4], [7,5,6,8,9,11,2,12,13,14,15],
[7,5,6,8,9,10,11,2,12,13,14,15], [7,5,6,8,9,11,2,12,13,16], [7,5,6,8,9,10,11,2,12,13,16],
[8,9,11,2,3,4,5,6,7], [8,9,10,11,2,3,4,5,6,7],
[14,15,13,16] };
测试样例以及覆盖率
package com.twt.test;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import java.util.Arrays;
import java.util.Collection;
import static org.junit.Assert.*;
@RunWith(Parameterized.class)
public class TestPrime {
private String expected = "";
private Prime testPrime;
private int n;
public TestPrime(int num, String expec) {
n = num;
expected = expec;
}
@Before
public void init() {
testPrime = new Prime();
}
@Test
public void test() {
assertEquals(this.expected, testPrime.printPrimes(this.n));
}
@Parameterized.Parameters
public static Collection<Object[]> getData() {
return Arrays.asList(new Object[][]{
// {2, "2 3 "},
// {3, "2 3 5 "}
{4,"2 3 5 7"}
});
}
}
通过参数化测试来进行多组数据的测试
当仅有 {2, "2 3 "}
的时候
代码覆盖率不能达到100%
加入更多的测试样例
{2, "2 3 "},
{3, "2 3 5 "},
{4,"2 3 5 7"}