在单元测试过程中所针对的对象主要是模块,其作为软件的最小单位自身质量将会直接影响软件的整体质量。单元测试所参考的依据是详细的描述,单元测试必须对模块中所有重要的控制路径进行设计,并形成测试用例,从而发现模块内部存在的相关问题。单元测试在实际工作过程中绝大多数会采取白盒测试,所有模块的测试工作会并行展开。
单元测试任务
在单元测试过程中所涉及到的内容主要包括:模块接口测试;模块局部的数据结构测试;模块边界条件测试;模块中所有独立执行通路测试;模块的各条错误处理通路测试。而模块接口测试作为单元测试的基础,仅仅在数据能够正确进入并且流出模块的基础上,其他测试开展才会具有意义。在接口测试过程中应当准确考量以下几种因素:
1 输入的实际参数与形式参数的个数是否相同;
2 输入的实际参数与形式参数的属性是否匹配;
3 输入的实际参数与形式参数的量纲是否一致;
4 调用其他模块时所给实际参数的个数是否与被调模块的形参个数相同;
5 调用其他模块时所给实际参数的属性是否与被调模块的形参属性匹配;
6调用其他模块时所给实际参数的量纲是否与被调模块的形参量纲一致;
7 调用预定义函数时所用参数的个数、属性和次序是否正确;
8 是否存在与当前入口点无关的参数引用;
9 是否修改了只读型参数;
10 对全程变量的定义各模块是否一致;
11是否把某些约束作为参数传递。
如果模块内包括外部输入输出,还应该考虑下列因素:
1 文件属性是否正确;
2 OPEN/CLOSE语句是否正确;
3 格式说明与输入输出语句是否匹配;
4缓冲区大小与记录长度是否匹配;
5文件使用前是否已经打开;
6是否处理了文件尾;
7是否处理了输入/输出错误;
8输出信息中是否有文字性错误;
对于局部数据结构的检测目的在于确保临时存储在木块内部的数据在程序执行过程中的完整性和正确性。局部数据结构的问题通常是错误产生的根源,因此必须仔细设计测试用例,从而有效发现下列几种问题:
1 不合适或不相容的类型说明;
2变量无初值;
3变量初始化或省缺值有错;
4不正确的变量名(拼错或不正确地截断);
5出现上溢、下溢和地址异常。
在局部数据结构的基础之上,倘若存在可能,在单元测试过程中应当准确查清全局数据对于模块所产生的影响。
在所有模块中必须对所有独立执行路径进行准确测试,单元测试的核心是确保模块中所有语句执行的正确性。该种设计测试用例的目的在于准确发现错误计算和不正确的比较以及不适合的控制流所产生的错误。该种背景下基本路径测试和循环测试的目的在于获得最为常见测试技术。在实际计算过程中较为常见的错误主要包括以下几点:
1 误解或用错了算符优先级;
2混合类型运算;
3变量初值错;
4精度不够;
5表达式符号错。
比较判断与控制流常常紧密相关,测试用例还应致力于发现下列错误:
1不同数据类型的对象之间进行比较;
2错误地使用逻辑运算符或优先级;
3因计算机表示的局限性,期望理论上相等而实际上不相等的两个量相等;
4比较运算或变量出错;
5循环终止条件或不可能出现;
6迭代发散时不能退出;
7错误地修改了循环变量。
一个好的设计应能预见各种出错条件,并预设各种出错处理通路,出错处理通路同样需要认真测试,测试应着重检查下列问题:
1输出的出错信息难以理解;
2记录的错误与实际遇到的错误不相符;
3在程序自定义的出错处理段运行之前,系统已介入;
4异常处理不当;
5错误陈述中未能提供足够的定位出错信息。
单元测试的最后一个步骤便是边界条件,其自身的重要性不言而喻。众所周知,软件常常会出现边界失效的现象,借助边界值分析技术,能够对边界值和左右设计测试用例,继而发现全新错误。
单元测试过程
通常会认为单元测试应当在编码完成之后立即进行,在源程序编制完成之后应当进行复审和编译检查,之后便可以完成单元测试。测试用例的设计应当和复审工作的完美结合,根据设计信息选择测试的相关数据,继而增大发现错误的可能性。在确定测试用例的同时,应当给出期待的结果。
在测试模块的开发过程中应当开发驱动模块和多个桩模块。其中驱动模块在绝大多数场合中都被称之为主程序,其接收测试数据并且将所有接收到的数据传送到测试模块中,被测试模块被调用之后,主程序将会打印进入和退出的消息。
驱动模块和桩模块作为测试过程中所使用的软件,其并不是软件产品的组成部分,因此其需求一定的费用进行开发。倘若驱动和桩模块比较简单,那么最终的实际开销将会更小。但是在实际操作过程中,简单的驱动模块和桩模块并不能完成部分既定测试任务,因此实际应用并不多见。
促使模块内部聚度的提升能够简化单元测试,倘若所有模块只能完成一个,那么其所必须测试用例的数量将会显著减少,因此其中存在的错误也会更容易被发现。
本文转自:简书
微信号:IdeaofSE
联系客服