← 文章 / 编程开发
InfoQ推荐 1小时前 · 2026-09-04 21:00:49 · 0 阅读

让测试更加绿色可持续

采用可持续的测试策略,跳过不必要的测试,确保尽早快速失败,并且只运行受代码变更影响的测试。Jochen Joswig 在 OOP 大会上关于 DevGreenOps 的演讲中提出了这些建议。追踪每个测试用例的能耗,并结合静态代码分析,有助于发现效率低下的问题,为优化工作提供方向。

Joswig 提到,可持续测试要从制定合理的测试策略入手。这确保不会执行不必要的测试和测试用例,不仅减少了测试所需的时间,还确保测试遵循极简和高效的标准。

Joswig 还建议将执行的测试数量缩减至绝对必要的范围:

通过设计测试策略,使测试尽早快速失败,因为一旦某个测试失败,就可以停止其余测试的执行,从而节约能耗和时间。通常会优先运行单元测试,如果在单元测试阶段就发现错误,就无需再执行集成测试、端到端测试、UI 测试等后续测试。

他建议只执行针对变更代码的测试。这尤其适用于单体仓库项目中的全部自动化测试。他提到:如果仅前端代码发生改动,就没有必要去测试后端代码,反之亦然。他补充道,还可以进一步细化流程:先执行静态代码分析,之后仅运行受影响的测试用例。

Joswig 提到,如果想要优化自动化测试体系,可以尝试追踪每个独立测试用例运行时的能耗,并将能耗数据接入可观测性系统。当某些方法或测试运行超出能耗阈值时触发告警,以此推动对部分代码进行重构,实现性能优化。

他补充道:如果无法获取能耗数据,但仍希望提升测试的可观测性,可以使用代理指标,例如传输数据量(MB)、执行耗时、CPU 以及内存使用率。

Joswig 建议使用静态代码分析检测代码中容易被发现的低效问题,例如,在循环内部发起后端调用或者数据库查询。他提到有几种工具可用:

Creedengo 是一款开源的 SonarQube 插件。它支持 Java,也支持其他语言,如 Python、JavaScript 和 C#。此外也有闭源替代品,它们对代码库低效问题的检测覆盖范围可能更广,或者支持更多或者其他种类的编程语言。不过这类工具需要付费使用,我本人尚未对其进行过验证。

不过,Creedengo 有一个需要注意的点:它的一些规则对性能和能源消耗的影响可以忽略不计。因此,手动挑选一个有用的规则子集非常重要,Joswig 提到。

Joswig 秉持“最绿色的代码是你从未写过的代码”这一理念,强调在开发生命周期早期进行测试的重要性,使用低保真度的点击模型或纸面原型测试,确保开发团队专注于真正为用户增加价值的重要功能。

可持续测试或绿色软件开发通常是一项团队工作,每个人都可以出力。即使是产品经理也可以发挥作用,当被要求需要兼容性能较弱、老旧的硬件或操作系统时,可以指示团队在此类设备上进行兼容性和可用性测试。

硬件使用寿命由此得到延长,能够减少因更换硬件所产生的碳排放以及各类有害影响。这就引出一个问题:一个团队究竟需要多少台测试设备?Joswig 建议数量应尽可能少,但必须满足绝对必要的使用需求。

InfoQ 在演讲结束后采访了 Jochen Joswig

InfoQ:为什么我们应该在测试期间跟踪能源消耗?

Jochen Joswig:跟踪能源消耗可以让开发者更深入地了解应用程序的每个部分消耗了多少能源,以及未来改进的潜力在哪里。

类似的方法曾帮助找到一处高危安全漏洞,该漏洞现在以 CVE-2024-3094 的编号列在 NIST 国家漏洞数据库中。Andres Freund 在他的 Mastodon 帖子中描述了他是如何发现这个安全漏洞的,他几乎是在测试的的附带过程中发现它的。

鉴于该漏洞的严重性,人们不禁会思考:这类问题是否本不该靠偶然运气去发现,尤其这件事说明,软件开发团队可以通过这类方式对自身软件获得大量新认知,而这些认知有可能影响软件的方方面面。

InfoQ:对于可持续软件开发,你认为未来会迎来哪些变化?

Joswig:我预计未来几年软件开发对电力的需求将会增加。这种需求的增加可能导致成本上升;因此,能源和硬件的成本仍将是决定创新盈利能力的因素。提高效率将成为重点,甚至会成为竞争优势。

我们将看到众多有志之士、机构、大学和企业,以及社区和开源项目,提高意识并为必要的绿色数字未来铺平道路。我预计这将带来大量知识、工具和其他各种形式的贡献。

自由市场部门可能需要一段时间才能采用绿色软件最佳实践。政府,特别是欧盟,已经将 IT 可持续性列入其议程,我预计政府机构发布的合同和招标将包含 IT 可持续性和可持续软件的条款,希望在整个供应链中产生连锁采用的效应。

查看英文原文:https://www.infoq.com/news/2026/08/making-testing-sustainable/

原始来源: InfoQ推荐

评论 (0)