1.为printPrimes()方法画控制流图:
2.设计测试用例使得t2比t1更容易发现:
令MAXPRIMES=4,运行t2会数组越界而t1不会。
3.设计测试用例使得相应测试路径不经过while循环体:
需满足numPrimes>n,可令n=1。
4.列举节点覆盖,边覆盖,主路径覆盖的测试需求:
节点覆盖:{1 , 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
边覆盖:{(1,2),(2,3),(3,4),(4,5),(5,6),(6,8),(8,5),(6,7),(7,9),(5,9),
(9,10),(9,11),(10,11),(11,2),(2,12),(12,13),(13,14),(14,15),(15,13),(13,16)};
主路径覆盖:{(1,2,3,4,5,6,8),(1,2,3,4,5,6,7,9,10,11),(1,2,3,4,5,6,7,9,11),
(1,2,3,4,5,9,11),(1,2,3,4,5,9,10,11),(5,6,8,5),(6,8,5,6),(8,5,6,8),
(8,5,6,7,9,11),(8,5,6,7,9,10,11),(1,2,12,13,16),(1,2,12,13,14,15),(13,14,15,13),
(14,15,13,14),(15,13,14,15),(14,15,13,16),(15,13,16)}。
5.基于Junit及Eclemma( jacoco)实现一个主路径覆盖的测试。
编写测试类和被测试类:
MPCtest.java:
package hm3;
public class MPCtest {
private static final int MAXPRIMES = 100;
public void printPrimes(int n){
int curPrime;
int numPrimes;
boolean isPrime;
int [] primes = new int [MAXPRIMES];
primes[0]=2;
numPrimes = 1;
curPrime = 2;
while ( numPrimes < n)
{
curPrime ++ ;
isPrime = true;
for ( int i = 0 ; i <= numPrimes-1 ;i++){
if (isDivisible(primes[i],curPrime))
{
isPrime = false;
break ;
}
}
if (isPrime){
primes[numPrimes] = curPrime ;
numPrimes ++ ;
}
}
for (int i = 0 ; i <= numPrimes -1 ; i++ )
{
System.out.println("Prime: " + primes[i]);
}
}
private boolean isDivisible(int x, int y ) {
if ( y % x == 0 )
return true;
else
return false;
}
}
Junit_test.java:
package hm3;
import static org.junit.Assert.*;
import org.junit.Before;
import org.junit.Test;
public class Junit_test {
private MPCtest t= null;
@Before
public void setUp() throws Exception {
t = new MPCtest();
}
@Test
public void test() {
t.printPrimes(5);
}
}
测试结果截图: