↑点击上方卡片关注我↑
本文为霍格沃兹测试学院优秀学员学习笔记,测试开发进阶学习文末加群。
** 想做好「精准化测试」先从玩游戏开始**
小时候大家应该都玩过一个游戏,游戏很简单,就是找不同,在规定时间内两幅图直接的差异点找到就算赢,越快越好,就像下面这样:
上面这个不同点想找很简单,那么下面这样的呢?
这个,确实有的人会说"我可以!" 。比如在综艺节目"最强大脑"中,这群"变态"的非人类确实可以
反正我不行,我也不信你们看到文章这里的人可以~我只有最菜大脑
** 渴望「 ** 最强大脑** 」**
上面的色块就好比我们要测试的程序,一面墙相当master分支的代码,一面墙相当于dev分支的代码,而dev改了哪些?差异在哪里?影响到的范围是多少?我们要测试的范围?
理论上,我们全面的测试覆盖,肯定就就可以保证,那么我们先看下下面的代码:
这是一份涉及订单状态的各种枚举,每一个状态的背后都有其业务逻辑,甚至还有交叉,假若按照笛卡尔积或者正交的方式来进行用例设计与覆盖,有。。。好多好多用例
-
那么~你真的有那么多时间去全覆盖吗?
-
开发:我改了点代码,等会帮忙全面回归一遍吧
-
测试:好的(*** bi~~ ***)
-
什么?自动化?Are you sure?
测试发展到如今,好像不会点自动化,都不好意思叫测试,简历上不写点自动化都拿不出手,但是自动化真的是测试的银弹不,做过的应该深有感触,自动化属于一个奢侈品: -
开发正本
-
维护成本
-
如何使用
-
用例的设计合理性
-
新功能的滞后性
再者,你确定你真的覆盖到了被测代码?也就是相当于魔方墙上的每个色块,实际在黑盒测试的过程中很大程度上取决于测试人员的经验,主观性很强,这样就很可能漏测,发布后出了问题就又要开撕了。。。
可能有的小伙伴会这样觉得,有人告诉我们答案,也就是告诉我们魔方墙的差异之处。这样我不就知道关注的测试点了吗?
没错,我们可以让开发告诉我们本次改了哪些方法,甚至有代码权限的情况下我们有能力可以自己去分析代码,妥了,金女士!
那么问题又来了。针对上面的情况,开发的描述一定是正确全面的吗?即使开发准确的说明了改动的代码,那么改动所影响到的其他范围呢?开发本人也不好确认的(不然还要测试干啥~),开发也有可能偷偷改代码不告诉你呢。
这个时候就渴望有这么一个"最强大脑"
- 眼过去就可以看出差异点(本次改动的逻辑)
- 脑海中就有了差异的影响范围(缩小需要测试的范围)
- 再一扫就看出哪些测试覆盖到了(确认测试覆盖率)
以求达到一种精准测试的程度
** 大脑组成**
按照上面的描述,大概我们可以分为三个维度:
- 差异化
- 调用链
- 覆盖率
接下来的文章中会一个个详细来说~
3.1 差异化分析
差异化其实大家平常接触的挺多的,例如在提交代码的时候,git就会告诉你代码的差异在哪里
而今天要介绍的并不是它,而是叫AST(abstract syntax
tree)即抽象语法树,是源代码的抽象语法结构的树状表现形式,每一个节点代表一个语法结构
不同的语言,都会有对应不同的语法分析器,语法分析器会把源代码作为字符串读入、解析,并建立语法树,这是一个程序完成编译所必要的前期工作。
我们看下 Java 的编译过程,重点关注步骤一和步骤二:
这里我们使用一个简单的Java对象,解析成AST后看下长什么样子
由于层级太多太复杂,这里选取属性user做个简单演示