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. highCharts图表入门实例

    本文通过讲解Highcharts生成一个简单的3D柱状图实例来学习Highcharts的使用. JSP 页面 1.需要引入的js文件 <script src="<%=basePa ...

  2. PHP中对数据库操作的封装

    在动态网面设计中很多都要涉及到对数据库的操作,但是有时跟据需要而改用其它后台数据库,就需要大量修改程序.这是一件枯燥.费时而且容易出错的功作.其实我们可以用PHP中的类来实现对数据库操作的封装,从而使 ...

  3. 【CCS仿真】如何将CCS仿真时memory中的数据以Hex、Integer、 Long 、Float、 Addressable Unit类型保存到PC

    2013-12-04 19:07:05 将在CCS中仿真的数据导入电脑上时,可以选择不同的数据类型,以便分析,具体方法如下: 在CCS菜单中,选择File—>Data—>Save,弹出以下 ...

  4. 关于在c#中引用外部dll文件,在页面中找不到命名空间

    最近在项目中碰到这样的问题,经过搜索,发现是vs2010的版本不对,VS默认的版本是.NET Framework 4 Client Profile,需要将他更改为.NET Framework 4 版本 ...

  5. Qt之命令行编译(nmake)

    简述 前两节讲解了如何在Visual Studio和Qt Creator中搭建Qt开发环境,并分享了我们第一个小程序-Hello World. 下面分享如何使用命令行来编译Qt程序.当然,MSVC和M ...

  6. Android Studio插件

    awesome-android-ui(UI范例库) https://github.com/wasabeef/awesome-android-ui/tree/master/pages LMBanners ...

  7. bzoj2428: [HAOI2006]均分数据

    模拟退火.挺好理解的.然后res打成了ans一直WA一直WA...!!!一定要注意嗷嗷嗷一定要注意嗷嗷嗷一定要注意嗷嗷嗷. 然后我就一直卡一直卡...发现最少1800次的时候就可以出解了.然后我就去调 ...

  8. 基于Flume的美团日志收集系统(二)改进和优化

    在<基于Flume的美团日志收集系统(一)架构和设计>中,我们详述了基于Flume的美团日志收集系统的架构设计,以及为什么做这样的设计.在本节中,我们将会讲述在实际部署和使用过程中遇到的问 ...

  9. IOS中控制器的重要方法使用

    1.屏幕即将旋转的时候调用(控制器监控屏幕旋转) - (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfac ...

  10. A*寻路初探 GameDev.net 转载

    A*寻路初探 GameDev.net 译者序:很久以前就知道了A*算法,但是从未认真读过相关的文章,也没有看过代码,只是脑子里有个模糊的概念.这次决定从头开始,研究一下这个被人推崇备至的简单方法,作为 ...