【SoftwareTesting Homework 3】

课后练习第七题

  使用下面的方法PrintPrime()完成后面的问题(a)-(d)

1. /** *****************************************************
2. * Finds and prints n prime integers
3. * Jeff Offutt, Spring 2003
4. ********************************************************* */
5. private static void printPrimes (int n)
6. {
7. int curPrime; // Value currently considered for primeness
8. int numPrimes; // Number of primes found so far.
9. boolean isPrime; // Is curPrime prime?
10. int [] primes = new int [MAXPRIMES]; // The list of prime numbers.
11.
12. // Initialize 2 into the list of primes.
13. primes [0] = 2;
14. numPrimes = 1;
15. curPrime = 2;
16. while (numPrimes < n)
17. {
18. curPrime++; // next number to consider ...
19. isPrime = true;
20. for (int i = 0; i <= numPrimes-1; i++)
21. { // for each previous prime.
22. if (isDivisible (primes[i], curPrime))
23. { // Found a divisor, curPrime is not prime.
24. isPrime = false;
25. break; // out of loop through primes.
26. }
27. }
28. if (isPrime)
29. { // save it!
30. primes[numPrimes] = curPrime;
31. numPrimes++;
32. }
33. } // End while
34.
35. // Print all the primes out.
36. for (int i = 0; i <= numPrimes-1; i++)
37. {
38. System.out.println ("Prime: " + primes[i]);
39. }
40. } // end printPrimes

  

(a):控制流图如下(手绘。。。)

(b):将MAXPRIMES设为4,这样t2=(n=5)就会出现数组越界的错误,但t1=(n=3)无影响。

(c):n=1的时候不满足numPrimes < n,故不经过while循环

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

边覆盖:{(1,2),(2,3),(2,12),(3,4),(4,5),(5,6),(6,7),(6,8),(7,5),(8,9), (5,9),(9,

10),(9,11),(10,11),(11,2),(12,13),(13,14),(14,15),(15,13), (13,16)}

主路径覆盖:{(1,2,3,4,5,6,7),(1,2,3,4,5,6,8,9,10,11),(1,2,3,4,5,6,8,9,11),(1,2,3,4,5,9,10,11),(1,2,3,4,5,9,11),(1,2,12,13,14,15),(1,2,12,16),(3,4,5,6,8,9,10,11,2,12,13,14,15),

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

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

(2,3,4,5,6,8,9,10,11,2),(2,3,4,5,6,8,9,11,2),(2,3,4,5,9,10,11,2),(2,3,4,5,9,11,2)}

 

设计主路径覆盖的测试用例

import static org.junit.Assert.*;

import java.io.ByteArrayOutputStream;
import java.io.PrintStream;
import java.lang.reflect.Method;

import org.junit.*

public class Test {
    private PrintPrimes p;

    PrintStream console = null;       
    ByteArrayOutputStream bytes = null;  

    @Before
    public void setUp() throws Exception {
        p = new PrintPrimes();           
        bytes = new ByteArrayOutputStream();    
        console = System.out;                  
        System.setOut(new PrintStream(bytes));  
    }
    
    @After
    public void tearDown() throws Exception {
        System.setOut(console);
    }
    
    @Test
    public void testResult() throws Exception {
        String s = new String("Prime:2" + '
'+'
');  
        s += "Prime:3" + '
'+'
';
        s += "Prime:5" + '
'+'
';
        
        Class pp = p.getClass();
        Method method = pp.getDeclaredMethod("printPrimes", 
                new Class[]{int.class});
        method.setAccessible(true);
        method.invoke(p, 3);
        assertEquals(s, bytes.toString());

    }
}
原文地址:https://www.cnblogs.com/mumu95/p/5334287.html