如何避免做了也白做的困境,来看看度量的起手式

2023-11-01 17:15:33 浏览数 (2)

你度量什么,你就能得到什么?

如果我关注产品交付质量的话,那是不是直接度量线上缺陷不就可以了?

真的是这样。

你度量开发人员每天的代码量,就会得到越来越多的......(垃圾)代码。那如果要度量线上缺陷,会不会得到更多的线上缺陷?

首先是不会的,线上缺陷是一个负向指标,此类指标的度量通常会得到越来越少的.....线上缺陷。这也是做此类指标的初心,通过这个指标来牵引团队来持续改进。

不过现实中呢?通常“正常”的团队都首先会去关注线上缺陷的定义,哪些缺陷可以不纳入线上缺陷范畴,其次通过在研发过程中彼此心照不宣地去报告各种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- 扫描通过率**

0 人点赞