Page 63-64 Exercises 2.3.7 -------Introduction to Software Testing (Paul Ammann and Jeff Offutt)
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)的更多相关文章
- 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 ...
- 【Software Test】Introduction to Software Testing
Introduction to Software Testing 文章目录 Going to Learn --. Evolution of The Software Industry Errors, ...
- The Most Simple Introduction to Hypothesis Testing
https://www.youtube.com/watch?v=UApFKiK4Hi8
- 软件测试技术(三)——使用因果图法进行的UI测试
目标程序 较上次增加两个相同的输入框 使用方法介绍 因果图法 在Introduction to Software Testing by Paul一书中,将软件测试的覆盖标准划分为四类,logical ...
- 《Introduction to Tornado》中文翻译计划——第五章:异步Web服务
http://www.pythoner.com/294.html 本文为<Introduction to Tornado>中文翻译,将在https://github.com/alioth3 ...
- 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 ...
- 模拟微信小程序页面Page方法
1.依赖 a.jQuery b.angularjs 2.page.js文件 1 var Page = function (options) { 2 var myApp = angular.module ...
- Page Visibility(页面可见性) API介绍、微拓展[转]
一.网页君的悲情谁来懂 唉,突然想到了一首悲情诗: 泪湿罗巾梦不成,夜深前殿按歌声.红颜未老恩先断, 斜倚薰笼坐到明. 学生时代学过的一首诗,已还给老师不知所云的诸位可参见下面释义: 诗的主人公是一位 ...
- 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 ...
随机推荐
- iOS:授权用户定位NSLocationManager的使用
请求用户批准定位: 在iOS8,要想获得用户的位置,必须经过用户批准授权 开发者可以在Info.plist中添加两个配置项 –NSLocationAlwaysUsageDescription –NSL ...
- MatOfPoint作为minAreaRect的参数总是报错"throw new IllegalArgumentException("Incomatible Mat");
MatOfPoint matPt = contours.get(i) minRect.set(i, Imgproc.fitEllipse( new MatOfPoint2f(matPt) ...
- (4)FTP服务器下载文件
上一篇中,我们提到了怎么从FTP服务器下载文件.现在来具体讲述一下. 首先是路径配置.. 所以此处我们需要一个app.config来设置路径. <?xml version="1.0&q ...
- Introduction
http://www.entityframeworktutorial.net/EntityFramework5/entity-framework5-introduction.aspx Basics o ...
- gridview 单击行时如何让SelectedIndexChanging事件响应
在gridview控件上单击行的时候,是不触发SelectedIndexChanging事件的,那么想要单击时触发SelectedIndexChanging事件时怎么做呢? 我是这样做的: 在grid ...
- 安卓发展史以及安卓和苹果对比PPT
此PPT由我们小组协力完成,介绍了Android的发展史以及android与苹果的一些比较.概述了android发展至今的一系列版本,功能的日益完善,它的强大性,灵活性,公开性使其拥有吸引客服的绝大魅 ...
- How to install Node.js on Linux
How to install Node.js on Linux Posted on November 13, 2015 by Dan Nanni Leave a comment Question: H ...
- oraclede chuangjian yu dajian(zhuan)
http://wenku.baidu.com/link?url=pIKLZJ4sAurjNGjwgChqjRMhCXfn77qy1K_EW3nlGn4eN4roDN8mhSG0GakYbrTBcsD4 ...
- 韦东山驱动视频笔记——3.字符设备驱动程序之poll机制
linux内核版本:linux-2.6.30.4 目的:我们在中断方式的按键应用程序中,如果没有按键按下,read就会永远在那等待,所以如果在这个程序里还想做其他事就不可能了.因此我们这次改进它,让它 ...
- 编译busybox错误
为了制作一个文件系统,首先要用busybox编译出文件系统所需要的应用程序.在下载了busybox-1.13.0.tar.bz2后,编译出现如下错误: In file included from /o ...