图覆盖相关习题

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:不是三角形}

实现了主路径的全覆盖。

posted @ 2016-03-28 19:03  死宅妖  阅读(189)  评论(0编辑  收藏  举报