2017软件测试第三次作业
Use the following method printPrimes() for questions a–d.
(a) printPrimes() 控制流图
(b)考虑测试用例t1=(n=3)和t2=(n=5)。即使这些测试用例游历printPrimes()方法中相同的主路径,他们不一定找出相同的错误。设计一个简单的错误,使得t2比t1更容易发现。
答:将while(numPrimes<n)改成(while(numPrimes<4)使其越界。
(c)针对printPrimes(),找到一个测试用例,使用相同的测试路径访问连接while语句开始到for语句的边,而不能通过while循环体。
答:t3=(n=1);
(d)针对printPrimes()的图例举每个节点覆盖,边覆盖和主路径覆盖的测试需求。
答:
1:节点覆盖:TR={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}
2:边覆盖:TR={(1,2),(2,3),(3,4),(4,5),(5,6),(6,7),(5,7),(7,4),(7,8),(8,9),(7,9),(9,2),(9,15),(2,10),(10,11),(10,12),(11,13),(12,14),(13,14),(14,15)}
,
3:主路径覆盖:TR={[4,5,7,4],[5,7,4,5],[7,4,5,7],[4,5,6,7,4],
[5,6,7,4,5],[7,4,5,6,7],[6,7,4,5,6],[2,3,4,5,6,7,8,9,2],[2,3,4,5,6,7,9,2],[2,3,4,5,7,8,9,2],[2,3,4,5,7,9,2],[3,4,5,6,7,8,9,2,3],[3,4,5,6,7,9,2,3],[3,4,5,7,8,9,2,3],[3,4,5,7,9,2,3],[4,5,6,7,8,9,2,3,4],[4,5,6,7,9,2,3,4],
[4,5,7,8,9,2,3,4],[4,5,7,9,2,3,4],[5,6,7,8,9,2,3,4,5],[5,7,8,9,2,3,4,5],[5,6,7,9,2,3,4,5],[5,7,9,2,3,4,5],[6,7,8,9,2,3,4,5,6],[6,7,9,2,3,4,5,6],
[7,8,9,2,3,4,5,6,7],[7,9,2,3,4,5,6,7],[7,8,9,2,3,4,5,7],[7,9,2,3,4,5,7],
[8,9,2,3,4,5,6,7,8],[8,9,2,3,4,5,7,8],[9,2,3,4,5,6,7,8,9],[9,2,3,4,5,7,8,9],[9,2,3,4,5,7,9],[9,2,3,4,5,7,9][1,2,3,4,5,6,7,8,9,15],
[1,2,3,4,5,7,8,9,15],[1,2,3,4,5,6,7,9,15],[1,2,3,4,5,7,9,15],
[1,2,10,11,12,14,15],
[1,2,10,11,13,14,15],
基于Junit及Eclemma(jacoco)实现一个主路径覆盖的测试。(代码及测试结果)
package java1; public class Switch { public static String printPrimes (int n) { int MAXPRIMES = 10; 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 (curPrime%primes[i]==0) { isPrime = false; break; } } if (isPrime) { primes[numPrimes] = curPrime; numPrimes++; } } String s = null; for (int i = 0; i <= numPrimes-1; i++) { System.out.println ("Prime: " + primes[i]); s += primes[i]; } return s; } }
package java1; import static org.junit.Assert.*; import org.junit.Before; import org.junit.Test; import java1.Switch; import org.junit.Test; public class SwitchTest { public Switch prime; @Before public void setUp(){ prime = new Switch(); } @Test public void testCase(){ assertEquals("null235711", prime.printPrimes(5)); } }