软件测试作业(四)

题目所给出的代码为1 ******************************************************* 2 * Fi

题目所给出的代码为

 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 (isDivisible(primes[i], curPrime)) 
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

(a):控制流图如下

(b):将MAXPRIMES设为4,这样t2=(n=5)就会出现数组越界的错误,但t1=(n=3)无影响。

 

(c):n=1的时候不满足numPrimes < n,故不经过while循环

 

(d):点覆盖:{1,2,3,4,5,6,7,8,9,10,11,12,13,14}

 

边覆盖:{(1,2),(2,3),(2,12),(3,4),(4,5),(5,6),(6,7),(6,8),(7,5),(8,9), (5,9),(9,10),(9,11),(10,11),(11,2),(12,13),(13,14),(14,15),(15,13), (13,16)}

 

主路径覆盖:{(1,2,3,4,5,6,7),(1,2,3,4,5,6,8,9,10,11),(1,2,3,4,5,6,8,9,11),(1,2,3,4,5,9,10,11),(1,2,3,4,5,9,11),(1,2,12,13,14,15),(1,2,12,16),(3,4,5,6,8,9,10,11,2,12,13,14,15),

(3,4,5,6,8,9,11,2,12,13,14,15),(3,4,5,6,8,9,10,11,2,12,13,16),(3,4,5,6,8,9,11,2,12,13,16),(3,4,5,9,10,11,2,12,13,14,15),(3,4,5,9,11,2,12,13,14,15),(3,4,5,9,10,11,2,12,13,16),

(3,4,5,9,11,2,12,13,16),(6,7,5,9,10,11,2,12,13,14,15),(6,7,5,9,11,2,12,13,14,15),(6,7,5,9,10,11,2,12,13,16),(6,7,5,9,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)}

 

设计主路径覆盖的测试用例

以上次实验的判断三角形为例

 1 package cn.tju.st;
 2 public class Calculate {
 3     public String triangle (int a, int b,int c)
 4     {
 5         String str;
 6         int d=a-b;
 7         int e=b-c;
 8         int f=a-c;
 9         if( d*e*f==0){
10             str="等腰";
11             if( (a==b) && (b==c) )
12                 str="等边";
13         }
14         else
15             str="其他";
16         return str;
17         
18     }
19 }
package cn.tju.st;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import static org.junit.Assert.*;
import java.util.Arrays;
import java.util.Collection;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;

@RunWith(Parameterized.class)
public class CalculateTest {
    private String type;
    private int a;
    private int b;
    private int c;
    
    public CalculateTest(String type, int a, int b, int c){
        this.type = type;
        this.a = a;
        this.b = b;
        this.c = c;
    }
    @Before
    public void setUp() throws Exception {
        //System.out.println("This is before test");
    }

    @After
    public void tearDown() throws Exception {
        System.out.println("This is after test");
    }
    @Parameters
    public static Collection prepareData(){
        Object[][] object = {
                {"等边",1,1,1},
                {"等腰",2,2,3},
                {"等腰",2,3,3},
                {"其他",2,3,4}};
        return Arrays.asList(object);
    }
    @Test
    public void TestTypeOfTriangle() 
    {
        Calculate calc = new Calculate (); 
        assertEquals (type, calc.triangle(a,b,c)); 
    }
}

测试结果如下,已完成主路径覆盖

标签: 角形