班 级: 2010软件技术
姓 名: 朱家欢
学 号: 20101508150
实验时间: 2012-10-25
一、实验目的:
1、加深课堂所学内容:单元测试的概念以及测试依据、方法、工具及注意事项;
2、了解JUnit测试工具的使用及测试方法,在测试过程中需要考虑的事项,如:算法和逻辑、边界条件、的路径、错误处理等;
3、在测试过程中结合上次实验黑盒测试与白盒测试的方法进行软件单元测试;
二、实验内容
1、首先从网上```下载测试软件JUNIT;
2、掌握Junit的使用方法;
3、利用Junit对实验程序Point2d.java进行单元测试。
三、实验原理与设计
1、单元测试概念:
又称模块测试,是针对软件设计的最小单位,程序模块进行正确性
检验的测试工作。其目的在于发现各模块内部可能存在的各种差错。单元测试集中对用源代码实现的每一个程序单元进行测试,检查各个程序模块是否正确地实现了规定的功能。单元测试需要从程序的内部结构出发设计测试用例,多采用白盒测试技术。 多个模块可以平行地进行单元测试。在单元测试活动中,软件的单元将在与程序的其他部分相隔离的情况下进行测试。
2、单元测试需要考虑的:
模块接口、算法和逻辑、局部数据结构、边界条件、的路径、错误处理。
(1) 模块接口测试
在单元测试的开始,应对通过被测模块的数据流进行测试。只有在数据能正确流入、流出模块的前提下,其他测试才有意义。测试项目包括:
1)调用本模块的输入参数是否正确;
2)本模块调用子模块时输入给子模块的参数是否正确;
3)是否修改了只读型参数;
4)全局量的定义在各模块中是否一致。
(2) 算法和逻辑测试
对软件单元的算法和逻辑进行测试,测试其算法是否正确、可行,使该单元以及其他单元运行达到最优,逻辑的正确与否直接关系到该单元的输出的正确性,最后结果能否达到预期的输出结果。
(3) 局部数据结构检查
局部数据结构是为了保证临时存储在模块内的数据在程序执行过程中完整、正确。局部数据结构往往是错误的根源,应仔细设计测试用例,力求发现下面几类错误:
1)不正确或不一致的数据类型说明
2)使用尚未赋值或尚未初始化的变量
3)错误的初始值或错误的缺省值
4)变量名拼写错或书写错
5)上溢、下溢或地址异常
除了局部数据结构外,如可能,单元测试时还应该查清全局数据(如FORTRAN的公用区)对模块的影响。
(4) 边界条件
边界条件测试是单元测试中最后,也是最重要的一项任务。众所周知,软件经常在边界上失效,采用边界值分析技术,注意数据流、控制流中刚好等于、大于或小于确定的比较值时出错的可能性。对这些地方要仔细地选择测试用例,认真加以测试。
如果对模块运行时间有要求的话,还要专门进行关键路径测试,以确定最坏情况下和平均意义下影响模块运行时间的因素。
(5) 的路径
在模块中应对每一条执行路径进行测试,单元测试的最基本要求是满足语句覆盖。设计测试用例是为了发现因错误计算、不正确的比较和不适当的控制流造成的错误。此时基本路径测试和循环测试是最常用且最有效的测试技术。计算中常见的错误包括:
1)误解或用错了算符优先级;
2)混合类型运算;
3)变量初值错;
4)精度不够;
5)表达式符号错。
(6) 错误处理
一个好的设计应能预见各种出错,并预设各种出错处理,出错处理需认真测试,测试应着重检查下列问题:
1)出错的描述是否难以理解
2)出错的描述是否能够对错误定位
3)显示的错误与实际的错误是否相符
4)对错误条件的处理正确与否
5)在对错误进行处理之前,错误条件是否已经引起系统的干预。
3、xunit工具集并进行简要介绍
Xunit简介:xUnit是能够准确的测试各种类型代码的工具集,这些工具集能够测试软件的不同单元,如:函数和类。xUnit的主要优势在于它可以提供一个自动的解决方案而不需要程序员重复地写同样的测试很多次,也不需要程序员记住每个测试的结果。这样的框架源自于Kent Beck的设计,Kent Beck是最早把Smalltalk如同SUnit一样用的人,如今xUnit的框架测试已经适用于很多中程序设计语言和平台。
整个xUnit框架分成这么几个部分:Test Fixtures、Test Suites、Test Execution、Assertions。
Xunit白盒测试工具集
| 工具名 | 支持语言环境 | 官方站点 |
| Aunit | Ada | http://www.libre.act-europe.fr |
| CppUnit | C++ | http://cppunit.sourceforge.net |
| ComUnit | VB,COM | http://comunit.sourceforge.net |
| Dunit | Delphi | http://dunit.sourceforge.net |
| DotUnit | .Net | http://dotunit.sourceforge.net |
| HttpUnit | Web | http://c2.com/cgi/wiki?HttpUnit |
| HtmlUnit | Web | http://htmlunit.sourceforge.net |
| Jtest | Java | http://www.junit.org |
| JsUnit(Hieatt) | Javascript 1.4以上 | http://www.jsunit.net |
| PhpUnit | Php | http://phpunit.sourceforge.net |
| PerlUnit | Perl | http://perlunit.sourceforge.net |
| XmlUnit | Xml | http://xmlunit.sourceforge.net |
测试驱动开发(Test Driven Development,英文缩写TDD)是极限编程的一个重要组成部分,它的基本思想就是在开发功能代码之前,先编写测试代码。也就是说在明确要开发某个功能后,首先思考如何对这个功能进行测试,并完成测试代码的编写,然后编写相关的代码满足这些测试用例。然后循环进行添加其他功能,直到完成全部功能的开发。代码整洁可用(clean code that works) 是测试驱动开发所追求的目标。
概括起来,测试驱动开发的基本过程如下:
1) 明确当前要完成的功能。可以记录成一个 TODO 列表。
2) 快速完成针对此功能的测试用例编写。
3) 测试代码编译不通过。
4) 编写对应的功能代码。
5) 测试通过。
6) 对代码进行重构,并保证测试通过。
7) 循环完成所有功能的开发。
四、实验步骤
1、修改之前的Calculator的测试结果
2、 修改和完善Calculator类
3、修改后的Calculator的测试用例
4、在完成上述准备工作和试验性初步测试以后进行对PriorDate函数的测试。
五、实验结果与分析
根据设计的测试用例,测出程序有如下BUG:
<1>. 等价类划分:划分输入数据
| 1.年 | 数字范围 | 1990~2050 |
| 有效等价类 | 1990~2050,且是平年,如1997,2005 | |
| 1990~2050,且是闰年,如1996,2000 | ||
| 无效等价类 | 2050以上 | |
| 1990以下 | ||
| 2.月 | 数字范围 | 1~12 |
| 有效等价类 | 1、3、5、7、8、10、12 | |
| 4、6、9、11 | ||
| 2 | ||
| 无效等价类 | 1以下 | |
| 12以上 | ||
| 3.日 | 数字范围 | 1~31 |
| 有效等价类 | 1~28 | |
| 29 | ||
| 30 | ||
| 31 | ||
| 无效等价类 | 1以下 | |
| 31以上 |
| 输入 | 预期输出 | |||
| 编号 | 年 | 月 | 日 | |
| 1 | 2005 | 9 | 10 | 2005年9月11日 |
| 2 | 2052 | 9 | 10 | 您输入的年份不正确! |
| 3 | 1900 | 9 | 10 | 您输入的年份不正确! |
| 4 | 2005 | 15 | 10 | 您输入的月份不正确! |
| 5 | 2005 | 0 | 10 | 您输入的月份不正确! |
| 6 | 2005 | 9 | 35 | 您输入的日期不正确! |
| 7 | 2005 | 9 | 0 | 您输入的日期不正确! |
本次测试涉及预期测试需求,其他各个模块均已实现,测试功能正常,所发现的bug也已修复并验证通过。对比原计划的完成准则:“所有测试用例都覆盖;最后一次回归测试发现缺陷数:0,本次测试已完成,且所测功能已满足需求及质量标准。 下载本文