2018软件测试_Homework 3

本次作业是《软件测试基础》2.3的课后习题7,主要是a-d,题目代码如下:

    private static void printPrimes(int n) {
        int curPrime;
        int numPrimes;
        boolean isPrime;
        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++;
            }
        }

        for (int i = 0; i <= numPrimes - 1; i++) {
            System.out.println("Prime:" + primes[i]);
        }
    }

很明显这是一个输出n个质数的函数

a) 画出控制流图

b) 设计一个测试用例t2=(n=5)比t1=(n=3)更容易发现的fault

MAXPRIMES错误地设为4,发生数组越界

c) 找一个测试用例经过连接while开头的边又走到for,但没有经过while的主体

n=1或n=0

d) 枚举节点覆盖,边覆盖,主路径覆盖的测试要求

节点覆盖要求每个节点都经过,并不要求走过每个边,TR={1,2,3,4,5,6,7,8,9,10,11,12}

边覆盖需要将每条边都覆盖,TR={ [1,2],[2,3],[2,4],[3,7],[4,5],[5,6],[5,12],[6,5],[7,9],[7,10],[8,2],[9,2],[10,11],[11,7] }

主路径覆盖就是覆盖所有的主路径,即覆盖所有的不被其他简单路径覆盖的路径,TR={ [1,2,4,5,12],[1,2,4,5,6],[5,6,5],[6,5,6],[1,2,3,7,10,11],[1,2,3,7,9],[1,2,3,7,10,8],[7,10,11,7],[10,11,7,10],[11,7,10,11],[2,3,7,9,2],[3,7,9,2,3],[7,9,2,3,7],[9,2,3,7,9],[2,3,7,10,8,2],[3,7,10,8,2,3],[7,10,8,2,3,7],[10,8,2,3,7,10],[8,2,3,7,10,8] }

e) 基于Junit及Eclemma(jacoco)实现一个主路径覆盖的测试

设计用例t1=(n=3),测试路径为

[1,2,3,7,10,11,7,9,2,3,7,10,8,2,3,7,10,11,7,10,11,7,9,2,4,5,6,5,6,5,6,5,12],

t2=(n=1),测试路径为

[1,2,4,5,6,5,12]

将函数进行一定的调整,改为返回一个整数数组,通过Junit和EclEmma进行测试,具体代码如下:

hw3.java

package printPrimes;

public class hw3 {
    static int MAXPRIMES = 3;

    public int[] printPrimes(int n) {
        int curPrime;
        int numPrimes;
        boolean isPrime;
        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++;
            }
        }
        /*
         * for (int i = 0; i <= numPrimes - 1; i++) { 
         * System.out.println("Prime:" + primes[i]); 
         * }
         */
        return primes;
    }

    private static boolean isDivisible(int i, int curPrime) {
        if (curPrime % i == 0) {
            return true;
        }
        return false;
    }

}

hw3Test.java

package printPrimes;

import static org.junit.Assert.*;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import printPrimes.hw3;;

public class hw3Test {
    hw3 t;

    @Before
    public void setUp() throws Exception {
        t = new hw3();
    }

    @After
    public void tearDown() throws Exception {

    }

    @Test
    public void test() {
        int a[] = new int[] { 2, 3, 5 };
        assertArrayEquals(a, t.printPrimes(3));
    }

}

由于进行数组的比较,因此每次测试MAXPRIMES都要做相应的调整,测试结果如下:

n=1:

n=3:

源码地址:

https://github.com/jingranburangyongzhongwen/st_hw3

 

posted @ 2018-03-26 14:47  LKFrunning  Views(145)  Comments(0)    收藏  举报