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

news2024/9/29 3:34:06

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/670997.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【流光溢彩】物联网入门 - ESP8266 + WS2812B 制作流光溢彩灯带

一、硬件准备 ESP8266 模块 x1WS2812B 灯带(60/米,根据显示器四周长度买即可) x1杜邦线 若干DC 电源 x1 二、软件准备 1. ESP8266 串口驱动 一般购买详情页都会有写,没有就找商家要一个。 一般是 CH340 或者 CP2102&#xff0c…

在 C4D 和 Redshift 中设置程序变形鸡尾酒动画

今天瑞云渲染小编给大家带来动画设计师 Victor V. 分享的 Pick Your Weapon 项目背后的工作流程,展示了 Cinema 4D 工作流程,并解释了动画是如何在 Redshift 中渲染的。 介绍 我是 Victor,我是居住在意大利的智利动画设计师,一年…

Xcode 14.3.1 (14E300c) 下载 - Apple 平台 IDE

Xcode 14.3.1 (14E300c) 下载 - Apple 平台 IDE Command Line Tools for Xcode 14, tvOS 16 & watchOS 9 Simulator Runtime 请访问原文链接:https://sysin.org/blog/apple-xcode-14/,查看最新版。原创作品,转载请保留出处。 作者主页…

基于Confluent Kafka部署Kafka Connect集群,Kafka Connect集群加载debezium插件

基于Confluent Kafka部署Kafka Connect集群,Kafka Connect集群加载debezium插件 一、下载Confluent Kafka二、配置文件connect-distributed.properties三、启动脚本connect-distributed四、启动Kafka Connect集群五、加载debezium插件六、总结和延伸 一、下载Conflu…

leetcode39. 组合总和(回溯算法-java)

组合总和 leetcode39. 组合总和题目描述解题思路代码演示 回溯算法专题 leetcode39. 组合总和 来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/combination-sum 题目描述 给你一个 无重复元素 的整数数组 candidates 和一…

浏览器跨域限制:为什么浏览器不能跨域发送Ajax请求?

💂 个人网站:【海拥】【游戏大全】【神级源码资源网】🤟 前端学习课程:👉【28个案例趣学前端】【400个JS面试题】💅 寻找学习交流、摸鱼划水的小伙伴,请点击【摸鱼学习交流群】 目录 前言什么是跨域请求&am…

什么是虚拟展厅?教您快速打造一个3D元宇宙虚拟展厅

引言: 在如今的数字化时代,虚拟展厅和3D元宇宙成为了展示和推广产品、品牌以及创意的新兴方式。虚拟展厅为企业带来了无限的可能性,如何快速打造一个3D元宇宙虚拟展厅成了许多企业想了解的。 一.虚拟展厅的魅力 1.什么是虚拟展厅…

BUUCTF刷题十一道(07)

文章目录 [Zer0pts2020]Can you guess it?[CISCN2019 华北赛区 Day1 Web2]ikun[GWCTF 2019]枯燥的抽奖[WUSTCTF2020]CV Maker[NCTF2019]True XML cookbook[RCTF2015]EasySQL[CISCN2019 华北赛区 Day1 Web1]Dropbox[CISCN2019 华北赛区 Day1 Web5]CyberPunk[红明谷CTF 2021]wri…

防汛四级应急响应启动,尾矿库如何安全度过汛期?

国家防总办公室向上海、江苏、浙江、安徽、江西、河南、湖北、湖南、广西、重庆、四川、贵州、云南等省份防指下发通知,要求全面压实以地方行政首长负责制为核心的各项防汛责任,加强精准监测预报和会商研判,落实好“叫应”机制,确…

我把一句话需求交给AI,它竟然给我返回了……

👉腾小云导读 也许你经历过这种情况:产品和设计同学用一句话就把需求说完了,你抓破脑袋做出来的版本又达不到他们的要求。不如尝试让 AI 承担痛苦,让它理解、拆解并实现一句话需求?本篇作者尝试提出一个自动配置可视化…

踩坑:Vue3 中的watch监视属性

文章目录 一、问题一:reactive 定义的响应式数据无 oldValue问题分析解决 二、问题二:watch默认开启了深度监视且无法关闭问题分析解决 一、问题一:reactive 定义的响应式数据无 oldValue 问题 监视 reactive 所定义的一个响应式数据&#…

linux安装git步骤;基于yum、dnf、源码安装【非常详细】

这里写目录标题 一 dnf安装二 yum安装三 源码安装1 基于 RPM 的发行版(Fedora/RHEL/RHEL衍生版)2 基于 Debian 的发行版(Debian/Ubuntu/Ubuntu-derivatives)3 yum软件包管理器来安装,这个一般是CnetOS Stream 8以前的版…

POLARDB IMCI 白皮书 云原生HTAP 数据库系统 一 与其他的商业数据库在HTAP的异同点(译)...

开头还是介绍一下群,如果感兴趣polardb ,mongodb ,mysql ,postgresql ,redis 等有问题,有需求都可以加群群内有各大数据库行业大咖,CTO,可以解决你的问题。加群请联系 liuaustin3 ,在新加的朋友会分到2群(共…

​关于 O2OA (翱途) 软件商用许可证授权形式的调整​

尊敬的小伙伴们: 非常感谢您对 O2OA 开发平台的关注与支持! 兰德网络 O2OA 平台软件商用许证授权形式正式由 “按年授权” 改为 “按版本买断” 的永久许可形式。 这意味着,合作伙伴在持有特定版本的软件商用许可后,将能够永久…

《Python精选300题》

专栏简介 Python 是一门功能强大的编程语言,已经成为了数据科学、机器学习、Web 开发等领域的首选语言之一。因此,掌握 Python 的相关知识点对于学习和使用这门语言至关重要。 本专栏中,精选了 300 道题目,囊括了 Python 入门阶段…

什么是链表?

链表 什么是链表? 链表是有序的数据结构,链表中的每个部分称为节点。可以首、尾、中间进行数据存取,链表的元素在内存中不必是连续的空间,每个节点通过 next 指针指向下一个节点。 优点 链表的添加和删除不会导致其余元素位移。…

java中synchronized和ReentrantLock的加锁和解锁能在不同线程吗?如果能,如何实现?

java中synchronized和ReentrantLock的加锁和解锁能在不同线程吗?如果能,如何实现? 答案2023-06-21: java的: 这个问题,我问了一些人,部分人是回答得有问题的。synchronized这是个关键字&…

23---WPF数据库ORM框架

一、仓库--存放货物---数据库--存放数据--关系型数据/非关系型数据库 1.关系型数据:保存数据保存关系--SqlServer,MySql,Oracle 2.非关系型数据:保存数据---Redis,Mongo,Memecahe 二、关系型数据和非关系型数据的区别: 1.关系…

高效底座模型LLaMA

论文标题:LLaMA: Open and Efficient Foundation Language Models 论文链接:https://arxiv.org/abs/2302.13971 论文来源:Meta AI 一、概述 大型语言模型(Large Languages Models,LLMs)通过大规模文本数据的…

Selenium 环境配置

如果你做过 Web 测试的工作,那么你应该明白 Web 测试中最重要的一部分工作就是自动化测试。自动化测试,顾名思义就是让浏览器自动运行,而无需手动操作。这和我们爬虫工作原理有些相似,我们爬虫也需要让浏览器运行网址来获取我们需…