单元测试
概念:单元测试又称模块测试,属于白盒测试,为最小的测试单位(模块或函数),要求对所有的局部和全局的数据结构、外部接口和程序代码的关键部分进行桌面检查和代码审查。
模块分为程序模块和功能模块,其中功能模块指实现了一个完整功能的模块(单元),一个完整的程序单元具备输入、加工和输出三个环节。每个程序单元都应该有正规的规格说明,使之对其输入、加工和输出的关系做出名明确的描述。
测试内容:模块接口、局部数据、边界条件、独立路径和出错处理。
模块接口:测试模块的数据流。如果数据不能正确地输入和输出,就谈不上进行其他测试。因此,对于模块接口需要如下的测试项目:
1.调用所测模块时的输入参数与模块的形式参数在个数、属性、顺序上是否匹配;
2.所测模块调用子模块时,输入子模块的参数与子模块的形式参数在个数、属性、顺序上是否匹配;
3.是否修改了只做输入用的形式参数;
4.输出给标准函数的参数在个数、属性、顺序上是否匹配;
5.全局变量的定义在各模块中是否一致;
6.限制是否通过形式参数来传送。
局部数据结构测试:模块的局部数据结构是最常见的错误来源,应设计测试用例以检查以下各种错误:
1.检查不正确或不一致的数据类型说明;
2.使用尚未赋值或尚未初始化的变量;
3.错误的初始值或错误的默认值;
4.变量名拼写错误或书写错误;
5.不一致的数据类型。
路径测试:对基本执行路径和循环进行测试会发现大量的错误。根据白盒测试和黑盒测试用例设计方法设计测试用例。设计测试用例查找由于错误的计算、不正确的比较或不正常的控制流而导致的错误。
常见的不正确的计算有:
1.运算的优先次序不正确或误解了运算的优先次序;
2.运算的方式错误(运算的对象彼此在类型上不相容);
3.算法错误;
4.初始化不正确;
5.运算精度不够;
6.表达式的符号表示不正确等。
常见的比较和控制流错误有:
1.不同数据类型的比较;
2.不正确的逻辑运算符或优先次序;
3.因浮点运算精度问题而造成的两值比较不等;
4.关系表达式中不正确的变量和比较符;
5.“差1错”,即不正确地多循环或少循环一次;
6.错误的或不可能的循环终止条件;
7.当遇到发散的迭代时不能终止循环;
8.不适当地修改了循环变量等。
错误处理测试:比较完善的模块设计要求能预见出错的条件,并设置适当的出错处理对策,以便在程序出错时,能对出错程序重新做安排,保证其逻辑上的正确性。这种出错处理也是模块功能的一部分。表明出错处理模块有错误或缺陷的情况有:
1.出错的描述难以理解;
2.出错的描述不足以对错误定位和确定出错的原因;
3.显示的错误与实际的错误不符;
4.对错误条件的处理不正确;
5.在对错误进行处理之前,错误条件已经引起系统的干预;
6.如果出错情况不予考虑,那么检查恢复正常后模块可否正常工作。
边界测试:边界上出现错误上常见的。设计测试用例检查:
1.在n次循环的第0次、1次、n次是否有错误;
2.运算或判断中取最大最小值时是否有错误;
3.数据流、控制流中刚好等于、大于、小于确定的比较值时是否出现错误;
单元测试不但保证局部代码的质量,同时使开发过程自然而然地变得"敏捷"。单元测试对项目或产品的整个生命周期都具有积极的影响:
对需求分析、设计的影响:自动回归测试可以发现代码修改所引入的错误,使开发过程可以适应频繁变化的需求,减轻需求分析和架构设计的压力,轻松实现螺旋式的开发过程。
对后期测试的影响:由于代码错误已很少,大幅减少集成测试和系统测试的成本,自动回归测试也使修正错误的成本大量降低。对维护、升级的影响:高质量的产品大量降低维护费用,另一方面,升级相当于需求的增加或变化,自动回归测试也会产生重要的作用。实施或改进单元测试,是低投入、高效益的技术进步,将极大地提升软件企业和软件产品的竞争力。