单元测试
上一篇 / 下一篇 2006-12-10 18:11:14 / 个人分类:软件测试理论
1.1. 单元测试概念
单元测试是对软件基本组成单元进行的测试,这里的基本单元不一定指一个具体的函数(Function或Produre)或一个类的方法(Method)。
单元测试步骤如下:
① 计划单元测试:确定测试需求,制定测试策略,确定测试所用资源(包括人力资源和设备资源),创建测试任务的时间表等。
② 设计单元测试:设计单元测试模型,制定测试方案,确认并结构化测试过程。
③ 实现单元测试:参考测试模型和测试方案,制定具体的测试用例,创建可重用的测试脚本。
④ 执行单元测试:根据单元测试的方案、用例对单元进行测试,验证测试的结果并记录测试过程中出现的缺陷。
⑤ 评估单元测试:对单元测试的结果进行评估。主要从需求覆盖和代码覆盖的角度进行测试完备性的评估。
1.2. 单元测试设计
单元测试设计主要包括单元测试模型的设计和测试项目的设计。
1.2.1. 单元测试模型的设计
因为单元本身不是一个独立的程序,一个完整的、可运行的软件系统并没有形成,所以在测试模型设计中必须为每一个单元测试开发驱动模块和桩模块。在绝大多数应用程序中,驱动模块只是一个接收测试数据并把数据传给要测试的模块,然后打印相关结果的“主程序”。“桩模块”作用是替代那些隶属于本模块(被调用)的模块。桩模块要使用子模块的接口,做少量的数据操作,并验证打印入口处的信息,然后返回。
驱动模块和状模块都是额外的开销,就是说两者都是必须开发,但有不能和最终软件一起提交的软件。构造单元测试模型的主要工作有:
① 构造最小运行调度系统,及驱动模块,用于模拟被测模块的上一级模块;
② 模拟实现单元接口,即单元函数需调用的其他函数接口,即桩模块;
③ 模拟生成测试数据或状态,为单元运行准备动态环境。
1.2.2. 测试项目的设计
测试项目是测试用例的一个总则,主要是根据测试需求设计测试点,不包含具体实现的用例。在测试项目的设计中,主要从功能覆盖和代码覆盖两个角度进行考虑;
功能覆盖属黑盒的范畴,用来指出测试用例是否已经覆盖了程序应该提供的功能。逻辑覆盖率是考核单元测试质量的一个关键指标。
代码覆盖也称逻辑覆盖,包括语句覆盖、分支覆盖、路径覆盖,是一种常用的白盒测试方法;
在单元测试方案中要明确对所测单元的覆盖率要求,并注明得到被测单元覆盖率的方法。建议覆盖率指标:核心代码覆盖率达到100%,共享资源库的代码覆盖率达到100%,非核心代码覆盖率达到90%。
(测试覆盖率?)
1.2.3. 单元测试用例设计方法
① 规范导出法
规范导出的测试是根据相关的规范描述来设计测试用例的。每一个测试用例用来测试一个或多个规范陈述语句。一个比较实际的方法,是根据陈述规范所用语句的顺序来相应的为被测单元设计测试用例。例如,考虑一个计算平方根的规范:
输入:实数
输出:实数
规范:当输入一个0或比0大的数,返回其正的平方根;当输入一个小于0的数时,显示错误信息“平方根非法”,返回0;库函数Print_Line可以输出错误信息。
这个规范可以用以下两个测试用例来对应:
测试用例1:输入4,输出2。
测试用例2:输入-1,输出0。
② 等价类划分
等价类划分是一种正式的测试用例设计方法,它基于对被测试单元的输入、输出所做的划分,对每一个划分中的所有输入、被测单元有等价的行为。划分也可以根据软件所能存取的数据确定,包括时间、输入输出顺序、状态。
上边的例子,输入可以有两个划分,输出可以有两个划分。
输入:(i)<0 ; (ii) >= 0
输出:(a) >= 0 ; (b) Error
这四个划分可以用两个测试用例实现:
测试用例1:输入4,输出2。
测试用例2:输入-1,输出0。
③ 边界值分析法
④ 状态转移测试法
⑤ 分支测试法
⑥ 条件测试法