Software Testing -- HW3

Using the following method printPrimes() for questions a-f below

 Prime.java

package net.chenyuhong.junitTest;

import java.awt.datatransfer.StringSelection;
import java.util.Scanner;

/**   
 * @Title: Prime.java 
 * @Package net.chenyuhong.junitTest 
 * @Description: 打印质数
 * @author cyh tjuchenheng@163.com  
 * @date 2017-3-12 下午6:23:11 
 * @version V1.0   
 */
public class Prime {
    
    final static int MAXPRIMES = 50;
    
     //如果一个数不能被它之前的任何素数整除,那么它自己也是一个素数(反证法,如果不是素数,则一定可以分解为若干素数的乘积,而这些素数一定比本身小)
    public static String printPrimes(int n){
        int curPrime;    //当前被考虑的数
        int numPrimes;   //至今为止找到的质数个数
        boolean isPrime;  //curPrime 是否为质数
        int [] primes = new int [MAXPRIMES];  // 质数列表    
        primes[0] = 2;
        numPrimes = 1;
        curPrime = 2;
        while(numPrimes < n){
            curPrime++;
            isPrime = true;
            for(int i = 0;i <= numPrimes-1;i++){
                if(isDivisible(primes[i],curPrime)){
                    isPrime = false;
                    break;    
                }
            }        
            if(isPrime){
                primes[numPrimes] = curPrime;
                numPrimes++;
            }
        }
        String str = "Prime:";
        for(int i = 0;i <= numPrimes-1;i++){                //打印所有的质数        
             str += "_"+primes[i];
        }
        System.out.println(str);
        return str;
    }
    
    private static boolean isDivisible(int i, int curPrime) {    
        return  curPrime%i == 0;
    }

//    public static void main(String[] args) {
////        
////        Scanner in=new Scanner(System.in); //使用Scanner类定义对象  
////        System.out.println("please input a integer number");  
////        int n=in.nextInt(); //接收整型数据  
//        int i = 10;
//        while(i >= 0){
//            printPrimes(i);
//            i--;
//        }
//           
//    
//    }

}

PrimeTest.java

package net.chenyuhong.junitTest;

import static org.junit.Assert.*;

import java.util.Arrays;
import java.util.Collection;
import java.util.Scanner;

import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;

/**   
 * @Title: PrimeTest.java 
 * @Package net.chenyuhong.junitTest 
 * @Description: 
 * @author cyh tjuchenheng@163.com  
 * @date 2017-3-12 下午8:43:08 
 * @version V1.0   
 */
@RunWith(Parameterized.class)
public class PrimeTest {
    
    private String primeString;
    private int n;
    
    public PrimeTest(String primeString,int n){
        this.primeString = primeString;
        this.n = n;
    }
    
    @Parameters
    public static Collection<Object[]> getData(){
        return Arrays.asList(new Object[][]{
//                
//                {"Prime:_2_3_5_7_11_13_17_19_23_29",10},
//                {"Prime:_2_3_5_7_11_13_17_19_23",9},
//                {"Prime:_2_3_5_7_11_13_17_19",8},
//                {"Prime:_2_3_5_7_11_13_17",7},
//                {"Prime:_2_3_5_7_11_13",6},
//                {"Prime:_2_3_5_7_11",5},
//                {"Prime:_2_3_5_7",4},
                  {"Prime:_2_3_5",3},
//                {"Prime:_2_3",2},
//                {"Prime:_2",1},           
        });
    }

    @Test
    public void testPrintPrimes() {
            assertEquals(this.primeString,Prime.printPrimes(this.n));
    }

}

 

Answer:

■    (a) Draw the control flow graph for the printPrimes() method

 

 

■     (b)

Make sure the value of  MAXPRIMES equals 4, then there will be an out-of-array –bound fault when n = 5;

■     (c)

Let the parameter  n = 0  or  n = 1.

■     (d)

TR for node coverage:

 {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}

TR for edge coverage:

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

TR for prime path coverage:

{A(1,2,4,14),B(1,2,4,15,16),C(4,15,16,4),D(5,6,9,10,5),E(1,2,3,5,6,9,10),F(1,2,3,5,6,8,7,11,13),G(1,2,3,5,6,8,7,12,13),H(1,2,3,5,7,11,13),I(1,2,3,5,7,12,13),J(2,3,5,6,8,7,11,13,2),K(2,3,5,6,8,7,12,13,2),L(2,3,5,7,11,13,2),M(2,3,5,7,12,13,2)}

 

■     (e)

Using Junit and Eclemma to test the method and cover all prime paths above

1) Test Case : n = 1;

Test Path : [1,2,4,15,16,4,14]

Prime path covered: A,B,C

 

 

 

2) Test Case : n = 2;

Test Path : [1,2,3,5,6,9,10,5,7,11,13,2,4,15,16,4,14]

Prime path covered: A,B,C,D,E,H,I,L,M

3) Test Case : n = 3;

Test Path :  ……

Prime path covered: A,B,C,D,E,F,G,H,I,J,K,L,M   completely covered!

 

posted @ 2017-03-12 22:12  陈煜弘  阅读(287)  评论(0编辑  收藏  举报