你度量什么,你就能得到什么?
如果我关注产品交付质量的话,那是不是直接度量线上缺陷不就可以了?
真的是这样。
你度量开发人员每天的代码量,就会得到越来越多的......(垃圾)代码。那如果要度量线上缺陷,会不会得到更多的线上缺陷?
首先是不会的,线上缺陷是一个负向指标,此类指标的度量通常会得到越来越少的.....线上缺陷。这也是做此类指标的初心,通过这个指标来牵引团队来持续改进。
不过现实中呢?通常“正常”的团队都首先会去关注线上缺陷的定义,哪些缺陷可以不纳入线上缺陷范畴,其次通过在研发过程中彼此心照不宣地去报告各种bug以做大分母,又或者是用需求、代码行增量等指标来做分母以实现所谓的合理性。
因为背后的数学公式很简单,
假设有99个缺陷和1个线上缺陷,那么缺陷逃逸率就是1%。而好巧不巧如果又发现了一个线上缺陷,那团队为了维持之前的逃逸率目标,就得额外再找99个缺陷来填到分母上。那是不是去和运维探讨一下这个新的是不是线上缺陷更为简单直接 ?
那么我们做度量是为了什么?其实是高质量的交付,而不是线上缺陷本身。
线上缺陷是一个结果指标。结果指标只告诉你结果。That‘s it。
业界有位同行曾经发圈感慨,“当团队在忙得焦头烂额的时候,'你'除了给团队开不符合项,还能做些什么?”团队需要的不是你告诉他们有几个线上缺陷,团队需要的是,有一套行之有效的软件工程方法论,用于指导研发交付过程,以提高取得最终的好的结果的可能性。
高质量交付的这个结果,都是一个个研发过程的细节所构成的。
在阅读了何勉老师等组织编写的《BizDevOps白皮书》之后,笔者发现关于度量的部分,各位专家老师们也提出了类似的问题,并给出了如下的方案模型。
DORA或者通常的度量方案主要会关注交付效能指标,并部分涉及业务结果指标。
“这个上面的三类指标中,越靠右边的是越外部的,接近想要的结果;越靠左边的是越内部的,指向需要改进的行动。”但是右边的指标无法直接知道团队改进。
因此,作为对于团队的来说,高质量交付是通过团队和个人的行为以及能力所达成的。而团队和个人的行为,例如:工程习惯、协作方式、需求并行度、代码评审质量等;也包括技术和工程能力,如:代码质量、架构耦合、测试覆盖率、发布成功率等。这些指标与最终业务目标之间不存在必然性,应为中间存在转化,但是就如前述而言,其中的有些行为和能力会影响交付效能,进而最终可能会影响业务结果。
高质量交付的过程逻辑
因此,作为初始投资度量,希望得到收益的团队,笔者的建议是应该优先关注最左侧的行为和能力指标。通过度量过程是否在遵循最佳实践去保障好的结果。
也就是说,瀑布、敏捷、精益、DevOps这一路走来,软件工程其实一直存在许多朴素的所谓最佳实践。而度量首先要做的,也就是去看团队是否在遵循这些最佳实践,以及遵循的程度。
拍拍脑袋随便想想,就会有如下的一些点
事项 | 目标价值 | 能力和行为 |
---|---|---|
需求 | 做正确的事情,明确需求的价值,优先交付高价值的需求 | 全局需求优先级设定优先选择高优先级需求 |
确保需求的正确、完整性,以及需求信息的有效传递 | 需求串讲、反讲、明确需求完成标准、需求的测试 | |
迭代和发布 | 持续发布,减少变更影响面,提高交付效率 | 降低发布批次大小、单需求单应用发布 |
控制WIP,减少工作切换 | 单件流 | |
代码 | 明确为什么要提交这个代码,防止夹带和遗漏 | 代码提交规范 commit message hook |
代码必须符合需求和代码质量规范 | 单元测试、代码扫描、质量门禁、代码评审控制代码技术债/复杂度 | |
代码需要及时提交,以提前发现问题 | 持续集成 | |
测试 | 测试要提前介入 | 测试设计评审、单件流 |
做基于风险的测试,提升效率 | 分层测试、自动化测试、精准测试、测试模式 | |
缺陷要及时修复、验证 | ||
度量 | 度量要精准,且不增加额外成本 | 价值流数字化,双流联动 |
根据上述描述,一些努力一下还比较好实现的度量指标如下,
事项 | 指标 | 备注 |
---|---|---|
需求 | 需求-用例关联率 | story关联的test用例 |
单元测试 | 每个应用的单元测试的数量和执行条次和通过率 | 体现左移程度 |
缺陷 | 缺陷的打开/关闭/存量的数量和时长 | 缺陷要尽快修复、验证,少遗留 |
缺陷 | 每个月修复、关闭缺陷的80%耗时 | 抛掉无效缺陷 |
用例 | 测试用例的复用度:(手工)测试用例被重复执行的次数 | (手工)测试用例是团队资产还是一次性的消耗品 ?这是一个问题。 |
用例的有效度: 测试用例关联缺陷的比例 | 1、不是所有bug都是测试用例执行时发现的2、(online)bug都应该有(自动化)测试用例去验证它已被修复3、多少个用例能发现一个缺陷? | |
技术债 | 各个应用的技术债、圈复杂度 (TOP N) | |
行覆盖率 | 单测覆盖率,开发 测试整体覆盖率 | 发布更应该看整体覆盖率。单测可作为代码准入和提测门禁。 |
代码扫描 | 各个应用的代码扫描频次(手动/自动) | 持续集成的应用范围和频度 |
流水线 | 持续集成频次(构建/测试/部署) | |
代码合并请求MR | MR评审比率 (有评审comments的MR/全部MR) | |
MR- 扫描率 | ||
MR- 扫描通过率** |