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.③ 边界值分析法④ 状态转移测试法⑤ 分支测试法⑥ 条件测试法⑦ 数据定义法——使用测试法(数据流测试法)
⑧ 内部边界值测试法⑨ 错误猜测法1.3. 单元测试的执行1.3.1. 测试的结论测试的结论与执行被测试的单元中模拟目标环境下的程序执行精确性相关。为保证在估计这些特征时所有的环境因素均被考虑,必须小心。例如,所以的隐性输入必须被考虑(如系统时间,文件状态,单元加载地点),还有实际环境的代表物(即相同的编译器,加载者,操作系统,计算机,输入分布)也是测试环境必须考虑的。
1.3.2. 自动测试自动测试大大提高工作效率。便于回归测试。一般来说自动测试有两种方式:一种是使用商业化的测试工具;另一种是自行开发一些工具来进行。
1.4. 单元测试的评估单元测试完成后,需要对单元测试执行的效果进行评估,主要从以下几方面进行:① 测试完备性评估,主要检查测试过程中是否已经执行了所有的测试用例,对新增的测试用例是否已及时更新测试方案等。
② 代码覆盖率评估。主要根据代码覆盖率工具提供的语句覆盖情况报告,检查是否达到方案中的要求。
1.4.1. 单元测试① 单元测试的四个过程:v 检查编码是否遵循软件编程规范和标准;v 自动或手工分析程序;v 设计测试用例并运行测试用例;v 错误跟踪分析② 测试应该覆盖:v 功能覆盖;v 输入域覆盖;v 输出域覆盖;v 函数交互覆盖;v 代码执行覆盖。

