Chianti: A Tool for Change Impact Analysis of Java Programs

Chianti- Java下代码变更影响分析工具

www.fireknight.tech 个人博客,欢迎访问,CSDN不定期更新

  • 总结

    • 目标
      • 代码更改和测试相关联
    • 三个贡献
      • 根据变更找测试,代码更改,观察特定测试的变化
      • 回归测试选择,只选择可能被更改影响的测试
      • 更快debug
  • ABSTRACT

    • chianti分析变动,变动显示于测试。对被变动影响了的测试,chianti可以找出对应的变动
    • 对于Daikon, 每次改变有52%测试被影响,但每个测试只被3.95%原子改变影响
  • INTRO

    • 问题:子类型和动态分配、方法更改或者对象创建、方法重载都会导致调用程序流难以分析
    • 应用
      • 观察变动对测试的影响,进行合适的代码变更
        • // 条件:当前调用图,两版代码
      • 精准回归测试
        • // 条件: 实质同上
      • 用于debug
        • // 关联对每个测试,寻找可能的变动。条件: 两版调用图,两版代码
    • 过程
        1. 源代码映射到方法级别的原子更改
        2. 对每个测试构建调用图
        3. 对于每个更改,将代码变动和原始版本的测试的调用图相关联,得到受影响的测试子集
        4. 对于给定的测试,分析影响其的更改。通过构造新的调用图,并将调用图与更改相关联得到
  • OVERVIEW

    • 各种原子修改的引入
    • 调用图:节点为方法,边为方法调用
    • 变更计算
    • 分析对应的公式
  • Changes – Change Impact Analysis for Object-Oriented Programs内容,对应本文overview

    • 本文将修改分为以下几个部分

      • 在这里插入图片描述
    • 将代码修改映射为原子变更

      • 任何代码都可以对应到特定的原子变更
    • 各个原子的详细介绍见论文

    • Changes affecting method dispatch – LC的详细介绍(lookup change)

      • 在这里插入图片描述

      • lookup

        • 三个参数:
          • 运行时接收者
          • 静态标记方法
          • 实际调用方法
        • <C, A.m, B.m> A.m是声明方法,C继承于A,B是C的最近的祖先并且包含了A.m,即C < B < A
      • LC

        • <C, A.m>
        • 计算
          • 按照定义从头开始建模运行时类型和方法签名的层次结构,但有开销
          • 每次编辑后更新lookup映射 √ 见后文
      • SameLookup(B, f())

        • 在每次的调用后,最终都调用了B.f(), 有C<B<Y的继承关系
    • 变更计算

      • 在这里插入图片描述

      • 举例关于LC的计算

        • LC是标识当前代码调用的符号关系代号,新旧版本的相同LC实际含义发生变更,则有代码变更影响
        • 举例
          • 原来有Professor.toString(),会有lookup如下

            • 在这里插入图片描述
          • 增加Person.toString(),会有lookup如下

            • 在这里插入图片描述
          • LC为

            • 在这里插入图片描述

            • 这两个代表的动态调用发生了变化

    • 顺序

      • 原子变更是相互独立的,但在组成新版本代码时有顺序关系
      • 只考虑必须满足以确保可编译性的语法依赖关系。
      • 变更之间没有语法依赖。单个的变更可以生成新的程序p’,并且p’也是可运行的。变更组合会形成P’(新代码)
  • 代码变动影响分析 – Change Impact Analysis for Object-Oriented Programs内容,对应本文overview

    • 程序P,测试T = t1, · · · , tn
    • Nodes(P, ti) 测试ti经过的方法
    • Edges(P, ti) 方法调用
      • A.m →C B.n A.m到B.n通过对C的调用
    • 计算
      • 在这里插入图片描述

      • AffectedTests(T ,A) 受A影响的测试

        • 对于每一个测试,测试经过的Nodes(P, ti)有过修改,并且调用发生了Lookup change, 则测试受到影响
        • 如果测试的调用图(在程序的原始版本中)包含一个节点,该节点对应于已更改的方法(CM)或已删除的方法(DM)更改,或者测试的调用图包含一个边,该边对应于查找更改(LC),则测试被确定为受影响(本文定义)
          • 注意:P3 it is easy to see that 实例讲解
        • 有一次当前调用图,然后修改。精确测试回归选择:可以找到影响了的测试
      • AffectingChanges(t,A) 影响测试t的代码变更

        • 对任何一个修改,如果修改在测试t的路径(新测试的节点)上,或者修改属于lookupchange(LC涉及到新测试t的调用),则修改影响了测试t
        • 为了计算影响给定受影响测试的更改,我们需要在程序的编辑版本中为该测试构建一个调用图。①所有原子变化添加方法(AM)和更改方法(CM)对应于调用图中的一个节点(在编辑程序) ②LC在新版调用图的边中 (本文定义)
          • 注意:P3 it is easy to see that 实例讲解
        • 两个版本代码,两个调用图。可以找到测试对应的修改。
    • 效果:
      • 代码变动,affectedTest为空,说明测试不足。affectTest是找到影响的测试,如果没找到,就说明测试不足。
      • 代码变动,affectTest不为空,说明有测试受到影响。则测试是否需要修改是程序员要考虑的问题。
      • 代码修改后,测试可能产生错误。使用affectingChange寻找相关修改,用来debug。
  • ATOMIC CHANGES AND THEIR DEPENDENCES

    • Atomic changes – 代码中分情况研究

      • Initializers, Constructors, and Fields.

        • 在这里插入图片描述
      • Overloading

        • 对应为CM
      • Hierarchy changes

        • 对应为CM
          • 在这里插入图片描述

          • CM(Test:foo())

      • Threads and Concurrency

        • synchronized 块的修改对应为CM
        • 线程进程不影响调用图的生成
      • Exception handling

        • CM
      • Changes to CM and LC

        • CM与LC的详细定义
    • Dependences
      • 主要为了LC进行依赖分析
  • Engineering Issues

    • 对匿名类的处理
      • Chianti对比代码,分析类时需要根据类名比对,但匿名类没有固定类名
      • 新类名为:enclosingClassName, enclosingElementName, selfSuperclassInterfaceName, sequenceNumer
  • 原型

    • 在这里插入图片描述
  • 评估

    • Daikon 2002年一年内代码以周为单位进行分析
    • Atomic Changes
      • Atomic Changes分析
    • Affected Tests and Affecting Changes
      • 图表分析
  • 相关工作 – 重点

    • Change Impact Analysis Techniques
      • 代码变更影响分析技术
    • Regression Test Selection
      • 回归测试选择
    • Controlling the Change Process
      • 不知道说了个啥,一种代码变更控制技术?
  • FUTURE WORK

    • 静态调用图和动态调用图方法比对
    • 更细粒度的更改单元
      • 当前CM的多种类型更改被视为一种
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值