Software Testing (软件测试作业三) HW3 printPrimes

The source code:

源代码:

/*******************************************************

     * 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

 

 

a)    Control flow

 

b) The simple fault that t2(n=5) would be more likely to discover than t1(n=3) would is the index of the array out of bounds. It is evident that more large n is, more likely the code will visit out of the array bound.

c) The test case which does not go through the while loop is (n=1). Because the condition of while is numPrimes < n.

d)Node coverage:

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

Edge coverage:

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

Prime path coverage:

TR = {(1,2,3,4,5,7,8,9),(1,2,3,4,5,7,8,10,9),(1,2,3,4,8,9),(1,2,3,4,8,10,  9),(1,2,11,12,13),(1,2,11,12,14),(1,2,3,4,5,6)

(2,3,4,5,7,8,9,2),(2,3,4,5,7,8,10,9,2),(2,3,4,8,9,2),(2,3,4,8,10,9,2),

(3,4,5,7,8,9,2,3),(3,4,5,7,8,10,9,2,3),(3,4,5,8,10,9,2,3),(3,4,5,8,9,2,3),(3,4,5,7,8,9,2,11,12,14),(3,4,5,7,8,10,9,2,11,12,14),(3,4,8,9,2,11,12,14),(3,4,8,10,9,2,11,12,14)

(4,5,6,4),(4,5,7,8,9,2,3,4),(4,5,8,10,9,2,3,4),(4,8,9,2,3,4),(4,8,10,9,2,3,4),

(5,6,4,5),(5,7,8,9,2,3,4,5),(5,7,8,10,9,2,3,4,5),(5,6,4,8,9,2,11,12,14),(5,6,4,8,10,9,2,11,12,14),

(6,4,5,6),

(7,8,9,2,3,4,5,7),(7,8,10,9,2,3,4,5,7),(7,8,9,2,3,4,5,6),(7,8,10,9,2,3,4,5,6)

(8,10,9,2,3,4,5,7,8),(8,9,2,2,3,4,5,7),(8,9,2,3,4,8),(8,10,9,2,3,4,8),(8,10,9,2,3,4,5,6),(8,9,2,3,4,5,6),

(9,2,3,4,5,7,8,9),(9,2,3,4,5,7,8,10,9),(9,2,3,4,8,10,9),(9,2,3,4,8,9),(9,2,3,4,5,6)

(10,9,2,3,4,8,10),(10,9,2,3,4,5,7,8,10),(10,9,2,3,4,5,6),

(12,13,12),(13,12,13),(13,12,14)

 

Prime path coverage test:

The class Prime(I add a isDivisible function):

package cn.tju.scs.wyh;

public class Primes {
    static int MAXPRIMES = 100;
    /******************************************************* 
     * 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
    
    public static boolean isDivisible(int num1, int num2){
        if((num2 % num1) == 0){
            return true;
        }
        else{
            return false;
        }
    }
}

The test class Prime_test:

package cn.tju.scs.wyh;

import static org.junit.Assert.*;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PipedInputStream;
import java.io.PipedOutputStream;
import java.io.PrintStream;
import java.util.Scanner;

import org.hamcrest.core.AllOf;
import org.junit.Before;
import org.junit.Test;

import com.sun.media.jfxmedia.events.NewFrameEvent;
import com.sun.org.apache.bcel.internal.generic.NEW;
import com.sun.xml.internal.messaging.saaj.util.ByteInputStream;

public class Primes_test {
    ByteArrayOutputStream out;
    PrintStream ps;
    ByteInputStream in = new ByteInputStream();
    
    public Primes primes = new Primes();
    int [] print = {2, 3, 5};
    
    @Before
    public void setUp(){
        out = new ByteArrayOutputStream();
        ps = new PrintStream(out);
        System.setOut(ps);
    }
    
    @Test
    public void test() throws IOException {
        out.flush();
        primes.printPrimes(3);
        assertEquals("Prime: 2\r\nPrime: 3\r\nPrime: 5\r\n", out.toString());
    }
}

The test case I used is (n=3), because it has reached the 100% coverage rate.

 

 

posted @ 2017-03-14 21:03  wazxser  阅读(244)  评论(0编辑  收藏  举报