Localizing Failure-Inducing Program Edits Basedon Spectrum Information

基于频谱信息,定位导致程序故障的编辑

总结

  • 本文是ekstazi的对比工具,ekstazi相比其有一定的时间提升。但ekstazi没有select affecting change的功能

  • 是Chianti的升级版

    • 修复了一些对于静态变量、变量的override导致的unsafety
    • 同时affecting change的选择增加了基于频率的排序,原因寻找更加准确

Abstract

  • 变更影响分析是一种在迭代系统中寻找错误的广泛使用的方法

  • 定位错误源困难

    • 错误源候选项太多 – Chianti

    • FAULTTRACER

      • 在回归测试选择上类似,修复了一些安全问题
      • 在确定影响因子上有大约20%的提升

INTRO

  • 回归测试困难、定位错误困难

  • Chianti缺点:

    • 影响因子候选项太多:ant6-7版本,大约有22-182平均100个原子更改候选
  • 新技术:基于频谱的语句上的错误定位(没有两个版本程序对比,导致定位候选过多)

  • 频谱信息+错误定位

  • 贡献:

    • 迭代系统的故障定位:基于频谱采用四种算法的故障定位
    • ECG:扩展调用图
    • 实验验证

RELATED WORK

  • 变更影响分析:测试选择
  • 错误定位

FaultTracer

  • 过程:

      1. 计算原子更改和依赖
      2. 通过分析测试对应的ECG,选择测试
      3. 如果测试失败,选择有关的更改/影响因子
      4. 使用频谱信息对影响因子进行排序
  • A 基于ECG的变更影响分析

    • 原子更改

      • 通过对比抽象语法树来计算原子更改
      • 引入 LCf
      • Localizing Failure-Inducing Program Edits Basedon Spectrum Information_第1张图片
    • 原子更改依赖

      • Chianti:假阳性依赖

        • 未很好处理方法重载和变量隐藏
      • Callee(m) Access(m)

      • Localizing Failure-Inducing Program Edits Basedon Spectrum Information_第2张图片

        • 第二排:LCf: 变更c属于AF或者DF,并且f造成了lc改变
        • 第三排:m调用m', m'是AM,并且m'重载的所有方法也属于AM, 那么m'依赖于m
        • 避免了:任何被覆盖的方法(或隐藏字段)都可以在没有覆盖的方法(或隐藏字段)的情况下编译新版本。Otherwise, any overridden method (or hidden field) can make the new version compile without the overriding method (or the hiding field)
        • 第四排DM同理
        • 第五排:调用依赖?
      • // 没有明白这段的意思。依赖是为了计算影响因子,这里让依赖更严格?

    • ECG:

      • lookup change

        • 实际接收者,标记方法target

        • 对变量的访问修改

          • Op := FW|FR|SFW|SFR
          • 用不同的操作去匹配
    • 测试选择

        1. 选择方法更改或者读变量
        2. 选择和方法lookup对应的边
        3. 选择和变量lookup对应的边
      • 使用变量ECG的优点

        • 不再需要把CFI和CSFI对应到CM(chainti),这次直接对应节点,CFI对应到FW和FR

        • 避免不使用LCf带来的假阴性选择

        • 举例

        • Localizing Failure-Inducing Program Edits Basedon Spectrum Information_第3张图片

        • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uGm1x1eU-1629982097014)(assets/image-20210826194312-vhcviyl.png)]

        • 测试1、2修改了CSFI(A.f1) and CSFI(A.f2) ,导致CM(A.Clinit)改变。于是Chianti选择了测试1没有选择测试2(只初始化一次) [假阳性]

        • FT没有选择1,因为CSFI(A.f1)对应的是SFW,但是选择2因为识别到f1对应读一个修改

        • Chianti对于测试4没有选择,因为没有识别到LCf的改变

    • 选择影响因子

      • 选择在新ECG上的节点和边

        • 选择所有非lookup-change的改变
        • 选择造成lookup-change的改变
      • 举例

        • 对于test3

        • chianti:

            1. CFI(B.f2), CFI(B.f3), AF(B.f4), CM(B.foo)
            2. CM(B.foo) 依赖于 AF(B.f4)
            3. CM(B.B) 依赖于CFI(B.f2) and CFI(B.f3)
            4. 选择 CFI(B.f2), CFI(B.f3), AF(B.f4)
        • FT

          • CM(B.foo)

          • Localizing Failure-Inducing Program Edits Basedon Spectrum Information_第4张图片

          • 只涉及到对改动f1的读

  • B 基于频谱的排序

    • 使用了四种计算方法

    • 通过计算一个原子更改在所有测试中通过的测试和未通过的次数进行排序

    • Localizing Failure-Inducing Program Edits Basedon Spectrum Information_第5张图片

    • 一些统计上的计算吧

  • C 实现

    • ECG

      • ASM分析工具
    • 原子变更

      • Eclipse JDT toolkit工具
      • 便利抽象语法树,通过字段和方法的完全限定名来比较

EXPERIMENTAL STUDY

  • 两个问题

    • 基于排序的错误因子定位的效果如何
    • 相比Chianti如何
  • B 实验对象选择

    • Localizing Failure-Inducing Program Edits Basedon Spectrum Information_第6张图片
  • E 和Chianti的对比

    • Localizing Failure-Inducing Program Edits Basedon Spectrum Information_第7张图片

    • 几乎一致

    • 区别:

      • , Chianti多选其他类的构造函数发生改变

        • //为什么
      • ,Chianti多选因为构造函数改变

      • 均是由测试没有覆盖的字段变化映射而来

      • 以及另一处FT选择的,因为静态变量的修改并且被读取,因为是配置,所有没有影响结果。但是dangerous

你可能感兴趣的:(论文,程序分析,java,扫描测试工具)