#ST# HW3 for ST

7. Use the following method printPrimes() for questions a–d.

  (a)printPrimes()方法画控制流图。

  如下图:

 

  (b)考虑测试用例t1=(n=3)t2=(n=5)。即使这些测试用例游历printPrimes()方法中相同的主路径,它们不一定找出相同的错误。设计一个简单的错误,使得t2t1更容易发现。

   设计一个简单的错误:while循环里的for循环中的if语句由if( isDivisible( primes[i], curPrime ) )变为if( isDivisible( primes[0], curPrime ) )

  因为对于测试用例t1=(n=3)来说,无论是正确的代码还是上面的错误代码,它的测试结果都是[2,3,5],无法发现错误;而对于测试用例t2=(n=5),游历正确代码时它会得到正确结果[2,3,5,7,11],而游历错误代码时,它会得到错误结果[2,3,5,7,9],因此可以检测出错误。

  所以在这种情况下,t2t1更容易发现。

 

  (c)针对printPrimes(),找到一个测试用例,使得相应的测试路径访问连接while语句开始到for语句的边,而不用通过while循环体。

  测试用例:n = 1

 

  (d)针对printPrimes()的图列举每个节点覆盖、边覆盖和主路径覆盖的测试需求。

  节点覆盖:

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

  边覆盖:

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

  主路径覆盖:

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

 

  (e)基于JunitEclemmajacoco)实现一个主路径覆盖的测试。

  创建一个类,里面包括此printPrimes()方法,同时利用测试代码进行测试。测试代码如下:

package printPrimes;

import org.junit.Test;

 

public class TestPrimes {

 

    public PrintPrimes testPrime = new PrintPrimes();

    @Test

    public void test() {

     testPrime.printPrimes(5);

    }

}

  基于Junit进行测试:

 

  利用Eclemma进行测试:

posted @ 2017-03-13 21:46  WangXiaojianTju  阅读(206)  评论(0编辑  收藏  举报