| 精准化测试原理简介与实践探索

本文探讨了精准测试的重要性,指出全面测试的困难和自动化测试的局限性。通过分析代码和字节码,提取调用链和覆盖率信息,以实现更精确的测试覆盖。同时,文章提到了覆盖率统计工具Jacoco,并讨论了增量覆盖率和调用链在接口测试中的应用,旨在提高测试效率和准确性。
摘要由CSDN通过智能技术生成

客户端的页面通过 XML 来实现 UI 的布局,页面的 UI 布局作为一个树形结构,而树叶被定义为节点。这里的节点也就对应了我们要定位的元素,节点的上级节点,定义了元素的布局结构。在 XML 布局中可以使用 XPath 进行节点的定位。

↑点击上方卡片关注我↑

小时候大家应该都玩过一个游戏,游戏很简单,就是找不同,在规定时间内两幅图直接的差异点找到就算赢,越快越好,就像下面这样:

上面这个不同点想找很简单,那么下面这样的呢?

这个,确实有的人会说"我可以!" 。比如在综艺节目"最强大脑"中,这群"变态"的非人类确实可以

反正我不行,我也不信你们看到文章这里的人可以~我只有最菜大脑

理论上,我们全面的测试覆盖,肯定就就可以保证,那么我们先看下下面的代码:

这是一份涉及订单状态的各种枚举,每一个状态的背后都有其业务逻辑,甚至还有交叉,假若按照笛卡尔积或者正交的方式来进行用例设计与覆盖,有。。。好多好多用例


[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DnvlkS1K-1651043988448)(https://ceshiren.com/uploads/default/original/3X/c/0/c07e57fd40c8c43caab152a537473653948b23e4.png)]

  • 那么~你真的有那么多时间去全覆盖吗?
  • 开发:我改了点代码,等会帮忙全面回归一遍吧
  • 测试:好的(*** bi~~ ***)
  • 什么?自动化?Are you sure?
  • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LoR8z3Du-1651043989501)(https://ceshiren.com/uploads/default/original/3X/2/e/2ef0b6195bb12bb836cd4452746e64c8bed296c7.png)]
  • 测试发展到如今,好像不会点自动化,都不好意思叫测试,简历上不写点自动化都拿不出手,但是自动化真的是测试的银弹不,做过的应该深有感触,自动化属于一个奢侈品:
  • 开发正本
    • 维护成本
    • 如何使用
    • 用例的设计合理性
    • 新功能的滞后性
      再者,你确定你真的覆盖到了被测代码?也就是相当于魔方墙上的每个色块,实际在黑盒测试的过程中很大程度上取决于测试人员的经验,主观性很强,这样就很可能漏测,发布后出了问题就又要开撕了。。。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6yMt40eM-1651043992298)(https://ceshiren.com/uploads/default/original/3X/8/f/8fc75e6422e5583e83871dad397d2e1e2ddaa75e.gif)]

可能有的小伙伴会这样觉得,有人告诉我们答案,也就是告诉我们魔方墙的差异之处。这样我不就知道关注的测试点了吗?

没错,我们可以让开发告诉我们本次改了哪些方法,甚至有代码权限的情况下我们有能力可以自己去分析代码,妥了,金女士!

那么问题又来了。针对上面的情况,开发的描述一定是正确全面的吗?即使开发准确的说明了改动的代码,那么改动所影响到的其他范围呢?开发本人也不好确认的(不然还要测试干啥~),开发也有可能偷偷改代码不告诉你呢。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XpWmJJWV-1651043994811)(https://ceshiren.com/uploads/default/original/3X/f/d/fda414ab6134ecbab4aca34d866e2e36d4b1ef79.png)]

这个时候就渴望有这么一个"最强大脑"

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bU1zkoQ9-1651043995969)(https://ceshiren.com/uploads/default/original/3X/f/f/ff3a518e490237d895b7299d7ff9274365d6de54.png)]

  • 眼过去就可以看出差异点(本次改动的逻辑)
    • 脑海中就有了差异的影响范围(缩小需要测试的范围)
    • 再一扫就看出哪些测试覆盖到了(确认测试覆盖率)
      以求达到一种精准测试的程度

按照上面的描述,大概我们可以分为三个维度:

  • 差异化
    • 调用链
    • 覆盖率
  • 接下来的文章中会一个个详细来说~

不同的语言,都会有对应不同的语法分析器,语法分析器会把源代码作为字符串读入、解析,并建立语法树,这是一个程序完成编译所必要的前期工作。

我们看下 Java 的编译过程,重点关注步骤一和步骤二:

这里我们使用一个简单的Java对象,解析成AST后看下长什么样子

由于层级太多太复杂,这里选取属性user做个简单演示说明。如下:

每一项里面都包含了最全面的信息,包括名称、行号等,具体的可以访问在线调试网站https://astexplorer.net/进行调试查看

既然所有的代码信息都有了,那么我们就可以拿着这些信息进行比对,从而找出代码的差异之处;(当然这其中还是要很多降噪处理的,例如注释、空格、业务无关代码get/set等)
大概的流程逻辑如下

3.2.1 字节码

因为Java代码的运行,是通过javac先将Java文件编译成.class结尾的字节码,再由JVM去执行;所以在字节码文件中,拥有了足够的元数据来解析类中的所有元素:类名称、父类名、方法、属性以及 Java 字节码(指令);

以如下源码为例:

1  public class AccurateTest {
2
3     private int a = 1;
4
5     public String add(int b){
6        return String.valueOf(a + b);
7    }
8 }
9

命令将其编译为字节码文件,再使用
命令将其

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值