HOMEWORK 3

题目所给代码如下:

 1 /*******************************************************
 2      * Finds and prints n prime integers
 3      * Jeff Offutt, Spring 2003
 4      ******************************************************/
 5     public 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):控制流图如下(使用ProcessOn绘制)

(b):将MAXPRIMES设为4,这样t2=(n=5)就会出现数组越界的错误,但t1=(n=3)无影响。

(c):n=1的时候不满足numPrimes < n,故不经过while循环

(d):点覆盖:{1,2,3,4,5,6,7,5,6,8,9,10,11,12,13,14,15,16}

边覆盖:{(1,2),(2,3),(2,12),(3,4),(4,5),(5,6),(6,7),(6,8),(7,5),(8,9), (5,9),(9,10),(9,11),(10,11),(11,2),(12,13),(13,14),(14,15),(15,13), (13,16)}

主路径覆盖:{(1,2,3,4,5,6,7),(1,2,3,4,5,6,8,9,10,11),(1,2,3,4,5,6,8,9,11),(1,2,3,4,5,9,10,11),(1,2,3,4,5,9,11),(1,2,12,13,14,15),(1,2,12,16),(3,4,5,6,8,9,10,11,2,12,13,14,15),

(3,4,5,6,8,9,11,2,12,13,14,15),(3,4,5,6,8,9,10,11,2,12,13,16),(3,4,5,6,8,9,11,2,12,13,16),(3,4,5,9,10,11,2,12,13,14,15),(3,4,5,9,11,2,12,13,14,15),(3,4,5,9,10,11,2,12,13,16),

(3,4,5,9,11,2,12,13,16),(6,7,5,9,10,11,2,12,13,14,15),(6,7,5,9,11,2,12,13,14,15),(6,7,5,9,10,11,2,12,13,16),(6,7,5,9,11,2,12,13,16),(14,15,13,16),(13,14,15,13),(5,6,7,5),

(2,3,4,5,6,8,9,10,11,2),(2,3,4,5,6,8,9,11,2),(2,3,4,5,9,10,11,2),(2,3,4,5,9,11,2)}

设计主路径覆盖的测试用例

以测试上面的程序printPrimes为例,下面的测试程序用了一些课外自己学的东西~

代码如下:

 1 import static org.junit.Assert.*;
 2
 3 import java.io.ByteArrayOutputStream;
 4 import java.io.PrintStream;
 5 import java.lang.reflect.Method;
 6
 7 import org.junit.After;
 8 import org.junit.AfterClass;
 9 import org.junit.Before;
10 import org.junit.BeforeClass;
11
12
13 public class Test {
14     private PrintPrimes p;
15
16     PrintStream console = null;          // 输出流 (字符设备)
17     ByteArrayOutputStream bytes = null;  // 用于缓存console 重定向过来的字符流
18
19     @org.junit.Before
20     public void setUp() throws Exception {
21         p = new PrintPrimes();           //初始化
22         bytes = new ByteArrayOutputStream();    // 分配空间
23         console = System.out;                   // 获取System.out 输出流的句柄
24         System.setOut(new PrintStream(bytes));  // 将原本输出到控制台Console的字符流 重定向 到 bytes
25     }
26
27     @org.junit.After
28     public void tearDown() throws Exception {
29         System.setOut(console);
30     }
31
32     @org.junit.Test
33     public void testResult() throws Exception {
34         String s = new String("Prime:2" + '\r'+'\n');    // 控制台的换行,这里用 '\r' + '\n' 与println等价
35         s += "Prime:3" + '\r'+'\n';
36         s += "Prime:5" + '\r'+'\n';
37
38         Class pp = p.getClass();
39         //获取方法
40         Method method = pp.getDeclaredMethod("printPrimes",
41                 new Class[]{int.class});
42         //将私有设置可访问
43         method.setAccessible(true);
44         //传值,返回结果对象
45         method.invoke(p, 3);
46      //对比结果
47         assertEquals(s, bytes.toString());          // bytes.toString() 作用是将 bytes内容 转换为字符流
48
49     }
50 }

测试结果如下:已完成主路径覆盖

转载于:https://www.cnblogs.com/tjulym/p/5334213.html

