软件测试(四)主路径覆盖hw3
原题中代码
/******************************************************* * 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
控制流图
b:数组越界即可,当MAXPRIMES == 4时,n=5会引发越界
c:
n= 1时,不满足numPrimes<n,所以指向12
d:
点覆盖{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), (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), (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), (5,6,7,5), (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)
}
设计主路径覆盖
第一次试验中的三角形已完成完全覆盖
Tri类
package stlab1; public class Tri { public static String isTri(double a,double b,double c) { if (b >= a && b >= c) { double temp = b; b = a; a = temp; } if (c >= a && c >= b) { double temp = c; c = a; a = temp; } if (b + c <= a) return "不是三角形"; if (a == b && b == c) return "等边三角形"; if (a == b || b == c || a == c) { return "等腰三角形"; } if (a * a == b * b + c * c) return "直角三角形"; return "一般三角形"; } }
test类
package stlab1; import static org.junit.Assert.*; import org.junit.After; import org.junit.AfterClass; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; public class TriTest { @BeforeClass public static void setUpBeforeClass() throws Exception { } @AfterClass public static void tearDownAfterClass() throws Exception { } @Before public void setUp() throws Exception { } @After public void tearDown() throws Exception { } @Test public void test() { Tri tri = new Tri(); assertEquals("等边三角形",tri.isTri(1, 1, 1)); assertEquals("不是三角形",tri.isTri(0, 1, 2)); assertEquals("直角三角形",tri.isTri(3, 4, 5)); assertEquals("等腰三角形",tri.isTri(3, 3, 5)); assertEquals("一般三角形",tri.isTri(4, 6, 7)); assertEquals("等腰三角形",tri.isTri(4, 4, 2)); assertEquals("等腰三角形",tri.isTri(3, 2, 2)); } }