软件测试培训

亿元级外企Java培训企业

  • 全国服务监督电话400-827-0010
软件测试培训 > 软件测试教程 > 白盒测试方法--变异测试
  • 白盒测试方法--变异测试

    发布:软件测试培训  来源:软件测试教程  时间: 2016年09月20日

  • 变异测试技术是一种对测试集的充分性进行评估的技术,以创建更有效的测试集。变异测试与路径或者数据流测试不同,...

  • 变异测试技术是一种对测试集的充分性进行评估的技术,以创建更有效的测试集。变异测试与路径或者数据流测试不同,没有测试数据的选取规则。变异测试应该与传统的测试技术结合,而不是取代它们。

    举个例子:我们在项目中进行单元测试,编写单元测试用例保证被测程序的正确性。我们通常使用覆盖度来作为单元测试的标准。

    被测试程序foo(intx,int y)设计测试用例

    如图:被测试程序foo(intx,int y)设计测试用例

    a.输入:x = 1 , y = 0 输出:0

    b.输入:x = -1 , y = 0 输出:-1

    测试用例满足了条件覆盖和分支覆盖的标准,可是我们的设计的测试用例是否充分呢?这里给大家介绍变异测试技术来完善我们的测试用例。

    变异测试的基本思想:

    给定一个程序P和一个测试数据集T,通过变异算子为P产生一组变异体Pn(P0、P1……Pn),对P和Pn都使用T进行测试运行,如果Pi在摸个测试输入t上与P产生不同的结果,则该Pi被杀死;若Pi在所有的测试数据及上都与P产生相同的结果,则称其为活的变异体。接下来对活的变异体进行分析,检查其是否等价于P;对于不等价与P的变异体Pi进行进一步的测试,直到充分性度量到满意的程度。

    变异测试充分性评估过程:

    Step1:程序执行

    l P(t)表示给定测试用例t,程序P的执行结果由P中变量的输出值表示(也可能与P的性能有关)

    l 如果P已经采用测试T测试通过,测试结果已保存至数据库中,则这一步可以跳过。

    l 不论何种情况,第一步的结果是对于T中的所有t,P(t)数据库

    Step2:生成变异体

    l 例如“+”运算变成“-”运算,“×”运算变成“/”运算等

    l 系统的生成方法:通过变异算子生成

    l 第二步的结果是:活的变异体

    Step3:选择下一个变异体

    l 从L中选择,任意选择

    Step4:选择下一个测试用例

    l 是否存在测试t能够区分变异体与被测试程序P

    l 采用测试T中的测试用例执行变异体M。

    l 结束:所有的测试用例执行完毕或者M被某个测试用例区别(杀掉)。

    Step5:变异体执行和分类

    l 变异体执行的结果是否与P的执行结果相同或不同

    Step6:活体变异

    l 如果没有测试用例能够区分变异体与P,则该变异体存活,并被放回活变异体集合L中。

    Step7:等价变异体

    l 如果对于程序P的输入域中的每一个输入,变异体M的执行结果等于P的执行结果,则认为M等价于P。

    Step8:变异数的计算

    l 量化评价指标:

    4 =1代表相关于变异T是充分的

    4 <1表示相关于变异T是不充分的

    4 可以通过增加额外的测试用例提高变异数

    l T的变异数记为MS(T)

    |D|表示:杀死的变异体数

    |L|表示:表示活的变异体数

    |E|表示:等价的变异体数

    |M|表示:第2步生成的所有变异体数

    测试增强

    设计测试用例

    如上图:设计测试用例T {t1:, t2:}来覆盖foo被测函数。

    变异后生成的被测程序编译体P1,使用测试集T对程序P和变异体P1进行运行,无法区分P与P1。增加一个测试用例,使得P和P1区别,表明增强了T。我们使用这种方法对单元测试用例进行增强,使我们的单元测试用例足以应对程序的简单变化,及时发现代码中的问题。

  • 上一篇:运行时动态加载本地库和全局库函数文件-QTP自动化测试

    下一篇:浅谈白盒测试

相关资讯
网站导航
2001-2016 达内国际公司(TARENA INTERNATIONAL,INC.) 版权所有 京ICP证08000853号-56