【软件测试作业】Graph Coverage

Posted on 2018-03-20 20:07  XieJuan  阅读(220)  评论(0)    收藏  举报

作业题目

/**
     * Finds and prints n prime integers
     * Jeff Offutt, Spring 2003
     */


    private 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 primes.
        
        // 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; i++ ) {
                //for each previous prime.
                if(isDvisible(primes[i],curPrime)) {
                    //Found a divisor, curPrime is not prime.
                    isPrime = false;
                    break;
                }
            }
            if(isPrime) {
                // save it!
                primes[numPrimes] = curPrime;
                numPrimes++;
            
            }
        }// End while
        
        // print all the primes out
        for(int i = 0; i < numPrimes; i++) {
            System.out.println("Prime: " + primes[i] );

        }
        
    }// End printPrimes.

作业要求 1:

(a) Draw the control flow graph for the printPrime() method.

 

作业要求 2:

(b) Consider test cases ti = (n = 3) and t2 = ( n = 5). Although these tour the same prime paths in printPrime(), they don't necessarily find 
the same faults. Design a simple fault that t2 would be more likely to discover than t1 would.

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.

 

作业要求 3:

(c) For printPrime(), find a test case such that the corresponding test path visits the edge that connects the beginning of the while statement
to the for statement without going through the body of the while loop.

n =1

Because the condition of while is numPrimes < n. The initial value of numPrimes is 1.

 

作业要求 4:

(d) Enumerate the test requirements for node coverage, edge coverage,and prime path coverage for the path for printPrimes().

 node coverage:

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

edge coverage:

TR = { [0,1], [1,2], [1,9], [2,3], [3,4], [3,5], [3,6], [4,5], [5,3], [6,7], [6,8], [7,8], [8,1], [9,10], [9,11], [10,9] }

prime path coverage:

TR = { [0,1,2,3,4,5], [0,1,2,3,5], [0,1,2,3,6,7,8], [0,1,2,3,6,8], [0,1,9,10], [0,1,9,11]

[1,2,3,6,8], [1,2,3,6,7,8,1]

[2,3,6,7,8,1,2], [2,3,6,8,1,2]

[3,4,5,3], [3,5,3], [3,6,7,8,1,2,3], [3,6,8,1,2,3]

[4,5,3,4], [4,5,3,6,7,8,1,2], [4,5,3,6,8,1,2]

[5,3,5], [5,3,6,7,8,1,2], [5,3,6,8,1,2]

[9,10,9]

[10,9,10], [10,9,11]

}

 

作业要求 5:

(e) List test paths that achieve node coverage but not edge coverage ont the graph.

 path ={ [0,1,2,3,4,5,3,6,7,8,1,9,10,9,11] }

no cover the edge:[3,5], [6,8]

 

作业要求 6:

(f) List test paths that achieve edge coverage but not prime path coverage on the gra

 path = {  [0,1,2,3,4,5,3,6,7,8,1,9,10,9,11],  [0,1,2,3,5,3,6,8,1,9,11] }

 

使用Junit 和Eclemma 测试

程序代码:

使用的是题目中的代码,但是该部分代码有不全的地方,其中缺个参数 MAXPRIMES 的定义和初始化,还缺个判断函数 isDvisible(). 我只是补充了这两个地方,因此也不放代码了

测试代码:

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;

public class TestHomework3 {
    
    ByteArrayOutputStream out;
    PrintStream ps;

    
    public Homework3 primes = new Homework3();
    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());

 }
}

 

 

测试结果: