测试基础 “我就优化了下,影响不大的”

CKL的思考 · 2023年08月23日 · 最后由 LJh 回复于 2023年08月25日 · 6530 次阅读

“我就优化了下,影响不大的”,开发如是说。相信大部分测试人员听到这话,恨不得跳起来骂人。在正常的情况下,只有通过充分地测试,才能保障软件的质量和稳定性,如果开发人员可能会出于个人的需求,私自将代码上线,这对软件的稳定性会带来很大的风险。

真的是这样吗?软件系统真的就这么脆弱吗?

最近有小伙伴找我吐槽了这件事,系统地思考了下解决方案,仅供参考。

01

对于研发不论是有心还是无心的 “夹带私货”,从风险的角度来看,主要有以下几点风险:

流程规范:这种形式一定是违反了既定的流程规范,如果多次出现,流程将流于形式,不再具有约束力,引发更大的风险;

测试遗漏:由于开发没有告知测试,测试人员不会做针对性的测试及影响范围评估,容易导致测试遗漏,引发不可控的风险;

爆发半径不可控:没有评估风险,容易给生产环境埋雷,不知道什么时候发爆发问题,影响范围有多大,行为不可控,风险不可控;

02

清楚了这种行为带来的危害,那就需要通过一定的手段来避免。最简单的方式就是加强流程的卡控,不让这种事情发生,把风险规避在源头。常见的方案有以下几种:

代码提交规范:在提交代码的时候,需要描述清楚提交代码的作用。借助于提交匹配规则,让代码提交注释不再随意。在团队的实践中,会要求按照 “Type: Description < Issue-ID>” 的格式来描述,Type 包含常见的类型,例如 feat、fix、merge、revert、test 等,Description 为描述字段,不超过 50 个字,Issue-ID 为平台对应的 StoryID,非必填,方便跟踪。

版本信息管理:根据结构化的 Commit 信息,提取当前版本的版本内容,让测试人员可以快速评估发布范围,同时,这个日志也可以作为制品的一个基础信息,用于溯源。

代码评审:基于前面两项,结合人为的代码评审,在代码合并到测试分支前,进行充分的审计,避免不明用意的代码被提交。

通过流程规范,可以有效地避免 “夹带私货” 情况产生。如果发生类似的问题,测试人员通也会要求开发加强约束,遵守流程规范。好像也没有其他更好的办法了。

真的吗?

03

测试人员如果只是这么被动地解决的问题,就很难产生价值,而且人为的操作本身就具备太多的不可控性。从质量保障体系的角度出发,笔者认为还有其他几件事可以做。

必要的自动化测试:从重构的角度上看,我们应该鼓励开发进行适当的优化和重构,减少代码债务,只要风险可控即可。所以,引入一定的自动化测试,保障核心及主干流程,就可以做到风险可控。在团队的实践中,会要求测试环境、UAT 环境、生产环境的流水线中一定要集成自动化测试,保障核心功能不受影响,避免重大风险。

一次编译,多次部署:在正常提交测试的时候,开发一般都会告知影响范围,测试也会进行回归测试验证,最怕的是在临上线前做优化。那么践行一次编译,多次部署理论,就可以有效地避免这个问题,即测试的制品,就一定是发布的制品,除了配置不一样,其他完成一样,这样也是可以控制风险的。

以上是从测试遗漏,风险控制的思路上来思考。

04

从风险评估中,还有一项是爆发半径不可控的风险,对于这个风险,可以从测试右移的思路来控制风险爆发半径,有以下几种做法:

测试右移:由于测试环境的局限性,我们需要针对生产环境做一定的回归测试(对于只读操作和可隔离特性的测试),针对核心功能进行一定频次的拨测,确认功能的稳定性。

告警机制:通过蓝绿发布、灰度发布、监控预警,建立分级告警机制等手段,可以有效地控制风险爆发半径,减少损失。

05

系统可能很脆弱,会因为开发的一段代码导致整个系统不可用。作为测试,从流程上规范研发操作只是提升系统反脆弱的一种方法,而且是一种非常被动的操作。我们应该建立起一套完善的质量保障体系,在风险可控的情况下,让开发有重构和优化的空间,为他们的行为保驾护航,提升系统的反脆弱性。

业内其实有很多这类的实践,比如混沌测试。虽然我们的代码经不起混沌测试的折腾,但也不应该因为小部分的重构和优化,让系统出现不可控的风险。

共勉。

最佳回复
chenyouan 回复

无关责任不责任、到位不到位,就是没有把流程规范固化到平台、工具上,用工具在流程中做好检查和卡点。

自顶向下只追一个顶端数据,后面的所有步骤自然而然的卡死,不给偷懒、犯错的机会,这就是理想的操作。尽可能避开需要人的思维意识去干涉,这样大家按部就班,都不会累……

所以我上面针对代码提交规范就提了一嘴 commitlint,我对原文中只提 “规范” 二字表示不以为然,这些必须东西要有足够的客观约束,而不是靠人自主去遵守或执行……当然,流程规范是源头、是根本,没有这些的话,后面做的一切都可能会被质疑。

共收到 13 条回复 时间 点赞

代码提交规范:在提交代码的时候,需要描述清楚提交代码的作用。

commitlint 了解一下

槽神 回复

就是用的 commitlint

槽神 回复

这都是基本

我们的开发 commit 信息都是:update ......

经常有一些 bug,你说的上面那些其实都做了,但是还是漏掉了,到了生产客户反馈了才发现

责任到位,这些就不会出现了。无非就是责任不到位。

chenyouan 回复

无关责任不责任、到位不到位,就是没有把流程规范固化到平台、工具上,用工具在流程中做好检查和卡点。

自顶向下只追一个顶端数据,后面的所有步骤自然而然的卡死,不给偷懒、犯错的机会,这就是理想的操作。尽可能避开需要人的思维意识去干涉,这样大家按部就班,都不会累……

所以我上面针对代码提交规范就提了一嘴 commitlint,我对原文中只提 “规范” 二字表示不以为然,这些必须东西要有足够的客观约束,而不是靠人自主去遵守或执行……当然,流程规范是源头、是根本,没有这些的话,后面做的一切都可能会被质疑。

和我就蹭蹭,不进去,没什么区别😈 😈 😈

貌似我自己也喜欢说这话。。。
换个角度:
就算写了 BUG,也不是什么大不了的事情。
犯错不是很正常的事情么,有啥大不了的,能把我咋的了。
要背锅我又不是背不起,虚个毛线。

magicyang 回复

就因为一个 bug,导致平台被薅羊毛,损失几百万,这种损失是能弥补的?你一句大不了开除,那对于公司呢,整个团队呢,辛辛苦苦忙了大半年,就用你一个开除就能弥补的是吧?

4楼 已删除

研发的惯用口头禅

@magicyang 对生产环境没有敬畏之心

magicyang 回复

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册