软件测试(四)之 PrintPrimes

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,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 }

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

时间: 2024-10-13 02:25:16

软件测试(四)之 PrintPrimes的相关文章

软件测试四个阶段

软件测试的对象包括软件需求.概要设计.详细设计.软件运行环境.可运行程序和软件源代码等. 软件测试包括质量.人员.资源.技术和流程五大要素,以及测试覆盖率和测试效率两个目标. 软件测试一般分为4个阶段:单元测试.集成测试.系统测试.验收测试. 一.单元测试 单元测试是对软件中的最小可验证单元进行检查和验证.比如对Java中的类和方法的测试. 测试原则: 1.尽可能保证测试用例相互独立(测试用例中不能直接调用其他类的方法,而应在测试用例中重写模拟方法): 2.此阶段一般由软件的开发人员来实施,用以

软件测试作业三-printPrimes()

作业内容: private static void printPrimes(int n) { int curPrime; int numPrimes; boolean isPrime; int MAXPRIMES=50; int [] primes = new int [MAXPRIMES]; primes [0] = 2; numPrimes = 1; curPrime = 2; while (numPrimes < n) { curPrime++; isPrime = true; for (

软件测试作业3 printPrimes()的测试覆盖

printPrimes(): public static String printPrimes(int n){         int max=100;        int curPrime;         int numPrimes;         boolean isPrime;         String result = "";        int [] primes = new int [max];              primes[0] = 2;      

开发人员必备技能:单元测试

说起软件测试四个字,想必大家脑海中浮现的有集成测试.系统测试.黑盒测试.白盒测试等,可能就是没想到会有单元测试. 对于大学是学习软件工程专业出身的同学来说可能会听过这四个字,对工作好几年的职场老鸟可能也听过但是没实际用过居多.绝大多数的开发人员都是忙于把手头的工作开发好,并不会把单元测试纳入工作范畴,他们会说,我连功能开发都忙不过来了,哪有时间去做单元测试,况且还要写测试代码,那不是重复写一篇代码功能吗?但,单元测试真的不值得花时间去做吗,那是因为可能你并不清楚单元测试的投入产出比有多高,下面就

软件测试--作业四

<软件测试>第四次作业 1.某公司网站的后台管理有一个用户注册的功能需要测试,该测试为黑盒测试,请用表格的方式给出该功能的测试用例(参考课本P107页).用户注册功能描述如下: (1)       管理员必须先登录,方可进入网站后台管理,进入后台管理界面后可以进行用户注册(假设用户注册的URL地址为http://www.fengt.com/Admin/UserRegister.jsp) (2)       用户注册要求输入用户名.密码.密码确认.邮箱,这4项内容均不能为空 (3)      

软件测试基本方法(四)之测试过程模型

瀑布模型是最常见也是最基本的过程模型,但实践中受到越来越大的局限性,我认为现代软件越发庞大和复杂,我们往往不能一眼洞穿,加上用户需求的多样化和不确定性,都让瀑布模型力不从心.于是出现了原型模型.迭代模型.敏捷过程模型和并发模型.例如原型模型就是为了加大与用户的交流,挖掘用户真正的需求.这里只是泛泛地谈一谈一些著名的测试过程改进模型. TMM(测试成熟度模型) 过程能力:描述了遵循一个软件测试过程可能达到的预期结果的范围. TMM的建立得益于: 充分吸收CMM的精华 基于历史演化的测试过程 业界的

软件测试的四个阶段

软件测试的对象包括软件需求.概要设计.详细设计.软件运行环境.可运行程序和软件源代码等.软件测试包括质量.人员.资源.技术和流程五大要素,以及测试覆盖率和测试效率两个目标. 软件测试一般分为4个阶段:单元测试.集成测试.系统测试.验收测试. 一.单元测试 单元测试是对软件中的最小可验证单元进行检查和验证.比如对Java中的类和方法的测试. 测试原则: 1.尽可能保证测试用例相互独立(测试用例中不能直接调用其他类的方法,而应在测试用例中重写模拟方法): 2.此阶段一般由软件的开发人员来实施,用以检

软件测试这四年

六月尾了,多么青春的月份.世界杯伴随着高考结束大学毕业,转眼从事软件测试工作四年了.想想当初,培训老师口中的朝阳行业软件测试,到现在依旧朝阳,只能呵呵. 先说说主页君自己,由于他腹黑阴险狡猾,不做测试挺可惜的,所以四年前毅然选择了软件测试这个行当,要说后悔,基本没有,唯一遗憾的是当年应该先去做两年开发再去转测试恐怕是更好的选择吧.所以这里给新人或者入行不久的同行一个忠告:无论是从薪资晋级的角度,还是更好地理解软件生命周期这个角度,先从事两年左右的开发都是一个更好的选择.不过当你选了开发做了两三年

软件测试作业四

<软件测试>第四次作业 软金3班      陈小燕       3137102311 1.某公司网站的后台管理有一个用户注册的功能需要测试,该测试为黑盒测试,请用表格的方式给出该功能的测试用例(参考课本P107页).用户注册功能描述如下: (1)       管理员必须先登录,方可进入网站后台管理,进入后台管理界面后可以进行用户注册(假设用户注册的URL地址为http://www.fengt.com/Admin/UserRegister.jsp) (2)       用户注册要求输入用户名.密