在一个科技进步与进展紧密相关的时代,软件开发的生态足迹往往被忽视。
ShiftProject的一项研究估计,2018年信息和通信技术(ICT)行业的碳足迹约占全球温室气体排放的2-3%。
彭博社的预测显示,到2030年,IT系统将占据全球能源需求的惊人20%。为了对比,目前交通运输行业占据全球能源消耗的25%。
根据国际能源署(IEA)的数据,2018年全球数据中心耗电量约为200太瓦时(TWh)。
绿色软件开发成为一种责任的象征,提供了一种转向环保实践的范式转变,与迫切呼吁可持续发展的全球需求相契合。这种方法不仅仅是一个流行词,更需要致力于资源效率、降低能源消耗,并在软件生命周期中全面考虑环境。
通过优化软件测试过程中的资源利用和能源需求,组织可以降低测试的总成本。这对于大规模测试项目来说,可以节省大量资金。作为副产品,测试过程变得更加高效和流畅,能够加快交付周期,缩短上市时间。
目标很简单——通过优化测试策略和自动化实践来节约资源,从而节约能源。
以下是在您的组织中立即启动“绿色质量保证(Green QA)”的五个策略。
1. 使所有测试执行“有上下文”
仅执行与代码更改上下文相关的测试。避免盲目执行;不要在每个环境上运行每个测试。避免大批量的测试执行。这将减少资源消耗,最小化能源使用。
避免计划执行,例如夜间执行、多次执行等。这些执行消耗过多的资源,如果自上次执行以来代码没有更改,可能不会提供任何价值。
隔离测试,确保每个测试套件或测试用例都能独立运行而不影响其他测试。这可避免资源争用,提高并行执行的整体效率。减少测试间的依赖关系,使得能够更轻松地并发执行测试,而无需等待其他测试完成。
利用云平台进行测试执行,因为它们可以根据需要动态分配资源。这可以显著提高能源效率。
重构和重新设计持续集成和持续交付(CI/CD)流水线,以在各个“测试”阶段纳入上述原则。
可以通过基于主干的开发,并在代码中使用标注(注解)为测试打上需求的标签,并将这些标签作为参数传递给CI/CD流水线来实现这些目标。
2. 实施节能的测试自动化(编码)实践
能量(测试执行)= 能量(活跃代码)+ 能量(等待代码)+ 能量(空闲代码)。
将测试自动化框架和脚本容器化。容器提供了一个轻量级且隔离的环境,便于水平扩展。它们还减少了每次代码检出和构建过程中产生的网络流量。
尽量减少文件I/O操作,特别是在循环或频繁访问文件的场景中。使用缓冲I/O操作来减少磁盘访问次数。例如:从文件中读取测试数据、从文件中读取配置或将结果推送到测试管理工具。
学会编写优化的代码,包括无效代码消除、循环优化、公共子表达式消除等。同时,分析不同算法的性能特征,并选择最适合特定用例的算法。
及时释放代码中的资源,特别是在资源受限的环境中,如移动设备或物联网设备测试。
尽量减少后台进程、任务和线程,以防止CPU和内存利用率过高,从而增加能源消耗。
调整日志和报告的详细程度,避免不必要的资源消耗。
可以通过在自动化指南文档中记录上述内容,与质量工程师进行交流,并在代码审查过程中将其作为审查重点领域来实现这些目标。
3. 优化测试环境
明确测试与环境之间的映射关系(定义哪些测试应在哪个环境中运行以及它们的频率),以避免冗余和重叠的测试执行。
每个环境在测试角度上应具有独特的目的。不要在每个环境中进行全面测试。
实施动态资源分配,根据当前的测试需求分配资源。例如,运行负载测试的资源需求与运行API测试的资源需求会有很大的差异。
在使用后拆除测试环境。例如,创建一个动态环境,部署构建,运行测试,记录证据,然后拆除环境。
利用专为效率和可扩展性而设计的基于云的测试服务。云平台通常优化资源使用,并且比传统基础设施更节能。
思考真正需要多少个环境。你真的需要2或3个环境吗?有什么理由?现在许多组织都开始实行一个环境政策。
可以通过与SRE团队共同设计环境配置,以测试为导向,并在合规性测试中引入可持续性检查来实现这些目标。
4. 在QA中设定可持续性目标(Sustainability OKRs)
以下是一些起步的示例OKR:
目标1:提高软件测试执行效率
关键结果1:通过优化代码和基础设施,实现测试执行的整体能源消耗减少20%。
关键结果2:实施监控和报告测试执行期间能源使用情况的方法,提供对环境影响的可见性。
关键结果3:进行审计,确定至少三个能源效率改进的领域。
目标2:在测试执行过程中最大限度减少资源利用
关键结果1:通过采用容器化和高效的资源分配,将服务器资源使用率降低15%。
关键结果2:实施一个实时跟踪和管理资源消耗的自动化系统。
关键结果3:评估并采用注重可再生能源使用和资源效率的环保测试工具供应商或服务。
目标3:推广可持续性测试实践
关键结果1:对100%的测试团队进行可持续编码实践和能源高效算法重要性的培训。
关键结果2:将可持续性考虑因素融入代码审查流程,目标是捕捉和解决至少80%的能源低效代码。
关键结果3:实施一套奖励制度,以表彰并庆祝始终积极贡献于可持续编码实践的开发人员。
目标4:提高利益相关者的意识
关键结果1:与内部和外部利益相关者共同开展意识提升活动,强调可持续性的重要性和需求。
关键结果2:发布一份可持续性报告,详细说明测试的环境影响以及采取的措施来减轻影响。
关键结果3:与至少三个外部组织或合作伙伴合作,共同推动软件开发中的可持续性倡议。
可以通过采用资源监控工具和能源监控工具来实现这些目标。从市场上提供的几个选择中选择最适合的工具。
5. 培养注重能源的文化
教育工程师和团队关于可持续性和绿色软件开发实践以及其必要性。
倡导缺陷预防的文化。使用测试金字塔原则、左移策略和其他现代质量工程实践,确保尽早发现缺陷。每个缺陷都有开发成本和修复的环境成本。
将绿色QA准则和标准纳入测试策略文档的一部分。
在开发团队中树立节能编码实践的传统。定期进行审查和回顾,找出改进开发过程可持续性的机会。
建立一个知识共享和合作的平台,讨论可持续发展实践。
在团队中创建“可持续性先锋”,他们是可持续性的专家和旗手,能够教育和指导其他人。
认可和奖励那些始终致力于可持续测试自动化开发的团队。