lecture5whitebox3程序变异测试.ppt

  1. 1、本文档共38页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
变异测试技术 变异测试是一种对测试集的充分性进行评估的技术,以创建更有效的的测试集。 变异测试与路径或数据流测试不同,没有测试数据的选择规则。 变异测试应该与传统的测试技术结合,而不是取代它们。 基本思想 给定一个程序P和一个测试数据集T,通过变异算子为P产生一组变异体Mi(合乎语法的变更),对P和M都使用T进行测试运行,如果某Mi在某个测试输入t上与P产生不同的结果,则该Mi被杀死;若某Mi在所有的测试数据集上都与P产生相同的结果,则称其为活的变异体。接下来对活的变异体进行分析,检查其是否等价于P;对不等价于P的变异体M进行进一步的测试,直到充分性度量达到满意的程度。 程序变异概念(1) 假设程序P已使用测试T中的测试用例测试通过,而且没有错误。变异是一种轻微改变程序的操作。 程序变异概念(2) P’称为P的变异体 如果对于T中的测试t,有P(t)≠P’(t),称作P’与P有区别( distinguishes),或者t杀死(killed)P’. 如果T中所有的测试 t使得P(t)=P’(t),称T不能区别P和P’。那么称在测试过程中P’是活的(live). 如果在程序P的输入域中不存在任何测试用例t使得P与P’ 区别,则称P’等价于P。 如果P’不等价于P,而且T中没有测试能够将P’与P区别,则认为T是不充分的。 不等价而且是活的变异体为测试人员提供了一个生成新测试用例的机会,进而增强测试T。 为什么变异? A Scenario: 程序员开发了一个程序P,按照某种测试充分性准则通过了测试,即将发布,这时会有人指出:程序中的表达式 countmax 还是 countmax+1 问题:为什么替代的方法不正确,或为什么替代的方法比所选的方法更好? 可能的答案: 性能差别 替代方法“不正确”或更好,而现有方法是“正确的” 通过测试用例表明现有的方法与替代的方法是不同的,而且现有的方法是“正确的”。 表明替代方法与现有方法是等价的 变异是一种解决上述问题的系统的方法,变异测试可以发现程序一些细微的错误——表明替代的方法是不正确的。 例:原子反应堆控制软件P 例:原子反应堆控制软件P’-M1 例:原子反应堆控制软件P’-M2 应用变异评估测试的充分性(1) Given a test set T for program P that must meet requirements R, a test adequacy assessment procedure proceeds as follows: Step 1: Create a set M of mutants of P. Let M={M0, M1…Mk}. Note that we have k mutants Step 2: For each mutant Mi find if there exists a t in T such that Mi(t) ≠P(t). If such a t exists then Mi is considered killed and removed from further consideration. 应用变异评估测试的充分性(2) Step 3: At the end of Step 2 suppose that k1(≤ k) mutants have been killed and (k-k1) mutants are live Case 1: (k-k1)=0: T is adequate with respect to mutation. Case 2: (k-k1)0 then we compute the mutation score (MS) as follows: 测试充分性评估过程 第1步:程序执行 P(t)表示给定测试用例t,程序P的执行结果由P中变量的输出值表示(也可能与P的性能有关) 如果P已经采用测试T测试通过,测试结果已保存至数据库中,则这一步可以跳过。 不论何种情况,第一步的结果是对于T中的所有t,P(t)数据库 测试充分性评估过程 第2步:生成变异体 例如“+”运算变成“-”运算,“×”运算变成“/”运算等 系统的生成方法:通过变异算子生成 第二步的结果是:活的变异体 这些变异体还没有与程序P区分,即没有被杀死。 测试充分性评估过程 第3步和第4步:选择下一个变异体 从L中选择,任意选择 测试充分性评估过程 第5步和第6步:选择下一个测试用例 是否存在测试t能够区分变异体与被测试程序P 采用测试T中的测试用例执行变异体M。 结束:所有的测试用例执行完毕或者M被某个测试用例区别(杀掉)

文档评论(0)

xuefei111 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档