近日,在稀土开发者大会上,极狐GitLab 资深后端工程师毛超进行了《极狐GitLab 10 年开源研发管理实践》主题演讲,结合「极狐GitLab 效能度量模型」,从人员效能、合并请求、CI/CD 流水线、代码质量、交付核心指标(DORA)等方面介绍极狐GitLab 研发效能管理实践,分享团队如何发现自身问题,不断改进突破研发效能瓶颈,轻松贯通软件研发全生命周期,从而提升研发效率的实践经验。
以下内容整理自本次直播,你也可以点击此处下载 PPT。Enjoy~
研发提质增效,是每个研发驱动业务增长的软件企业追逐的目标;高效管理软件项目,也一直是管理者的渴望。经过长时间的探索,研发效能领域已经从概念迈向务实,落脚于解决具体痛点和问题的可行方案。
例如《软件研发效能权威指南》一书提出了“研发效能黄金三角”原理:效能平台、效能实践和效能度量,三者相辅相成。
- 效能实践中的优秀实践可以沉淀到效能平台,效能平台支撑了效能实践的落地;
- 效能平台产生的大量研发数据形成效能度量中的洞察,效能度量持续观测效能平台中产生的数据;
- 效能度量中的洞察和分析结果可用于针对性地优化效能实践,效能实践可以为效能度量提供更多的输入,帮助其完善效能度量和指标分析。
今天,我们从研发效能的挑战和研发效能黄金三角展开本次分享。
研发效能实践的痛点
提到研发效能实践过程中的痛点,以下情况司空见惯:
- 意识到研发效能要提升,却不知如何下手;
- 研发指标太多了,无法确定核心指标;
- 开发工作实在太忙,没空做研发效能改进;
- 研发流程需要大量人工参与,拉低工作效率;
- 研发用到太多工具,数据过于零散,无法观测;
- 过于关注代码产出,忽视代码质量,bug 不断。
我认为要解决这些问题,离不开这 4 个核心步骤:明确目标、优化流程、注重质量和持续度量。
4 步击破痛点,提升研发效能
1. 明确目标
研发效能提升是一个广泛的概念,需要解构成具体的可度量的目标,如降低 Bug 缺陷率、缩短产品发布周期、提高代码复用率等,才更明确如何操作。同时,要有进度规划,将长远目标分解成阶段性的短期目标,使之更易落地。
同时,目标不能由高层单方面制定,需要在研发团队充分讨论,建立共识,确保研发、测试、运维等各个角色成员都明确自己的定位,才是有意义的。
2. 优化研发流程
开源开放是 GitLab 和极狐GitLab 的第一文化。在 GitLab 十年的这个开源历程中,累计超过 10 万个 commits,超过 6000 个提交者,极狐GitLab 在开源贡献组织中排名第一。
那么,极狐GitLab 的研发流程是怎样的呢?如下图,大流程上与其他企业大同小异,主要包括迭代管理、需求管理、功能开发、代码审查、发布管理、效能度量几个核心环节,研发团队可以根据相应的流程有序推进研发任务。
特殊的是,极狐GitLab 是一个开源开放的平台,除了企业员工,还有很多社区贡献者参与到产品研发当中,社区贡献者常常会面临以下问题:
- 社区贡献者如何快速上手?
- 想贡献但不知道找谁领取任务?
- 需求忘记打标签,不知道归属哪个团队?
- 代码写完后,不知道如何合并代码?
- 开发任务延期,没有及时需求更新状态?
- 某功能是否已经发布?哪个版本发布?
- ……
极狐GitLab 需要解决这个社区贡献者特殊的问题,才能保证友好的产品研发和开源体验,鼓励更多社区贡献者持续加入。
极狐GitLab 的解法是什么?就是要保证所有的事情有据可查,同时尽可能减轻人工参与。具体措施总结为如下 3 点:
➤ 2.1 文档先行
极狐GitLab 使用多种工具进行文档建设,例如 Handbook,knowledge share,issue 等,记录十分详尽,确保所有参与者都可参考文档来推进工作。
➤ 2.2 可追踪的任务
只有可追踪,才能可度量。极狐GitLab 将迭代计划、开发任务、合并请求、代码审查等都开源出来,在极狐GitLab 平台统一管理,所有开源贡献者可见。下一个Milestone 什么时候结束,开发者如何贡献,匹配哪个需求等一系列问题都能找到答案。
➤ 2.3 自动化工作流
很显然,复杂的人工操作会让人望而却步。所以极狐GitLab 尽可能增加自动化流程,减轻人工重复劳动,让开发者专注于研发创新;管理者只需要关注研发价值的流动性,并快速、稳健的推进价值落地。
极狐GitLab 自动化工作流包括:
- 监控议题状态,自动提醒团队成员完善信息:
- 监控代码合并流程,自动提醒团队成员进行代码评审:
- 定时发送通知,提醒团队成员完成任务:
- 自动生成研发报告,为研发度量打下基础:
随着未来 AI 能力的注入,JiHuBot 将参与更多的工作。
3. 注重代码质量
在软件吞噬一切的时代,代码质量就是软件质量的基础,不仅影响软件运行效率和安全性,还影响研发团队的生产力。
对于开源软件而言,一个 10 年工作经验的人可以贡献代码,一个刚参加工作的人也可以贡献,因此,开源项目更应注重代码质量。并且我认为,不做代码门禁和代码评审,那么代码质量就是由技术水平最低的人决定的。
极狐GitLab 通过编码规范、代码审查、持续集成、自动化测试覆盖、重构等关键实践,保证代码质量。
➤ 3.1 代码门禁:严格要求,提前报错
极狐GitLab 会在代码提交之前做一系列的检测,包括提交消息检查、代码规范检测、推送前检查等。通过这些检查,在提交代码之前就把问题暴露出来并解决,后续工作就会轻松很多。
➤ 3.2 合并请求:代码变更的最佳实践
一次 Git push 不等于一次代码变更。极狐GitLab 有一个概念叫做合并请求( Merge Request,等同其他平台的 Pull Request),即把一堆代码做一个打包,然后合并到某一个特性分支或者主干分支上。
其中,代码其实只是一部分,我们需要引导团队和社区同学,提供更多更详细、更丰富的资料,包括完整的上下文、修改前后的截图、数据库改动与否、测试覆盖率如何、流水线运行情况、强制少于 20 个文件修改等,这才是一次完整的代码变更。
➤ 3.3 评审者轮盘:帮你找寻最合适的评审者
除了上文提到机器人可以帮助做代码评审,极狐GitLab 也做了一个评审者轮盘应用,把所有具有评审资格的人列出来,按照不同团队、不同时区、当前状态以及当前任务量等信息,找到合适的代码评审人。
代码评审的核心关注点有哪些呢?包括:
- 完善的介绍,详细的开发任务列表;
- 可靠的、可阅读的代码;
- 是否有更简单的解决方法;
- 是否引入了不必要的外部依赖;
- 有足够的自动化测试覆盖;
- 前端、后端、数据库代码审查是否通过;
- 流水线是否通过;
- 是否通过安全评审。
那么如何心平气和且有效地完成一次代码评审呢?建议:
- 不要下命令,而是问问题(如:rename 成 user_id 会不会更好一点?);
- 不清楚就发问(如:我不太明白,能否解释一下这段逻辑?);
- 代码共有,而不是几个人的(如:不用「你的代码」,用「这段代码」);
- 不要用攻击的词语(如:这段代码太傻了,性能很差);
- 详细清楚的表达,不要含糊其辞(如:不用「这段不好,需要改一下」);
- 不要挖苦讽刺(如:大家快来看呀,这段代码真好,上线之后肯定出名)。
在极狐GitLab 要进行一次合并请求是不容易的,需要满足如图最低的合并请求要求:
极狐GitLab 将 Pipeline 用了到极致,现在一个 Pipeline 包含 9 个阶段,拥有 400+ 任务,积累了 23 万 + 自动化测试,平均运行时间为 1 小时。
这不是一朝一夕就能完成的,而是从 Day one 开始就一直坚持以自动化测试驱动的方式去保证代码质量,才能累积到这个数据。而且,这只是代码修改的 Pipeline 还没有涉及到部署、运维等一系列流程。
➤ 3.4 保证代码质量的其他方式
除了自动化测试,极狐GitLab 还运用多种方式保证代码质量,如:
- DevSecOps;
- 数据迁移脚本验证;
- 创建临时验证环境;
- 预检测 UI 测试。
DevSecOps
以 DevSecOps 为例,这是极狐GitLab 围绕 CI/CD Pipeline 构建的核心能力之一,即在代码变更的过程中,应用各种安全测试发现相应的安全问题或质量问题,提前解决这些问题,实现安全左移。
极狐GitLab DevSecOps 的设置也非常简单易用,只要在流水线定义文件中 Include一些已经定义好的模板,就会在流水线中自动加上相应的扫描任务,比如依赖项扫描、容器镜像、SAST、DAST、敏感信息扫描等。
Postgres.ai
极狐GitLab 还集成了 Postgres.ai 应用,它的作用包括:
- 定期脱敏部分 prod 数据,生成测试数据集;
- 与机器人对话就可以运行 SQL 语句,并能分析运行效率获得相应的改进建议;
- 在合并代码前验证数据迁移脚本的正确性和运行效率。
比如社区同学提交了一个代码变更,改动了 DB schema 的一个内容。那我们就要用测试数据库跑一下变更脚本,看看有没有破坏数据库的完整性或者正确性;或当社区同学修改了一个比较关键的数据查询或一个模型的查询语句时,也可以通过 Postgres.ai 机器人对话,去分析查询语句在数据集上运行结果,然后告诉我们它的性能如何,以及改进条件是什么。
在我看来,管理者应该始终追求这种卓越的工程实践,这是保证质量的基础。
4. 持续度量研发效能
如下图,是我总结的软件项目管理框架,包括了软件研发的方方面面。
极狐GitLab 作为一款开源软件,在效能度量上具有特殊性:对于社区,我们更多的是整体发展,但是对于极狐GitLab 团队,就需要看团队的研发效能如何了。基于这个特殊需求,极狐GitLab 自研了一个紧扣中国本土需求的,基于极狐GitLab 的一站式企业 DevOps 智能分析管理平台——极狐星 TowerFox,能够同时对接多个极狐GitLab 实例,提供从数据驾驶舱、效能管理、项目分析到合规管理的一体化解决方案,能够全行业、多场景、全软件生命周期的满足企业研发管理需求。
https://www.bilibili.com/video/BV17m4y1x7TP/?aid=701630461&ci...
此前,我们进行了研发效能管理主题直播,从研发效能管理痛点出发,分享了研发效能管理 7 步走与GDAI 经典方法,还有基于「蔚来」、「 某新医药企业」等客户案例,希望给大家提供实践指南。👉错过直播?快收藏详实回顾!Get「研发效能管理」7 步实践指南与案例剖析
这里简单展示一些不同纬度的效能管理:
- 组织层面:展示组织关键数据,提升团队竞争动力
- 项目层面:聚焦项目关键指标,引入「极狐星项目成熟度」模型评估
- 交付速率:展示需求管理相关数据
- 交付能力:依据 DORA 指标、CI/CD指标
- 交付质量:展示代码评审和代码质量数据情况
- 人员效能
- 合规审计:比如针对代码泄露场景进行告警提示,展示审计事件,自动审计告警
以上示例供参考,管理者应该根据团队目标,设计度量体系并定期评估和调整,持续改进。
总结
我们将 DevOps 体系总结为“道法术器”,如 《企业 DevOps 成功之路》所言:DevOps 不能简单认为是一种工具、方法、技能或组织结构,DevOps 体系是结合所有这些元素来建立一个价值流水线的过程,使业务更快地交付和运营,并能更快地应对变化。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。