在研发质量管理中,「提高代码/测试质量」更重要,还是「提升故障响应能力」更重要?
LigaAI 最近和一些朋友探讨了这个问题。一种观点认为提升研发质量应该从代码质量抓起——擒贼先擒王,从源头减少故障发生才是根本之道;
另一种声音则指出,生产故障几乎不可能通过预防完全避免,因为「未知」是无法预测的,因此加强监测与反馈机制,快速识别、快速修复才是真正的有效之治。
从管理指标的角度来看,「提升代码质量」意味着研发团队要尽可能提高 MTBF(平均无故障时间),延长系统可持续运行时间,而「提升响应能力」要求尽可能减少 MTTR(平均恢复时间),将系统不可用时间降到最短以最小化故障影响。
温馨提示:研发团队应当先全面讨论系统「服务时间」「可用时间」和「不可用时间」的定义、事件覆盖范围以及故障等级,并在组织内部建立统一的理解,以确保资源和精力花在最重要的事件上。
尽管在实际工作中,「提高 MTBF」和「减少 MTTR」总是齐驱并进,但在不同发展阶段明确二者的优先级,将有助于研发团队高效专注、有的放矢地实现研发效能管理目标。
MTBF 和 MTTR 将如何影响研发效能?我们先从研发质量管理的三个维度说起。
01 研发质量管理的「RAM」
在管理实践中,我们常用「RAM」评估软件交付性能。这里的「RAM」当然不是 Random Access Memory,而是三个用于描述系统服务质量高低的关键维度——可靠性、可用性和可维护性。
1. 可靠性 Reliability
可靠性是指系统无故障运行的能力——哪怕出现软硬件故障、人为错误等问题,系统仍能正常提供正确服务而不发生服务中断的概率。
它与故障率、容错率、避错力、冗余度等紧密相关。常见的软件可靠性度量指标包括可靠度、失效率、MTBF 和 MTTF 等等。
2. 可用性 Availability
可用性是指在一定时间内,系统能够持续且正确提供符合期望水准的服务而不发生故障和中断的概率,通常用 SLA(Service Level Agreement,服务级别协议)来表示。
系统可用性(或称可用度)可以用系统可用时间占总服务时间的百分比计算得出,即
3. 可维护性 Maintainability
可维护性包含可修复性和可改进性两个方面。前者是指在系统发生故障后,不同人员高效修复故障,使之恢复正常运行状态的难易程度,而后者表示当需求或环境变化时,系统接受功能改进或增加新功能的可能性。
可靠性和可用性都可以展示系统的持续服务能力。区别在于,可用性更加关注系统服务的总体持续时间,而可靠性侧重于描述系统的抗故障能力。《分布式系统原理与范型》为区分可靠性和可用性提供了一个非常直观的例子:
如果系统在每小时崩溃 1 ms,那么它的可用性就超过 99.9999%,但是它还是高度不可靠。与之类似,如果一个系统从来不崩溃,但是每年要停机两星期,那么它是高度可靠的,但是可用性只有 96%。
02 如何确定 MTBF 和 MTTR 的优先级?
对于不同组织或者同一组织的不同发展阶段,提升研发质量的有效手段很可能截然不同。那么,是否存在某种范式,可以帮助研发团队科学精准地确定 MTBF 和 MTTR 的管理优先级?
前面提到,可用性的计算公式可表示为系统可用时间占总服务时间的比重,即 MTBF / (MTBF + MTTR)。简单变形后,便可以获得以下关系式:
① MTBF = 可用性 * MTTR / (1 - 可用性)
② MTTR = MTBF / 可用性 - MTBF
对于已知的 MTBF 或 MTTR 值,研发团队可以结合系统可用性增长目标,计算出团队故障恢复能力或系统平均无故障时间的所处水平,并了解量化指标的预期增量。
举个例子。已知研发团队恢复一个故障的平均耗时为一个小时,如果系统每 9 小时出现一次故障,其可用性就为 90%。如果想将系统的可用性提高至 99%,那么故障频率应降低至每 99 小时(即 4.13 天)一次。
同样的,对于故障频率为每周一次的系统而言,如果研发团队能在 1.7 个小时(等价于 102 分钟)内让系统恢复正常工作,则其可用性便能达到 99%。
根据系统的故障频率以及研发团队的故障恢复水平,管理者可以将可用性提升目标翻译成 MTBF 或 MTTR 的优化目标,将抽象指标具象化,并综合目标实现难度、资源可用情况等明确首要优化对象,精准提升效能。
03 MTTR vs MTBF,谁更胜一筹?
Chad Fowler 认为,对大多数组织或系统而言,优化 MTTR 比增加 MTBF 更加有效。DORA 指标同样将 MTTR 视为影响研发效能和软件交付性能的四大关键指标之一。
一部分原因是软件系统不同于物理设备,其故障偶发性强,因而 MTBF 管理的不可控性较高。而恢复故障的工作流程清晰,操作步骤明确,可干预程度高;研发团队可以对各环节展开精细化管理,轻松、高效地达成 MTTR 优化目标。
研发团队可以使用敏捷开发方法、自动化监测和预警工具、自动化部署工具、灰度发布、A/B 测试等,缩短 MTTD、MTTA、MTTI、MTTR(Mean Time To Repair)等时间,以快速识别、定位和修复故障,快速上线。
不仅如此,Sidu Ponnappa 还指出,MTTR 是弥合业务与技术理解鸿沟的关键。它可以帮助企业更好地理解技术团队与研发工作,还可以帮助技术领导者识别系统的薄弱环节以及需要关注的对象,是衡量组织弹性、团队结构和整体健康状况的有力指标。想要改进 MTTR,研发团队必须构建正确的知识,改进质量控制实践,并重视内外部的沟通。
LigaAI 总结
可靠性、可用性和可维护性是评估研发质量的三大维度,其中可用性可以用 MTBF / (MTBF + MTTR) 计算得出。
在研发管理实践中,优化 MTTR,提高故障响应能力更具指导意义。研发团队可以结合敏捷开发方法、自动化工具等,建立高度自动化的监测、反馈、测试、部署流程,实现高速提效。
LigaAI@SegmentFault 还将分享更多研发效能度量、研发管理实践等干货内容,欢迎关注我们。