FYIRH 发表于 2022-1-10 15:54:17

敏捷研发内部质量度量

精益专注于在缺陷发生的源头将其发现并解决,通过减少价值流中的缺陷向下一个环节流动的可能性,从而减少缺陷带来的成本。如果一切都等到测试人员对产品的外部质量全部测试完成,缺陷的反馈周期将会被不必要地拉长,修复的代价将呈指数级增长。内部质量度量又分为代码质量度量、白盒测试覆盖率度量和持续交付流水线运行的成功率。
1.代码质量度量

[*]圈复杂度。圈复杂度是代码复杂度的衡量标准,用来衡量一个模块结构的复杂程度,数量上表现为独立路径条数,即合理地预防错误发生所需测试的最小路径条数。圈复杂度大,说明程序代码可能质量低且难以测试和维护。程序的可能性错误与圈复杂度的高低有很大关系。
[*]危险函数。危险函数指的是部分函数没有检查目标缓冲区的大小,很容易引入缓冲区的安全漏洞,并且这些函数没有处理掉一些特殊情况(比如内存重叠),可能会导致意想不到的安全问题。
[*]静态分析告警。静态分析是指在不运行代码的方式下,通过词法分析、语法分析、控制流分析等技术对程序代码进行扫描,以验证代码是否满足规范性、安全性、可靠性、可维护性等指标的代码分析技术所产生的告警。

此外,代码质量还可以用冗余代码、函数代码行、文件代码行、编译告警、重复文件数、重复代码率等度量。
2.白盒测试覆盖率度量
白盒测试覆盖率包括单元测试、模块测试、集成测试、API测试的测试覆盖率。如图9-12所示,丽莎·克里斯平(LisaCrispin)介绍的测试金字塔框架表明,越靠近底层的,其自动化程度越高。
在图9-12中,从上层往下层的测试类型,其成本更低、效率更高,而且更贴近代码,因此缺陷更容易定位;反之,从下层往上层的测试类型,其成本更高、效率更低,但更接近真实的业务需求。因此,企业应该尽可能使用大量低成本的测试来构筑安全网,辅之以少量高成本但更接近真实业务需求的测试,而不是采用自动化测试策略。

图9-12测试金字塔示意图
3.持续交付流水线运行的成功率
流水线的调度周期可能包含持续交付全过程的各个环节或其中的一些环节。因此,流水线运行的成功率可能有编译通过率、代码静态检查通过率、冒烟测试的执行率和通过率、回归测试的执行率和通过率、全量验证的执行率和通过率等。
业界有很多软件工程工具能够自动度量以上介绍的内部质量,尤其是持续交付和DevOps工具,它们一般都可以在流水线运行过程中自动统计运行成功率。
有了关于效率和质量的数据,组织应该设定指标来促使团队提升效率,否则单凭数据本身难以引起团队的关注,除非团队自身有很强的内驱力。
效率和质量是密切相关的。企业V定义了研发效率目标,同时也定义了内部质量目标,如表9-6所示。
表9-6质量目标示例

效率的提升是无止境的。因此,当组织的效率指标达到了目标后,就需要设定更有挑战的目标,以牵引组织持续改进。
页: [1]
查看完整版本: 敏捷研发内部质量度量