图覆盖相关习题
question:
1 /******************************************************* 2 * Finds and prints n prime integers 3 * Jeff Offutt, Spring 2003 4 ******************************************************/ 5 public static void printPrimes (int n) 6 { 7 int curPrime; // Value currently considered for primeness 8 int numPrimes; // Number of primes found so far. 9 boolean isPrime; // Is curPrime prime? 10 int [] primes = new int [MAXPRIMES]; // The list of prime numbers. 11 12 // Initialize 2 into the list of primes. 13 primes [0] = 2; 14 numPrimes = 1; 15 curPrime = 2; 16 while (numPrimes < n) 17 { 18 curPrime++; // next number to consider ... 19 isPrime = true; 20 for (int i = 0; i <= numPrimes-1; i++) 21 { // for each previous prime. 22 if (curPrime%primes[i]==0) 23 { // Found a divisor, curPrime is not prime. 24 isPrime = false; 25 break; // out of loop through primes. 26 } 27 } 28 if (isPrime) 29 { // save it! 30 primes[numPrimes] = curPrime; 31 numPrimes++; 32 } 33 } // End while 34 35 // Print all the primes out. 36 for (int i = 0; i <= numPrimes-1; i++) 37 { 38 System.out.println ("Prime: " + primes[i]); 39 } 40 } // end printPrimes
一、绘制控制流图

二、
考虑t2=(n=5)相比t1=(n=3)更能发现的错误是数组的越界问题
三、
给出一个测试用例,不经过while循环,当n=1时即可满足
四、
找出点覆盖,边覆盖以及主路径的tr
点覆盖:{1,2,3,4,5,6,7,8,9,10,11}
边覆盖:{(1,2),(2,3),(2,8),(3,4),(4,5),(5,4),(5,6),(6,2),(6,7),(7,2),(8,9),(9,10),(10,9)(9,11)}
主路径覆盖:{(1,2,3,4,5,6,7),(2,3,4,5,6,2),(2,3,4,5,6,7,2),(7,2,8,9,10),(7,2,8,9,11),(7,2,3,4,5,6,7),(1,2,8,9,10),(1,2,8,9,11),(6,2,3,4,5,6),(4,5,6,7,2,3,4),(4,5,6,7,2,3,4),(4,5,4),(5,4,5),(9,10,9),(10,9,10),(10,9,11)}
基于Junit及Eclemma(jacoco)实现一个主路径覆盖的测试。
以三角形为例:
package TestTr; 2 3 public class Triangle { 4 // 定义三角形的三边 5 protected int lborderA = 0; 6 protected int lborderB = 0; 7 protected int lborderC = 0; 8 // 构造函数 9 public Triangle(int lborderA, int lborderB, int lborderC) { 10 this.lborderA = lborderA; 11 this.lborderB = lborderB; 12 this.lborderC = lborderC; 13 } 14 15 public String isType(Triangle triangle) { 16 String strType = ""; 17 //判断是否为三角形 18 if ((triangle.lborderA >= triangle.lborderB + triangle.lborderC) 19 || (triangle.lborderB >= triangle.lborderA + triangle.lborderC) 20 || (triangle.lborderC >= triangle.lborderA + triangle.lborderB)) { 21 22 strType = "不是三角形"; 23 } 24 else{ 25 // 判断是否等边是三角形 26 if ((triangle.lborderA == triangle.lborderB) 27 && (triangle.lborderB == triangle.lborderC)) { 28 strType = "等边三角形"; 29 } 30 // 判断是否是不等边三角形 31 else if ((triangle.lborderA != triangle.lborderB) 32 && (triangle.lborderB != triangle.lborderC) 33 && (triangle.lborderA != triangle.lborderC)) 34 strType = "不规则三角形"; 35 else { 36 strType = "等腰三角形"; 37 } 38 39 } 40 return strType; 41 } 42 }
1 package TestTr; 2 3 import org.junit.Test; 4 import static org.junit.Assert.*; 5 import org.junit.Before; 6 7 public class TestTriangle 8 { 9 public Triangle t; 10 @Before 11 public void create() 12 { 13 t = new Triangle(0, 0, 0); 14 } 15 16 @Test 17 public void Test() 18 { 19 t = new Triangle(1,1,1); 20 assertEquals("等边三角形",t.isType(t)); 21 t = new Triangle(3,4,5); 22 assertEquals("不规则三角形",t.isType(t)); 23 t = new Triangle(3,3,4); 24 assertEquals("等腰三角形",t.isType(t)); 25 t = new Triangle(1,5,7); 26 assertEquals("不是三角形",t.isType(t)); 27 } 28 }
当前测试用例为:
{1,1,1:等边三角形}
{3,4,5:不规则三角形}
{3,3,4:等腰三角形}
{1,5,7:不是三角形}
实现了主路径的全覆盖。

浙公网安备 33010602011771号