写点什么

持续集成的关键:产品反馈驱动实践

  • 2023-07-20
    北京
  • 本文字数:1454 字

    阅读完需:约 5 分钟

持续集成的关键:产品反馈驱动实践

缩短持续集成(CI)系统的反馈时间并优化测试方法和类,可为开发团队带来更为有效的反馈。据 Tobias Geyer 所说,CI 系统是开发过程中的重要一部分,且应被重视起来。


Tobias Geyer 在2023年罗马尼亚测试大会上以测试人员的身份谈到了集成系统的改进问题。

在 Geyer 刚入职时,公司的持续集成系统是一台堆在桌子底下的老旧开发电脑,没人负责也没人有时间做维护。他说,这台电脑的速度太慢导致反馈周期非常长,开发人员完全忽视了 CI 系统的反馈。


Geyer 称,优化反馈时间的一个捷径是在工作时间跳过不必要的构建步骤,并将构建限制为每晚一次。

一个更难处理的瓶颈问题则是磁盘的 I/O。构建读取和写入的数据量太大,磁盘没办法跟得上。Geyer 说他最后找到 IT 部门的人把 CI 系统从开发电脑挪到了数据中心的虚拟机上,解决了磁盘的 I/O 问题,并将系统扩展到了两台机器上,使其能够并行运行更多的构建。


他们将测试按执行快慢分为几类,在快反馈 CI 构建中只运行测试的一个子集,速度慢的测试则被放到了执行频率更低的专用构建中。Geyer 解释道,这么做让他们得到的反馈依旧完整,且大部分反馈要比之前快上许多。


Geyer 描述了他们是如何优化测试的方法和类:


在找出运行缓慢的测试后,我们将其当作技术债务来处理。为改进测试,我们给开发者们提出了“测试债务预算”,开发者们对这些问题的处理方式各不相同:

  1. 将测试数据精简,只保留有关数据,从而缩短测试的设置时间

  2. 引入模拟测试,不再需要预加载任何测试数据

  3. 让产品代码更具可测试性,使原本需要集成测试的部分可被单元测试替代完成


Geyer 总结,不一定要深刻理解技术领域才能带来影响:


我可以利用我测量、实验和协作的测试技巧让事情变得更好,即使这也意味着别人必须去完成实际的实施工作。


InfoQ 就 CI 系统的改进话题采访了 Tobias Geyer。


InfoQ:可以给出一个跳过构建步骤的例子吗?


Tobias Geyer:效果最明显的例子是我们的产品混淆。每个产品构建在交付给客户之前都会被混淆,而这些被混淆的产品很明显是需要经过测试的。但产品混淆过程至少需要三十分钟,因此我们在白天跳过这一步骤,并在晚上将产品混淆并进行测试。


InfoQ:你们对构建过程和平台有什么重要的变动吗?


Geyer:我们将我们的构建系统从 Ant 和 Windows 的批处理迁移到了 Gradle。主要工作是由我们的团队中的开发者们完成,我负责处理所有与测试执行相关的工作。


引入测试 CI 系统这一改变虽然明显但仍然重要,我们得以在不中断正常开发流程的前提下,准备并测试 CI 系统中的变更(如插件更新、新增构建节点等等)。


InfoQ:你们是如何鼓励在不同团队间的持续集成知识共享?


Geyer:我是在公司的其他部门中寻找有过在 CI 系统上工作经历且具备类似技术栈的人。我们定期开会讨论(CI 系统)最近更新和大家所面临的问题。很多时候某个团队对问题的解决方案是可以被复用的。


能看到其他人的进展和他们的结果是很好的。有时候一些团队想要引入的变更会在他们的团队内部遇到阻力,“其他团队有过这方面的正向经验”,这句话有助于说服他人。


InfoQ:对于不满自己 CI 解决方案的团队,你有什么建议吗?


Geyer:像是对待其他软件开发项目一样看待(CI 系统)。把困扰自己的问题列出来,用对待 bug 的方式处理它们。也就是说,对这些问题进行优先级排序、分析,并合作修复。我想强调“合作”这点,和 IT 部门的探讨对我们修复部分问题而言至关重要。


原文链接

Treat Your CI System as a Product for Faster and Better Feedback


相关阅读:

Terraform引入新的CI/CD工具,增加对Azure Linux的支持

中国企业研发高效能白皮书-CI/CD篇

2023-07-20 08:002373

评论

发布
暂无评论
发现更多内容

架构实战营 | 毕业设计

架构实战营

【LeetCode】 礼物的最大价值Java题解

Albert

算法 LeetCode 8月日更

阿里“宝妈级”之作,这份Spring Security应用到源码手册,全是精华

Java spring 程序员 架构 计算机

浏览器数据库 IndexedDB(一) 概述

编程三昧

数据库 大前端 indexedDB 8月日更

在所有Spark模块中,我愿称SparkSQL为最强!

王知无

193篇文章暴揍Flink,这个合集你需要关注一下

王知无

拆分电商系统为微服务

thewangzl

前端之算法(五)顺序和二分搜索

Augus

数据结构与算法 8月日更

Android SDK 版本属性

Changing Lin

8月日更

Flink CDC我吃定了耶稣也留不住他!| Flink CDC线上问题小盘点

王知无

如何在二三线城市月薪过万(三)java偏功能实现的面试题,有备无患!!

小鲍侃java

8月日更

架构实战营 模块五作业

孫影

架构实战营 #架构实战营

设计千万级学生管理系统的考试试卷存储方案

架构0期-Bingo

从0开始的TypeScriptの八:类

空城机

JavaScript typescript 大前端 8月日更

【Vue2.x 源码学习】第三十六篇 - 组件部分 - Vue.extend 实现

Brave

源码 vue2 8月日更

总结

杰语

设计微博系统中”微博评论“的高性能高可用计算架构

智慧源点

架构实战营

抵制不良饭圈文化,互联网平台应该肩负哪些责任

石头IT视角

网络攻防学习笔记 Day106

穿过生命散发芬芳

网络安全 8月日更

财富自由的本质及如何实现财富自由?

非著名程序员

认知提升 个人提升 财富自由 8月日更

让我们一起开发【菜谱系统】吧,滚雪球学 Python 第三轮项目计划

梦想橡皮擦

8月日更

蚂蚁金服+拼多多+抖音+天猫Java面经合集,金九银十Java开发校招社招福音!

编程菌

Java 编程 程序员 面试 计算机

架构设计总结

鲲哥

雷从九天临,暗由赤地生 - 你的对手只有时间

王知无

架构实战营 毕业总结

Ahu

序列化单例模式的实现————readResolve 源码解读

4ye

Java 源码 后端 序列化 8月日更

架构训练营毕业总结

Geek_e0c25c

架构实战营

老外为了在MacBook上玩原神,让M1支持了所有iOS应用 | Github每周精彩分享第一期

Zhendong

GitHub

架构实战训练营模块五作业

NewBranSTONE

#架构实战营

秒杀架构设计

鲲哥

架构实战营 模块三

听闻

持续集成的关键:产品反馈驱动实践_研发效能_Ben Linders_InfoQ精选文章