AICon日程100%就绪,9折倒计时最后一周 了解详情
写点什么

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

  • 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:002093

评论

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

性能测试中QPS取样器和RT取样器

FunTester

Windows 11 修改 PIN 的长度为 4 位

HoneyMoose

Docker知识对应验证

Docker 4月月更

DevSecOps“内置安全保护”,让软件研发“天生健康”

华为云开发者联盟

DevOps DevSecOps 软件研发 安全架构设计 安全隐私

揭秘华为云GaussDB(for Influx):最佳实践之数据建模

华为云开发者联盟

MySQL 数据建模 数据模型 华为云 GaussDB(for Influx)

Go单体服务开发最佳实践

万俊峰Kevin

微服务 单体架构 web开发 go-zero Go 语言

知识管理:新时代企业竞争力核心

小炮

企业知识管理 企业知识管理工具

JWTToken在线编码生成

入门小站

工具

PingCode 完成近亿元人民币C轮融资,打造世界级研发管理与协作平台

爱吃小舅的鱼

超干货 | 手把手教你快速构建一个企业自有“微信”!

融云 RongCloud

REDIS集群安装运维调优及常见问题处理

IT巅峰技术

双许可、先决条件、附加条款……开源许可证的疑难杂问

一君

Go语言入门很简单:Go 中的作用域和变量隐藏

宇宙之一粟

作用域 Go 语言 4月月更

Swoole中的协程使用相关说明,快来围观

CRMEB

【易安联】安全都是有边界的,零信任也不例外

Geek_2d6073

攻克编译器技术(1)

刘旭东

编译器 4月月更

在线Excel转TSV工具

入门小站

工具

Docker下,极速体验编译pinpoint1.6.x分支

程序员欣宸

Java 分布式 4月月更

「Spring」@ConfigurationProperties——从基础到源码

Geek_rze78a

Java spring 源码

[Day25]-[二叉树]二叉搜索树中的插入操作

方勇(gopher)

LeetCode 二叉树 数据结构算法

Android C++系列:string最佳实践

轻口味

c++ android 4月月更

C语言总结_数组与函数传参练习题

DS小龙哥

4月月更

源码解析Synchronous Queue 这种特立独行的队列

华为云开发者联盟

MQ 堆栈 队列 Synchronous Queue 公平队列

英特尔分享进军独显市场的背后思考

科技新消息

“一个扫描枪一张表”,韵达选择 TDengine 应对每日亿级数据量

TDengine

数据库 tdengine

聊聊项目外包

石云升

创业 项目管理 职场经验 4月月更 项目外包

linux之service命令

入门小站

云原生应用配置中心简述

穿过生命散发芬芳

4月月更

眼见不一定为实:调用链HBase倾斜修复

捉虫大师

HBase 数据倾斜 4月月更

大数据培训学习程序员有必要吗

@零度

大数据开发

为安全而生!浪潮云参编的《数据安全法》实施参考(第一版)重磅发布

云安全

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