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)flow graph:
b)An obvious and boring fault is if the while loop test is incorrect -for example ,while(numPrime<3)
A fault is that n=3 returns all the odd numbers between 2 and 5,whereas n=5 does not.Thus a fault that caused the program to return odd numbers instead of prime numbers would be detected by n =5,not n=3.For example ,if the if test was if isDivisible (primes[0],curPrime),or if the isDivisible()method was implemented incorrectly
c)the test n=1 does the job
d) i.node coverage:{1,2,3,4,5,6,7,8,9,10,11,12};
ii.edge coverage:
{(1,2),(2,3),(2,4),(4,11),(11,12),(3,5),(5,6),(6,8),(6,7),(8,5),(7,9),(9,10),(9,2),(10,2)}
iii.prime path coverage:
[1,2,4,11]
[1,2,4,11,12,11]
[1,2,3,5,6,7,9,2,4,11]
[1,2,3,5,6,7,9,2,4,11,12,11]
[1,2,3,5,6,7,9,10,2,4,11]
[1,2,3,5,6,7,9,10,2,4,11,12,11]
[1,2,3,5,6,8,5,6,7,9,2,4,11]
[1,2,3,5,6,8,5,6,7,9,2,4,11,12,11]
[1,2,3,5,6,8,5,6,7,9,10,2,4,11]
[1,2,3,5,6,8,5,6,7,9,10,2,4,11,12,11]