分享软件测试中那些常用的白盒测试方法 | 当前位置: 首页> 学习中心> 测试知识> 详情 |
从是否考虑程序内部结构和内部特性的角度,测试方法可分为白盒测试、黑盒测试和灰盒测试。软件单元测试和软件集成测试一般采用白盒测试方法,辅助以黑盒测试方法;配置项测试、配置项集成测试和系统测试一般采用黑盒测试方法,辅助以白盒测试方法。今天我们介绍一下软件测试中常用的那些白盒测试方法。
一、控制流测试
依据控制流程图产生测试用例,通过对不同控制结构成份的测试,验证程序的控制结构。所谓验证某种控制结构,即指使这种控制结构在程序运行中得到执行,也称这一过程为覆盖。
常用的覆盖有语句覆盖、分支覆盖、条件覆盖、条件组合覆盖、修正的条件判定覆盖(MC/DC)、路径覆盖等。
控制流测试的标准步骤为:
a) 将程序流程图转换成控制流图;
b) 经过语法分析求得路径表达式;
c) 生成路径树;
d) 进行路径编码;
e) 经过译码得到执行的路径;
f) 通过路径枚举产生特定路径的测试用例。
当然,如果被测代码的逻辑比较简单,也可以适当简化上述步骤。
二、数据流测试
数据流测试是用控制流程图对变量的定义和引用进行分析,查找出未定义的变量或定义了而未使用的变量,这些变量可能是拼错的变量、变量混淆或丢失了语句。数据流测试通过一定的覆盖准则,检查程序中每个数据对象的每次定义、使用和消除的情况。
数据流测试方法的标准步骤为:
a) 将程序流程图转换成控制流图;
b) 在每个链路上标注对有关变量的数据操作的操作符号或符号序列;
c) 选定数据流测试策略;
d) 根据测试策略得到测试路径;
e) 根据路径可以获得测试输入数据和测试用例。
静态的数据流测试一般使用测试工具自动进行。动态数据流异常检查在程序运行时执行,获得的是对数据对象的真实操作序列,克服了静态分析检查的局限,但动态方式检查是沿与测试输入有关的一部分路径进行的,检查的全面性和程序结构覆盖有关。
三、程序插桩
程序插桩是向被测程序中插入操作以实现测试目的方法。程序插桩不应该影响被测程序的运行过程和功能。
由于数据记录量大,手工进行将是一件很烦琐的事,所以程序插桩一般会直接采用测试工具进行。
注意,这里的程序插桩需要与通常说的单元测试时对函数的打桩区别开来,这里的程序插桩是指在保证被测程序原有逻辑完整性的基础上在程序中插入一些探针(本质上就是进行信息采集的代码段,可以是赋值语句或采集覆盖信息的函数调用),通过探针的执行并抛出程序运行的特征数据。也就是通过程序插桩的方式来检测被测代码的执行覆盖情况。
四、接口打桩
桩,是指用来代替关联代码或者未实现代码的代码,也就是我们在做软件单元测试时常说的对接口函数打桩。打桩的目的主要有:隔离、补齐、控制。
隔离:将测试任务之外的,并且与测试任务相关的代码,用桩来代替,从而实现分离测试任务。补齐:用桩来代替未实现的代码。控制:在测试时,人为设定相关代码的行为,使之符合测试需求。
五、程序变异
程序变异是一种错误驱动测试方法。该方法针对某类特定程序错误,定义一系列的变异算子,将变异算子作用于程序代码,产生若干符合语法的变异体,实际是将故障植入程序,用测试数据逐个测试变异体。根据变异程度的不同,可以分为强变异和弱变异。程序变异方法具有针对性强、系统性强的特点,在对软件进行测试的同时,也可评价测试用例集的错误检测能力。
有别于基于需求的覆盖测试和基于结构的覆盖测试,变异测试则更为直接的选择了缺陷覆盖。因为变异测试相信如果一个测试用例集能够发现人为注入的这些缺陷,也存在极大的可能会发现那些我们并不知道的缺陷。基于这样的思路,在测试之前,需要对被测试的程序进行变异,然后利用测试用例来杀死这些变异体,以获取与注入缺陷类型相同或相近的那些隐藏缺陷。
六、域测试
域测试是要判别程序对输入空间的划分是否正确。该方法限制较多,使用不方便,供有特殊要求的测试使用。
七、符号求值
符号求值是允许数值变量取“符号值”以及数值。符号求值可以检查公式的执行结果是否达到程序预期的目的,也可以通过程序的符号执行,产生出程序的路径,用于产生测试数据。
符号求值最好使用工具,在公式分支较少时手工推导也是可行的。
总结
以上就是软件测试中的一些白盒测试方法,其中最常用的当属控制流测试、数据流测试、程序插桩和接口打桩。后三种用得比较少,仅供了解。你都学会了吗?
更多软件测试相关推荐:
文章来源:网络 版权归原作者所有
上文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8103),我们将立即处理