2018软件测试_Homework 3
本次作业是《软件测试基础》2.3的课后习题7,主要是a-d,题目代码如下:
private static 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]); } }
很明显这是一个输出n个质数的函数
a) 画出控制流图

b) 设计一个测试用例t2=(n=5)比t1=(n=3)更容易发现的fault
MAXPRIMES错误地设为4,发生数组越界
c) 找一个测试用例经过连接while开头的边又走到for,但没有经过while的主体
n=1或n=0
d) 枚举节点覆盖,边覆盖,主路径覆盖的测试要求
节点覆盖要求每个节点都经过,并不要求走过每个边,TR={1,2,3,4,5,6,7,8,9,10,11,12}
边覆盖需要将每条边都覆盖,TR={ [1,2],[2,3],[2,4],[3,7],[4,5],[5,6],[5,12],[6,5],[7,9],[7,10],[8,2],[9,2],[10,11],[11,7] }
主路径覆盖就是覆盖所有的主路径,即覆盖所有的不被其他简单路径覆盖的路径,TR={ [1,2,4,5,12],[1,2,4,5,6],[5,6,5],[6,5,6],[1,2,3,7,10,11],[1,2,3,7,9],[1,2,3,7,10,8],[7,10,11,7],[10,11,7,10],[11,7,10,11],[2,3,7,9,2],[3,7,9,2,3],[7,9,2,3,7],[9,2,3,7,9],[2,3,7,10,8,2],[3,7,10,8,2,3],[7,10,8,2,3,7],[10,8,2,3,7,10],[8,2,3,7,10,8] }
e) 基于Junit及Eclemma(jacoco)实现一个主路径覆盖的测试
设计用例t1=(n=3),测试路径为
[1,2,3,7,10,11,7,9,2,3,7,10,8,2,3,7,10,11,7,10,11,7,9,2,4,5,6,5,6,5,6,5,12],
t2=(n=1),测试路径为
[1,2,4,5,6,5,12]
将函数进行一定的调整,改为返回一个整数数组,通过Junit和EclEmma进行测试,具体代码如下:
hw3.java
package printPrimes; public class hw3 { static int MAXPRIMES = 3; public int[] 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]); * } */ return primes; } private static boolean isDivisible(int i, int curPrime) { if (curPrime % i == 0) { return true; } return false; } }
hw3Test.java
package printPrimes; import static org.junit.Assert.*; import org.junit.After; import org.junit.Before; import org.junit.Test; import printPrimes.hw3;; public class hw3Test { hw3 t; @Before public void setUp() throws Exception { t = new hw3(); } @After public void tearDown() throws Exception { } @Test public void test() { int a[] = new int[] { 2, 3, 5 }; assertArrayEquals(a, t.printPrimes(3)); } }
由于进行数组的比较,因此每次测试MAXPRIMES都要做相应的调整,测试结果如下:
n=1:

n=3:

源码地址:
https://github.com/jingranburangyongzhongwen/st_hw3

浙公网安备 33010602011771号