头图

img


本文摘于《软件研发效能权威指南》——第 9 章

img

核心观点

  • 开发人员在多个“单点式”工具平台之间的来回切换是很耗费时间和精力的。
  • “一站式”是指把研发各个环节的软件工程能力集成在一个统一的平台上,对新人友好,对老人提效。
  • “一键式”是指让研发工程师只关心具有创造性价值的工作,而不需要处理能够由研效平台自动完成的事情。
  • “双流”模型可以实现需求价值流和研发工程流双向自动联动。

传统单点研发效能工具平台面临的挑战

一个完整的研发效能工具平台,需要包括需求协作、代码管理、构建能力、测试能力、环境部署能力、制品管理、配置管理、监控告警、高效运维等功能。可以说,效能工具平台是研发工作开展的载体,涵盖了软件研发全生命周期的各个环节,其设计与使用体验做得好,整体研发过程的流畅度就高,工程师的有效价值就能更好地被发挥。

软件研发全生命周期中的各个环节都有各自领域的单点工具,比如需求管理工具常用的是 Jira、代码管理工具常用的是 GitHub 和 GitLab 等,这些垂直领域的单点工具平台不论是商业化产品,还是企业自研,基本都是以 SaaS 的形式在企业内为广大工程师提供服务。

开发工程师要完成一个需求开发任务,往往需要在多个单点垂直工具间来回反复切换。当我们的软件工程纪律和流程管控越严格时,工具来回切换的次数就会越多,而且每次切换都可能需要以人工的方式在各个工具平台间传递信息,甚至是“翻译”信息。

比如,在一个典型的开发任务场景中,开发工程师首先要访问需求管理工具,从中找到对应的任务项,然后将其状态从“待开发”转变为“开发中”,接着到代码管理工具中找到对应的代码仓库并下载代码。同时,先使用需求管理工具中的开发任务 ID 作为分支名字来创建功能分支,然后在该功能分支上完成本地的开发与测试工作。在此期间,为了做到质量左移,往往会在开发过程中使用远程静态代码扫描工具中的代码规则,在本地执行静态代码检查,同时也会使用 Mock 能力来完成本地的单元测试。当本地开发和测试达到质量要求时,就会先通过代码工具提交代码评审,然后在工具平台的支持下完成代码评审的交互,之后代码合流过程中会使用 CI 平台来执行流水线,流水线完成一系列的步骤(如单元测试、静态代码扫描、安全扫描和编译等),并且达到质量门禁的要求后,会将产生的制品存入制品库。最后,开发工程师还需要再次访问需求管理平台,找到之前的任务,并将任务的状态从“开发中”设置为“待测试”。

我相信,很多开发人员对以上过程已经很熟悉了。在这个过程中,除了业务代码开发和测试,你需要和各种工具平台频繁打交道,需要访问需求管理平台领取任务,需要访问代码管理工具拉取代码并创建分支,需要调用静态代码扫描平台的能力,还需要使用 CI 平台和制品库的能力,最后还要再次访问需求管理平台更新任务状态。

在这个过程中,有多次工具切换,要花费大量时间在流程性的事务上,造成时间和精力的浪费,还需要你对各个工具平台的使用方法和流程都很清楚。

更糟糕的是,各个工具平台的概念模型可能还不完全一致。比如代码管理平台上的“项目”概念和测试平台上的“项目”可能就不是相同逻辑下的概念;再比如“应用”的概念在不同的工具平台上可能不是一个意思,这就使研发过程的流畅性大打折扣,工程师的理解和学习成本很高。同时,各个工具平台之间还会形成研发数据孤岛,很难进行统一的研发过程数据收集和度量。因此,我们迫切需要“一站式”和“一键式”的统一研发效能平台对各个工具平台进行横向整合和拉通,以此来提升研发过程的整体效能。

“一站式”和“一键式”

“一站式”的概念

“一站式”是指把研发各个环节的软件工程能力集成在一个统一的平台上,研发工程师在研发过程中不再需要来回访问多个工具平台,也不需要人工记住并遵守研发流程,更不需要记住多个工具平台的访问入口,这样的设计对新人友好,对老人提效。

具体来讲,就是研发工程师不需要记住每个单点工具平台(比如,需求管理系统、CI 系统、自动化测试系统等)的域名,在一个统一的研效平台上完成所有的研发任务,而且各个阶段的产出物也能更加顺畅地在各个工具平台间流动。这样,不仅能统一各个工具的权限管理体系,还能让研发过程的度量数据收集实现自动化,不需要任何人为干预,而且各个工具中的概念名词也能在一站式的理念下得到统一,研发的各个阶段能够实现无缝链接与协作,实现真正意义上的研发全流程流水线。

“一键式”的概念

有“一站式”作为基础,就能在此基础上进一步实现“一键式”。“一键式”是真正提升研发效率的利器。

“一键式”是指让研发工程师只关心创造价值的工作内容,比如聚焦于架构设计、编写代码、编写单元测试用例、开展代码评审等活动;而不需要处理能够由工具平台自动完成的事务性工作,比如需求状态流转、代码分支创建、静态代码检查、测试环境搭建、应用部署、测试用例执行等。

“一键式”最理想的效果是用户在提交代码后,可以不需要人工来完成后续的事务性工作,也不需要再盯着整个流程等待下一步,而是可以转向处理其他事情,研效平台会自动执行静态代码扫描和单元测试、判断质量门禁、构建制品、将制品部署到测试环境且执行接口测试,接着将制品部署到预发布环境,经过自动化的系统测试后,最终实现生产环境的正式发布,在此过程中会运用灰度发布等机制来降低风险。在整个过程中,只有出现错误时才需要研发工程师介入处理,真正意义上实现了“一把梭”。

