AI 时代,为什么回归测试反而更重要了?

我有一个暴论,在AI时代,回归测试将变得越来越重要。
最近发现AI经常出现改一个问题,送几个bug情况。仔细分析一下,几个项目里都出现了类似的情形。
A项目中AI增加了一个字段,却误判了老字段的影响的范围,将之前的字段默认值重置了,导致了线上的旧版本出现了严重的问题;B项目里AI修改了一个小问题,却没有考虑到对其他功能的影响,也产生了一些线上缺陷。
因为这些改动都不大,所以我们在回归的时候并没有走全量,只是把相关的功能做了回归跟验证,这固然是测试的失误,但研发也搞不清楚AI具体进行了哪些修改,基本上只是AI操作员,或者是需求输入员,离程序员这个职位的初衷越来越远,在几方的共同努力下,线上缺陷有上升的趋势。
也正是这些情况的频繁出现,我觉得在AI时代,回归测试将变得越来越重要。
英雄式的变更安全感现在越来越弱
不知道大家有没有过类似的感受,在不是很久远的古法编程时代,一个成熟的团队中往往有一个或多个老专家,他们做新需求或者是修复问题往往十分靠谱,要么每次产出的bug基本很少,要么就是对变更的影响范围估计的十分准确,测他们开发的需求往往有实实在在的安全感,回归的范围也基本清晰可控。
但是在AI编程时代,这种个人英雄式的开发带来的安全感却在逐渐消失。
原因可能多种多样,有可能是单位时间内AI产出的代码太多,原先的老专家也没办法逐一阅读和评审,导致了疏漏;也有可能是AI对项目的理解产生了偏差,一些新晋的AI代码生成工程师完全不清楚AI究竟做了什么,最终提交测试,在宽泛的回归范围的辅助下,将一些没有妥善处理的细节给带到了线上。
时间紧,任务重,要提升效率,那么就得有取舍。
反正效率提上去了,指标也更好看了,那就让质量来代偿好了。
精准测试是不是银弹?
既然变更的影响范围没人说的清楚,那么就让AI自行判断好了。
我们这里也确实是这样做的。
每次AI输出看起来信心满满的回归范围时,我们都会按图索骥进行刻舟求剑式的回归。
但是AI给出的影响范围有时候也会出错,假设出错的概率是一定的,那么单位时间AI写的代码越多,隐藏的bug可能就越多。
这时候想要又快又好就非常有挑战了。
那么是时候让精准测试大展拳脚了。
我们尝试过用分析调用链的方式,找到某次变更的影响范围,但是遇到了2个问题。
- 静态分析的速度比较慢,赶不上AI产生变更的速度。如果按照版本或者迭代来分析,那么影响范围又相对比较大,精准性就打了折扣;
- 影响范围可以确定下来,但是如果遇到多场景的情况,那么静态分析是没办法给出具体会受到影响的地方的;
所以后面我们的方向是通过静态分析去确定范围,然后加上AI辅助分析去确定场景,希望可以通过精准给出上下文的方式降低AI的幻觉,提升测试的精准性。
全量回归是不是必选项?
我们目前的回归策略是主流程回归,每次大的版本发布都会去做。
不过现在我们在主流程回归的时候也会漏掉细节,比如有次的一个变更导致了主流程上一个很小的分支流程出了问题,但是我们回归的时候漏掉了,复盘的时候我们在TAPD单上可以很清楚的看到AI给出了影响范围,很遗憾,那个场景AI也漏掉了。
盲目的全盘接受AI的判断显然不是一个好的回归策略。
所以当下每次大版本在发布之前都需要进行细粒度的主流程回归,全量回归的时间太长,只能抓大放小,把监控的维度补上去,出了问题快速响应,快速修复,用最少的时间去加固核心质量,其他的只能亡羊补牢,见机行事了。
但不是所有人都认可回归测试的重要性,比如一种叫做老板的生物就会认为开发节约的时间在测试阶段全部给还了回来,研发提效变成了啼笑皆非,这显然是不能接受的。
当然了,这也就解决的方案,那就是要么把测试全开了,研发兜底;要么把研发开掉一部分,让测试去做代码生成操作员,或者更进一步,把测试和开发都开了,让产品自己去solo全流程,这些可能会在短期造成质量的急剧下降,但如果长时间运转下去,效率大概率是会有提升的。原因很简单,这样减少了流程和反复沟通,明确了质量责任人,没人甩锅,只能负重前行,质量和效率最终会达到平衡。
不过这是九阴真经,欲练神功,是不是要狠下心去挨上一刀,那就见仁见智了。
自动化回归
代码的产出变得日益廉价,自动化回归的门槛也变得越来越低。
因为UI自动化的不稳定性,以及实现难度较高,我还是建议从单元测试和接口测试的自动化先做起。
单元测试覆盖率越高,变更的影响就越容易判断,AI产生幻觉的风险也会降低;接口测试的场景越丰富,集成过程中的问题也就越容易暴露。
至于主流程的UI回归,有条件的话就用自动化去实现,但用例一定要设计的足够精巧,每一步都要有精心的编排,这样稳定性才会有显著的提升,ui自动化才有发现bug的能力。
没有条件的话就先手工回归吧,毕竟大多数的产品还是给人类去用的,站在人类的角度去回归也是合情合理。
总结
综上所述,由于AI代码生成工程师可能不了解AI生成代码的所有细节,加上AI依然会产生幻觉,在单位时间内代码产出量急剧增加的大背景下,变更所带来的隐藏问题可能会越来越多。
回归测试是当下一个简单且有效的测试策略,我们可以通过精准测试来减少回归范围,用自动测试来提升回归效率,最后对于面向人类用户的产品,还是要人工验证一下主流程,毕竟你是要赚用户/客户的钱,而AI是要赚你的钱,它对客户/用户没有任何的义务。