【效率工程之路】代码增量分析

什么是代码增量分析?

对已有工程进行变更,其中新增、删除以及更新的部分,就是代码的增量。在测试驱动的开发中,基本上每一个新增的函数都会有响应的测试函数,但是对于“非线性”工作的人而言,测试驱动就像是要求一个调皮的学生在队列中安安静静的站着,基本上是不可能实现的。
代码增量分析是指通过对代码增量的分析,指出单元测试应当覆盖的新增部分,有效评估测试范围。

基于方法的代码增量分析

方法代码是程序的可执行逻辑,在代码增量分析中最有价值的就是方法的增量分析。新增、删除和更新分别代表不同的增量模型δ,假定有两个代码模型A和B,定义 B - A = δ为两个模型之间的增量,则δ必然与B或A同构,从而使得 A + δ = B。
通过取消 A + δ = B的性质,可以避免δ与A或B同构,从而可以产生δ的投影,在编程语言中,这种模型更加自然。可Java中,可定义非同构δ的模型为:

CompilationCodeBaseDiff {
    Map<String,ClassCodeBaseDiff> classCodeBaseDiff;
}

ClassCodeBaseDiff {
   type; // created, deleted,updated
   role;// 类的角色:test, biz(默认), util, framework
   Map<String,MethodCodeBaseDiff> methodCodeBaseDiff;// 方法内的不同,deleted时留空 
}

MethodCodeBase {
    methodName 
    methodSignature  // (methodName,methodSignature) -> ID
    type; // created,deleted, updated
    body; // 方法体(可选)
    originalBody;// 原有方法体(可选)
    role; // 方法的角色: test, biz(默认), util, framework
}

量化代码增量分析

量化是一种典型的reduce思维。代码增量的量化方法并不唯一,取决于评价的目的。

量化指标:1.变动方法数量 2.编辑距离绝对值之和 3.单个方法行数

对增量分析结果进行可视化

自动化工具

1.自动生成测试用例
通过role来区分测试代码(role=test)和非测试代码(role!=test), 测试代码是对非测试代码的验证,测试代码无需验证自身。

测试类 -> 类名+Test
测试方法 -> test+方法名+ “_”+ 额外描述

增量分析模式:通过分析diff中的差异,标记出新增或更新的方法,然后查找这些方法在新的code base中的测试方法,如果一个都没有,则生成一个空的测试模板。

全量分析模式:遍历代码中的非测试方法,查找相应的测试方法,如果查找不到对应的方法,则生成空的测试模板。

2.触发关联的的测试用例自动执行
收集所有的测试用例,然后执行。

如果一个方法产生更新,则确定其所有关联测试方法,执行这些测试方法。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值