研发效能平台的“双流”模型

本书提出的研发效能“双流”模型是“一站式”和“一键式”概念的最好诠释。“双流”模型包含需求价值流和研发工程流,其中需求价值流是产品经理和项目经理关注的视角,反映了各个需求的完成状态和项目整体的完成情况;研发工程流是研发工程师关注的视角,反映了开发任务在工程维度上的完成状态,更多是从代码、测试和 CI/CD 等工程视角来看任务的进展。

img
研发效能“双流”模型实现需求价值流和研发工程流双向自动联动

需求价值流和研发工程流双向自动联动

在“双流”模型中,可以实现需求价值流和研发工程流双向自动联动,不需要研发工程师在完成开发和测试任务后单独到需求管理系统中去更新任务状态,需求的状态更新(比如,需求状态从“开发中”转到“待测试”)由代码分支合并进主干后自动流转,不需要人工参与,这样就能让研发工程师更好地聚焦在创造价值的工作上。

“双流”模型是实现研发效能平台的一个参考依据,值得借鉴。以下就通过具体例子介绍“双流”模型的工作原理和实现方式。

首先,在一个研发迭代周期开始之前,我们会从 Backlog 中选择迭代需要完成的需求任务列表,并将每个需求分解成开发任务。在理想的情况下,我们尽可能把每个开发任务的颗粒度都控制在一个代码仓库的范围内,如果某个业务需求的实现需要涉及多个服务模块(如多个微服务模块)的改动,则建议为每个模块创建一个开发任务。也就是说,建议创建多个独立的开发任务,以开发任务为单位进行迭代计划的安排,并且每个开发任务都会事先确定好开发工程师的人选。

在传统模式下,在一个迭代开始后,被分配任务的开发工程师就会收到系统邮件通知,再根据邮件中的链接到需求管理工具中阅读并理解该需求,并且手动设置任务的状态为“开发中”,然后去代码平台拉取相应的代码,创建开发分支,之后在 IDE 中开始开发和测试工作。但是以“双流”模型实现的效能工具平台就会简单很多,完全不需要在需求管理工具、代码平台工具和 IDE 之间切换,只需要在 IDE 中即可完成全部工作。具体的过程如下:

在一个开发任务被分配给某个开发工程师后,该工程师所使用的 IDE 中就会通过研效平台的 IDE 插件收到任务分配通知,工程师可以直接在 IDE 中阅读需求详情并一键领取任务,这一领取行为首先会自动把对应代码仓库的代码拉取到 IDE 工作区,然后会自动以需求任务 ID 为名字创建代码的功能分支,并确保 IDE 已经切换到该分支。同时,会自动调用需求管理平台的 API 接口,将该需求任务的状态从“待开发”转为“开发中”。这一系列的行为都直接由研效平台 IDE 插件自动发起,对开发人员来说做到了完全透明,其要做的只是简单地在 IDE 中一键领取任务,就可以聚精会神地在本地进行开发和测试工作了。

在本地开发和测试任务完成后,当前的功能分支达到可交付状态时,由开发工程师在 IDE 中直接发起代码合流请求,该代码合流请求会先被研效平台中的 CI 子系统接管,然后 CI 子系统自动发起代码评审流程,代码评审的交互过程可以直接集成在 IDE 中完成。同时,研效平台工具能自动根据代码变更的 Code Diff 自动推荐最佳的评审人。比如,将最近这段时间改过相同逻辑的工程师作为评审人是一个很经济的选择,因为其认知成本是最低的。更进一步,研效平台工具还会对此次代码评审变更的大小进行标识,以便评审人可以根据其空闲时间片段的大小来选择合适的评审内容。代码评审完成后,CI 子系统会自动触发 CI 流水线完成常规的单元测试、静态代码扫描,并且判断质量门禁的达成情况,最后生成制品并上传至制品库。接下来,研效平台工具会再次自动调用需求管理平台的 API 接口,将该需求任务的状态从“开发中”转为“待测试”。

研发流程的后续环节也会采用类似的联动设计,用系统化的工具能力来保证需求状态和代码实际状态的联动。

由此可见,以“双流”模型理念打造的研发效能平台可以让工程师聚焦在最关键的核心任务上,而不需要人工去做事务性的工作,让整个研发过程的价值流动更顺畅,进而提升团队的研发效能,再次验证了“工欲善其事,必先利其器”。

软件研发各个阶段的高效实践

除此以外,“双流”模型还明确定义了软件研发各个阶段的高效实践。比如,在需求阶段有哪些最佳实践可以从源头上保证效能,在本地开发和测试阶段有哪些实践可以保证质效提升,在代码合流阶段有哪些高效实践等,本书第 2 篇介绍的研发效能实践其实就是“双流”模型各个阶段的具体实践与落地,这里不再详细介绍。

img
研发效能“双流”模型明确定义了软件研发各个阶段的高效实践

总结

这部分介绍了传统单点研发工具平台在横向拉通维度上的痛点,并在此基础上提出了研发效能平台“一站式”和“一键式”的概念。同时,介绍了这一概念的落地案例:研发效能“双流”模型,并且对“双流”模型中的需求价值流和研发工程流双向联动能力进行了介绍。

img

img


CODING
3.3k 声望4k 粉丝

CODING 是腾讯云旗下一站式 DevOps 研发管理平台,向广大开发者及企业研发团队提供代码托管、项目协同、测试管理、持续集成、制品库、持续部署、云原生应用管理 Orbit、团队知识库等系列工具产品,支持 SaaS 模式...