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 ...
随机推荐
- Linux内核系列—C语言中内嵌汇编 asm __volatile__,asm__volatile_【转】
转自:http://www.bkjia.com/Androidjc/1109412.html 在内嵌汇编中,可以将C语言表达式指定为汇编指令的操作数,而且不用去管如何将C语言表达式的值读入哪个寄存器, ...
- HDU 1941 Hide and Seek(离散化+树状数组)
题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=1941 题意:给出平面上n个点,找出一点p,使得距离p最近和最远的点的距离之差最小.输出这 ...
- 第六讲(二) Hibernate HQL查询
HQL查询:Criteria查询对查询条件进行了面向对象封装,符合编程人员的思维方式,不过HQL(Hibernate Query Lanaguage)查询提供了更加丰富的和灵活的查询特性,因此Hibe ...
- Codeforces Round #209 (Div. 2)C
刷了一页的WA ..终于发现了 哪里错了 快速幂模板里一个变量t居然开得long ... 虽然代码写的丑了点 但是是对的 那个该死的long 啊.. #include <iostream&g ...
- EditText控件实现只读
android的EditText控件实现只读只需设置三个方法: editText.setCursorVisible(false);//隐藏光标 editText.setFocusable(fals ...
- D:/apache2/conf/httpd.conf:Cannot load D:/apache2/modules/mod_actions.so
报错如下: errors reported here must be corrected before service can be started.httpd:Syntax error on lin ...
- 随便谈谈alphago与人机大战
3月16日历时8天的人机大战终于落下帷幕,alphago以4:1的比分击败了当年如日中天的李世石.这个结果让我这个围棋爱好者+计算机爱好者百感交集…… ——一个时代落幕了,一个新的时代开启了. 这次人 ...
- js之dom_2
动态脚本1 载入脚本文件 var s = document.createElement("script"); s.src = "test2.js"; s.typ ...
- HDU 1869 六度分离【floyd】
题意:给出n个人,m个关系,问是否满足任意两个人之间的距离通过6个人就可以连接 用floyd就可以了,注意距离是大于7 #include<iostream> #include<cst ...
- Qt QGroupBox StyleSheet 边框设置
/**************************************************************************** * Qt QGroupBox StyleSh ...