软件测试(四)之 PrintPrimes相关推荐

  1. 猎户座计划软件测试,四核配置跑分:猎户座4412性能强劲_平板电脑评测-中关村在线...

    ·四核配置跑分:猎户座4412性能强劲 硬件配置方面,纽曼Q10采用三星Exynos 4412猎户座处理器,搭载1GB DDR3内存,16GB存储空间(可通过TF存储卡扩展至32GB),预装Andro ...

  2. glc四驱软件测试,四条腿一定跑得快?新款奔驰GLC四驱系统可不答应?

    导读:四条腿一定跑得快?新款奔驰GLC四驱系统可不答应? 各位点开这篇文章的朋友们,想必都是很高的颜值吧,我们真的是很有缘哦,小编每天都会给大家带来不一样的时尚资讯,如果对小编的文章或者其他的什么,有 ...

  3. 软件测试(四)——软件测试用例总结

    测试技能图 按测试对象划分 界面测试 软件只是一种工具,软件与人的信息交流是通过界面来进行的,界面是软件与用户交流的最直接的一 层,界面的设计决定了用户对我们设计的软件的第一印象:界面如同人的面孔,具 ...

  4. 软件测试分类(按测试阶段划分)

    你好呀,我是芒果. 今天的文章,我们从测试阶段的角度出发,来学习一些常见的测试分类. 在"测试的四个阶段:单元.集成.系统.验收"这篇文章中,我们了解到软件测试可以分为四个主要阶段 ...

  5. 计算机基础及软件测试学习路线

    目录 一.软件 1.1 软件的开发阶段: 二.软件缺陷 2.1 *定义方式一(5条): 2.2 定义方式二(了解): 三.软件测试 四.计算机的层次 六.软件的分类 一.软件 计算机 = 硬件+软件 ...

  6. 程序猿和攻城狮(南大)

    本文是自学网站MOOC 上南大的程序猿和攻城狮的 听课笔记. 一   软件工程师 二 人机交互 三 概率统计与软件测试 四 移动互联网本质 五 软工历史与建模 四 移动互联网本质 1.连接 当前互联网 ...

  7. 二 需求工程和设计模式

    目录 一.需求工程 1.需求开发 1.1需求获取 1.2需求分析 1.2.1 SA 结构式需求分析 1.2.2 面向对象OOA分析.UML 1.3需求定义 1.4需求验证 2.需求管理 二.系统设计 ...

  8. 后端面经整理:数据库、操作系统、计算机网络等

    文章目录 数据库 索引的底层实现: 聚簇索引.非聚簇索引(辅助索引): 关系模型的三类完整性约束: 一致性哈希: Redis: ACID 四大特性: 并发一致性问题: 隔离级别: 视图: InnoDB ...

  9. 备战 ‘金三银四’ 必备超多软件测试面试题全在这里

    下面小编为大家整理了18个常见的问题,一起来学习吧!记得点击收藏哦 自己还整理了一些面试合集有需要的可以查看文章最后 1.问:你在测试中发现了一个bug,但是开发经理认为这不是一个bug,你应该怎样解 ...

最新文章

  1. Kafka:ZK+Kafka+Spark Streaming集群环境搭建(二十一)NIFI1.7.1安装
  2. html显示本地磁盘 图片,手把手教你为本地磁盘增添背景图片(图解)
  3. npm: 权限阻止修复
  4. sdut 2140 有向图中是否存在拓扑序列的判断
  5. jsp ajax三级联动,Spring MVC+JSP实现三级联动
  6. 10.切片slice.rs
  7. java 异常堆栈输出_打印Java异常堆栈信息
  8. 这个女生躲在衣柜等男友回家,结果竟是......
  9. 刀剑神域服务器维护到什么时候,刀剑神域黑衣剑士王牌维护结束时间 服务器维护进不去怎么办...
  10. 一个java写的贪吃蛇程序
  11. 虚幻airsim1:下载安装
  12. 崮德好文连载 - 活该你是工程师(自序)
  13. python打印乘法口诀表
  14. 深入理解java虚拟机——自动内存管理
  15. 记一次Selenium框架的爬虫遇到下拉框页面的解决经历
  16. MapWindow GIS二次开发
  17. java的日历类_java 中的Calendar日历类
  18. Python面试题之Python面试题汇总
  19. Android: 主动抛出异常调试
  20. screen的使用方法

热门文章

  1. Boost:使用静态c ++内核语言扩展以进行编译和 执行模板化的c ++内核
  2. ITK:在保留边缘的同时使图像平滑
  3. Qt Creator使用命令行选项
  4. OpenGL Drawing Commands绘图命令的实例
  5. C++ Fermat‘s little theorem费马小定理寻找模逆实现算法(附完整源码)
  6. C语言振动排序shaker sort算法(附完整源码)
  7. C++基本输入/输出
  8. C++空指针访问成员函数
  9. 经典C语言程序100例之九零
  10. 安卓应用程序一般采用什么计算机语言开发,Kotlin 编程语言成为其 Android 应用程序开发人员的首选语言...