软件测试第三次作业 主路径覆盖测试
需测试代码如下
/******************************************************* * Finds and prints n prime integers * Jeff Offutt, Spring 2003 ******************************************************/ public static void 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 (isDivisible(primes[i], curPrime)) { // 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. for (int i = 0; i <= numPrimes-1; i++) { System.out.println ("Prime: " + primes[i]); } } // end printPrimes
(a)Draw the control flow graph for the printPrime() method.

(b)Consider test cases t1 = (n = 3) and t2 = ( n = 5). Although these tour the same prime paths in printPrime(), they don't necessarily find
the same faults. Design a simple fault that t2 would be more likely to discover than t1 would.
数组越界错误即可,MAXPRIMES = 4时会出现数组越界
(c)For printPrime(), 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 without going through the body of the while loop.sd
while 和 for 循环 相连的路径是(2,12)
(d) Enumerate the test requirements for node coverage, edge coverage,and prime path coverage for the path for printPrimes().
节点覆盖:{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}
边覆盖:{(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)}
主路径覆盖:{(1,2,3,4,5,6,7), (1,2,3,4,5,6,8,9,11), (1,2,3,4,5,6,8,9,10,11), (1,2,3,4,5,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), (2,3,4,5,6,8,9,11,2), (2,3,4,5,9,10,11,2), (2,3,4,5,9,11,2)
(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), (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,9,11,2,12,13,16), (3,4,5,9,10,11,2,12,13,16),
(5,6,7,5),
(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),
(14,15,13,16), (13,14,15,13) }
*使用junit构建主路径覆盖的测试:
代码:
package mytest; public class Triangle { private static String result; // 储存结果 public void isWhat(int a,int b,int c) { if(a+b<=c||a+c<=b||b+c<=a) result="not a triangle"; //边长不合理 else if(a==b && b==c ) result="equilateral"; //等边 else if((a==b && a!=c)||(a==c && a!=b)||(b==c && a!=c)) result="isosceles"; //等腰 else if(b!=c && a!=c && a!=b) result="scalene"; //不等边 } public void clear() { result=null; } public String getResult() { return result; } }
测试代码:
package mytest; import static org.junit.Assert.*; import org.junit.Before; import org.junit.Test; public class TriangleTest { private static Triangle mytri = new Triangle(); @Before public void setUp() throws Exception { mytri.clear(); } @Test public void testIsWhat1() {//边长不合理测试 mytri.isWhat(2, 1, 11); assertEquals("not a triangle", mytri.getResult()); } @Test public void testIsWhat2() {//等边测试 mytri.isWhat(1, 1, 1); assertEquals("equilateral", mytri.getResult()); } @Test public void testIsWhat3() {//等腰测试 mytri.isWhat(1, 2, 2); assertEquals("isosceles", mytri.getResult()); } @Test public void testIsWhat4() {//不等边测试 mytri.isWhat(3, 4, 2); assertEquals("scalene", mytri.getResult()); } }
结果如下:


浙公网安备 33010602011771号