Use the following method printPrimes() for question a-d below

//Find and prints n prime integers

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 prime numbers. //Initialize 2 into the list of primes.
primes[0] = 2;
numPrimes = 1;
curPrime = 2;
while(numPrimes < n){
curPrime++;
isPrime = true;
for (int i = 0; i <= numPrimes-1; i++){
//for each previous prime.
if(isDivisible(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-1; i++){
System.out.println("Prime: " + primes[i]);
}
}//end printPrimes

(a) Draw the control flow grah for the printPrimes() method.

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

  Ans: the variable "MAXPRIMES" is not known, so we can make "MAXPRIMES = 4". Then t2 would be more likely to discover than t1 would.

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

  Ans: when n = 1, the test case will not go through the body of the while loop.

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

  Ans:

  (i) node coverage: {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14}

  (ii) edge coverage: {(1, 2), (2, 3), (3, 4), (3, 12), (4, 5), (5, 6), (6, 7), (6, 10), (7, 8), (7, 9), (8, 6), (9, 10), (10, 11), (10, 3), (11, 3), (12, 13), (12, 14), (13, 12)}

  (iii) prime path: {

    [1, 2, 3, 12, 14],

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

    [1, 2, 3, 4, 5, 6, 10, 11],

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

    [3, 4, 5, 6, 10, 11, 3],

    [3, 4, 5, 6, 7, 9, 10, 11, 3],

    [3, 4, 5, 6, 7, 9, 10, 3],

    [3, 4, 5, 6, 7, 9, 10, 11, 3],

    [4, 5, 6, 10, 3, 12, 13],

    [4, 5, 6, 10, 11, 3, 12, 13],

    [4, 5, 6, 7, 9, 10, 3, 12, 13],

    [4, 5, 6, 7, 9, 10, 11, 3, 12, 13],  

    [4, 5, 6, 10, 3, 12, 14],

    [4, 5, 6, 10, 11, 3, 12, 14],

    [4, 5, 6, 7, 9, 10, 3, 12, 14],

    [4, 5, 6, 7, 9, 10, 11, 3, 12, 14],

    [5, 6, 10, 3, 4, 5],

    [5, 6, 10, 11, 3, 4, 5],

    [5, 6, 7, 9, 10, 3, 4, 5],

    [5, 6, 7, 9, 10, 11, 3, 4, 5],

    [6, 7, 8, 6],

    [7, 8, 6, 10, 3, 12, 13],

    [7, 8, 6, 10, 3, 12, 14],

    [7, 8, 6, 10, 11, 3, 12, 13],

    [7, 8, 6, 10, 11, 3, 12, 14],

    [7, 8, 6, 10, 3, 4, 5, 6, 7],

    [7, 8, 6, 10, 11, 3, 4, 5, 6, 7],

    [8, 6, 10, 3, 12, 13],

    [8, 6, 10, 3, 12, 14],

    [8, 6, 10, 11, 3, 12, 13],

    [8, 6, 10, 11, 3, 12, 14],

    [8, 6, 7, 9, 10, 3, 12, 13],

    [8, 6, 7, 9, 10, 3, 12, 14],

    [8, 6, 10, 3, 4, 5, 6, 7, 8],

    [9, 10, 3, 4, 5, 6, 7, 9],

    [10, 11, 3, 4, 5, 6, 7, 9, 10],

    [10, 11, 3, 4, 5, 6, 10],

    [10, 3, 4, 5, 6, 7, 9, 10],

    [10, 3, 4, 5, 6, 10],

    [11, 3, 4, 5, 6, 7, 9, 10, 11],

    [11, 3, 4, 5, 6, 10, 11],

    [12, 13, 12],

    [13, 12, 13]

    }

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

 被测试代码与测试代码:

package cn.tju;
public class Prime{
private static int MAXPRIMES = 10;
public static boolean 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 prime numbers. //Initialize 2 into the list of primes.
primes[0] = 2;
numPrimes = 1;
curPrime = 2;
while(numPrimes < n){
curPrime++;
isPrime = true;
for (int i = 0; i <= numPrimes-1; i++){
//for each previous prime.
if(isDivisible(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-1; i++){
System.out.println("Prime: " + primes[i]);
}
return true;
}//end printPrimes
public static boolean isDivisible(int a, int b){
return (b%a == 0);
}
}
package junit;
import static org.junit.Assert.*;
import org.junit.Test;
import cn.tju.Prime;
public class Testing { @Test
public void test() {
org.junit.Assert.assertEquals(true, new Prime().printPrimes(1));
org.junit.Assert.assertEquals(true, new Prime().printPrimes(10));
} }

结果:

  

Page 63-64 Exercises 2.3.7 -------Introduction to Software Testing (Paul Ammann and Jeff Offutt)的更多相关文章

  1. Page 16 Exercises 1.2.3 -------Introduction to Software Testing (Paul Ammann and Jeff Offutt)

    Below are four faulty programs. Each includes a test case that results in failure. Answer the follow ...

  2. 【Software Test】Introduction to Software Testing

    Introduction to Software Testing 文章目录 Going to Learn --. Evolution of The Software Industry Errors, ...

  3. The Most Simple Introduction to Hypothesis Testing

    https://www.youtube.com/watch?v=UApFKiK4Hi8

  4. 软件测试技术(三)——使用因果图法进行的UI测试

    目标程序 较上次增加两个相同的输入框 使用方法介绍 因果图法 在Introduction to Software Testing by Paul一书中,将软件测试的覆盖标准划分为四类,logical ...

  5. 《Introduction to Tornado》中文翻译计划——第五章:异步Web服务

    http://www.pythoner.com/294.html 本文为<Introduction to Tornado>中文翻译,将在https://github.com/alioth3 ...

  6. mysql 异常宕机 ..InnoDB: Database page corruption on disk or a failed,,InnoDB: file read of page 8.

    mysql 测试环境异常宕机 系统:\nKylin 3.3 mysql版本:5.6.15--yum安装,麒麟提供的yum源数据库版本 error日志 181218 09:38:52 mysqld_sa ...

  7. 模拟微信小程序页面Page方法

    1.依赖 a.jQuery b.angularjs 2.page.js文件 1 var Page = function (options) { 2 var myApp = angular.module ...

  8. Page Visibility(页面可见性) API介绍、微拓展[转]

    一.网页君的悲情谁来懂 唉,突然想到了一首悲情诗: 泪湿罗巾梦不成,夜深前殿按歌声.红颜未老恩先断, 斜倚薰笼坐到明. 学生时代学过的一首诗,已还给老师不知所云的诸位可参见下面释义: 诗的主人公是一位 ...

  9. Introduction to ASP.NET Web Programming Using the Razor Syntax (C#)

    1, http://www.asp.net/web-pages/overview/getting-started/introducing-razor-syntax-c 2, Introduction ...

随机推荐

  1. 机器学习 —— 概率图模型(Homework: Structure Learning)

    概率图的学习真的要接近尾声了啊,了解的越多越发感受到它的强大.这周的作业本质上是data mining.从数据中学习PGM的结构和参数,完全使用数据驱动 —— No structure, No par ...

  2. 运行javascript的方式

    1.放在超链接中: <a href="javascript:alert('aaaa')" >Test</a> 2.直接加载 <script type= ...

  3. CCNU-线段树练习题-A-单点更新1

    A - 单点更新1 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit Status Des ...

  4. pyhton小方法

    import osa = os.walk('.') for i in a: print(i)

  5. linux环境变量(转)

    转自: http://www.cnblogs.com/growup/archive/2011/07/02/2096142.html Linux 的变量可分为两类:环境变量和本地变量 环境变量 或者称为 ...

  6. MTK6515 android打版软件配置(DrvGen.exe 使用)

    1 一.配置GPIO 2 二.配置emmc 3 三.配置LCM 3.1 1.增加LCM驱动文件 3.2 2.配置驱动文件 3.3 3.配置背光 4 四.配置touch panel 4.1 1.通过dc ...

  7. leetcode:Reverse Bits

    Reverse bits of a given 32 bits unsigned integer. For example, given input 43261596 (represented in ...

  8. Post的请求案例

    1.简单的post请求案例 $.post(rootPath+"/jasframework/loginLog/getStatisticsInfoByUserId.do",functi ...

  9. How does browsersync work?

    How Does BrowserSync Work? BrowserSync starts a small web server. If you’re already using a local we ...

  10. linux下从源代码安装git

    之所以有这样的需求,是因为部分预安装的git版本太低,很多功能没有并且安全性存在问题. 比如git submodule add xxx@host:yyy.git必须在父repo的root目录安装,而新 ...