TinyOS论文07:MILU :

来源:互联网 发布:常见设计模式 java 编辑:程序博客网 时间:2024/06/05 18:50

MiLu:一个可定制、运行时优化、高阶的C语言变异测试工具;
1. MiLu:C语言变异测试工具
1、一阶 + 高阶变异测试
2、之前的工具是将所有可能的变异算子应用到测试中;而MiLu可以指定应用到测试中的变异算子;
3、为减少运行时开销,MiLu使用“测试治理(test harness)”技术将变异体和测试集嵌入到测试程序中。
2. background介绍了现有的一些变异测试工具。其中for C的有:Proteum(开源) + Plextest/Isure++(商业化)
3. Muli的基本功能:根据指定变异算子生成变异体 + 根据给定的测试集执行变异程序 + 报告变异scores(一个衡量测试集充分性的量)
4. Muli的体系结构:
这里写图片描述
5. Muli变异测试的有效性。

Abstract

  1. MiLu:C语言变异测试工具
    1、一阶 + 高阶变异测试
    2、之前的工具是将所有可能的变异算子应用到测试中;而MiLu可以指定应用到测试中的变异算子;
    3、为减少运行时开销,MiLu使用“测试治理(test harness)”技术将变异体和测试集嵌入到测试程序中。

Introduce

  1. 变异测试:p + 变异算子 = p’;变异算子执行1次为一阶变异体(FOMs);多次为高阶变异体(HOMs);
  2. FOMs:p’杀死 + 存活 + 测试集T的充分等级
  3. HOMs:比一阶更难杀死;
  4. MiLu采用了77种变异算子 + 可定制变异算子

Background

现有的变异测试工具简单介绍:

  1. 变异测试在1987年提出
  2. 开源的有:

1、Mothra for Fortran;
2、Proteum for C;
3、mujava for java;
4、PesTer for Python;
5、Nester for C#;
6、SQLMutation for SQL

  1. 商业化产品:7
    1、Plextest for C++;
    2、Isure++ for C and C++;
    3、certitude for 功能性测试

MiLu体系结构

  1. MiLu提供的两组变异测试模式——一阶变异测试模式:
    1、:预定义的变异算子 + 自己定制的变异算子
    2、MiLu做的工作:生成变异体 + 执行给定的测试机 + 报告变异分数;
  2. MiLu提供的两组变异测试模式——高阶变异测试模式
    1、用户可以选择预定义的搜索优化算法,也可以指定他们自己的算法和合适的函数来查找分类的HOMs;
    2、分类的HOMs也能应用到FOMs;
    3、MiLu提供了良好的界面和API,研究人员可以通过这些API编写成圣和评估变异体的插件;
  3. MiLu的体系结构
    这里写图片描述
    1、包含三个部分(都提供了相应的接口供用户扩展相应组件的特点):
    ①、源码分析器(SCA):是一个C语言解析器,以C代码为输入,将C代码解析成token列表;为了支持子序列变异算子的定制,不只是语法、上下文信息也会被保存。SCA也会根据这些语法构建成相应的抽象语法树(AST)。
    ②、编译系统(MTS):MTS以AST和变异算子为输入生成变异体模板; + 每一个变异体被表示成整形向量Mutation ID;变异模板用来生成Mutation ID。
    ③、测试和评估系统(TES):执行变异体程序;将MTS中的变异体传给GCC编译器,GCC编译器并不是将它编译成可执行的程序,而是编译成共享的类库 + 为了优化执行开销,使用“测试治理”,它能通过调用共享库的变异体动态调用测试用例。

Flexibility

MiLu允许用户使用一种脚本语言来定制变异算子来增强MiLu的灵活性。

  1. MiLu为用户提供了一个脚本语言——变异算子约束脚本语言(MOCS)来制定变异算子,MOCS为任何编译算子添加约束。约束类型包括两种:直接替代约束 + 环境条件约束;
  2. 直接替代约束:允许用户选择一个指定的转换规则来执行替代,例如== 替换成 = ,而不用在被替换成><啊其它的了(简单但是灵活性高)
  3. 环境条件约束:在特定的范围内指定变异算子操作而不用针对整个程序。例如只替代if语句中的操作算子:[if]ORRE,可以跟直接替代约束一起使用。

Efficiency

使用其他变异测试工具的优化技术和引入“测试治理”技术来优化MiLu的执行、

  1. 现有的优化技术有:
    1、基于解释器技术:小规模的变异可行,大的就不适用;
    2、基于编译器技术:效率比1高但是会引入额外开销;
    3、基于突变模式技术:减少了2的额外开销,速度上比2高效。
    (前三者都是对编译时到的优化)
  2. 最新的优化技术十针对运行时而非编译时
    1、MiLu中,一个测试治理包含了所有的测试用例和相应的设置,每一个变异体被编译成一个共享的类库,这些类库能被测试治理动态调用,只需执行测试治理,变异体程序被当做函数来调用。
    2.这种方法比运行每一个变异体效率高很多。
0 0