软件测试组织与管理及测试系列方法(三) 软件测试
(1)采用逻辑覆盖的结构测试。逻辑覆盖又包含以下五种:语句覆盖 、判定覆盖、条件覆盖、判定与条件覆盖、路径覆盖。
(2)域测试。这是一种基于程序结构的测试方法。这里的“域”是指程序的输入空间。域测试正是在分析输入空间的基础上,选择适当的测试点以后进行测试的。
(3)符号测试。符号测试是基于代数运算的一种结构测试方法。符号测试方法受分支问题、二义性问题和大程序问题的困扰,这些问题严重地影响着它的发展前景。
(4)数据流测试。数据流测试是指一个基于通过程序的控制流,从建立的数据目标状态的序列中发现异常的结构测试方法。
(5)定义域测试。定义域测试的重点在分类方面,它还要判断出定义域的正确性。定义域测试与集合理论密切相关。
(6)程序变异测试。这是一种基于程序错误的测试方法,它的目的是要说明程序中不含有某些特定的错误。
3.测试步骤
软件测试过程一般按四个步骤进行,即单元测试、集成测试、确认测试和系统测试。
(1)单元测试
也称模块测试,这是针对软件设计的最小单位-模块进行正确性检验的测试工作,其目的在于发现各模块内部可能存在的各种差错。单元测试的依据是详细设计描述,单元测试应对模块内所有重要的控制路径设计测试用例,以便发现模块内部的错误。单元测试多采用结构测试(白盒测试)技术,系统内多个模块可以并行地进行测试。
a.单元测试的任务
单元测试任务包括:(1)模块接口测试;(2)模块局部数据结构测试;(3)模块边界条件测试;(4)模块中所有独立执行通路测试;(5)模块的各条错误处理通路测试。
模块接口测试是单元测试的基础。只有在数据能正确流入、流出模块的前提下,其他测试才有意义。测试接口正确与否应该考虑下列因素:(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)错误地修改了循环变量。