研发工具链介绍

2023-10-29

本节课程为《研发工具链介绍》,我们将主要学习三个工具。项目管理工具—iCafe、代码管理工具—iCode、交付平台—iPipe。
此外我们知道,管理实践具有以下三个特点:①用“精益”指引产品规划;②用“敏捷”加速迭代开发;③用“数据”驱动持续改进。而本节课程学习的这三个工具,就是对管理实践三个特点的完美覆盖。

项目管理工具——iCafe

01 需求管理

需求管理是一个项目的基石。在互联网行业中,因为产品需求迭代快速这一特点,需求管理一直非常令人头疼。所以如何对需求进行更好的管理,更好的做出产品规划对互联网行业的项目来说是一个重要的问题。

传统的需求管理方法有以下几种:

①直接将需求写在文档上面,

②将需求制作成需求卡片,通过这样的方式让研发人员与需求人员保持信息的一致。

③使用Excel进行需求管理和排序。

这三种方法都存在很多的缺点,如撰写文档耗时长、文档编写需求较多人力、文档维护成本高、文档使用过程中沟通不畅等等。文字因为其阅读特性,不方便对任务进行直观的展现。所以在很多项目开发过程中,经常会出现文档交给研发人员后,开发出的产品与文档设计不一致的问题。

互联网的需求管理需要具有需求完整性、沟通高效性、表达准确性,沟通便捷性等特点。

研究表明,不同的沟通方式产生的沟通效果各有不同。在所有的沟通方式中,文档沟通是最低效的沟通方式,而面对面使用白板沟通是最高效的沟通方式。结合多种高效沟通方式,就产生了用户故事地图这种新颖的需求管理、排序的方式。

用户故事地图是敏捷项目管理中一种重要的管理方式。

首先使用卡片在白板上将所有的需求列出来,这样有助于展现产品全貌,而且将需求转化为可视的卡片能更好的根据用户反馈对任务需求进行排序;

然后使用不同的颜色对卡片进行分层。蓝色卡片是第一层,黄色卡片是第二层,白色卡片是第三层。将颗粒度最小的需求放在白色卡片这一层,低颗粒度的需求更容易被研发人员接受。

最后通过横向的分组,把迭代计划每一期的每一版本的需求进行归类分组。这样有利于打通产品视图和研发计划视图。

通过以上步骤可以得到一个较为完整的用户故事地图。

在这里插入图片描述

用户故事地图是一种非常高效需求管理方式,目前所有的研发团队都可以在效率云上不受物理条件限制的直接使用它进行需求管理和追踪。

02 迭代计划

在完成产品的版本规划后,研发团队需要制定相应的迭代计划。敏捷、快速、合理地迭代计划能够更高效地促进项目的迭代。

基于用户故事地图,可以在制定迭代计划的过程中中直接对需求进行上下拖拽修改优先级,左右拖拽更改计划。这样可以更清晰的展现迭代计划,使开发团队更好定位到的里程碑,完善整个迭代计划。

03 进度追踪

进度跟踪,有三大法宝,他们分别是:站会、卡片墙、燃尽图。

站会同卡片墙相结合,在站会过程中可以直接通过电子看板共享项目进度和项目问题,提升站会沟通效率。

在这里插入图片描述

通过燃尽图和统计数据,团队就能直接得知开发进度及遇到的问题。

04 持续改进

针对持续改进,我们提供了卡片状态时长散点图和卡片状态累积流图这两种工具。

在这里插入图片描述

卡片状态时长散点图能够精确展示团队工作速率,从需求提出到需求上线的单个周期时长和平均周期时长,精确的展示团队在每一个状态的工作速率及工作速率的变化。

在这里插入图片描述

卡片状态累积流图能够宏观展示项目各流程效率趋势,颜色的色块宽表示该流程积压的需求和任务比较多,色条变窄表明团队状态流动速率提高。

基于这两幅图工具,研发团队可以周期性地进行自检,对过去一段时间的工作进行自我审视,然后持续改进。

代码管理工具——iCode

iCode是一个代码管理工具,围绕它我们主要讲解两个实践集:工作流和评审。

01 工作流

运转无序,开发混乱是困扰很多团队的一个问题,它严重影响产品的交付。典型的问题有:代码处理随意、bug重复发生、测试不完善、发布版本混乱等。

面对种种问题,我们同时支持两种标准的工作流,用来保障团队有序协作。

(1)基于主干的工作流

在基于主干的工作流中,整个团队维护一条主干分支。为了保证主干分支的质量,需要配套严格的准入机制,变更点在合入前需要经过机器、人工的双重评审,通过后才能合入主干。

需要发布的时候,会基于主干拉取发布分支,这个分支其实是主干特定点的快照,单纯用于发布,如果发布问题过程中发现问题,回到主干修复Bug或进行功能增强,必要时再将主干提交拣选到相应的发布分支上。

分支发布和主干并行不悖,不用担心开发中的功能被带到线上,发布完成后恢复到一条主干的简明模式。

基于主干的工作流优点有:

①主干质量高,随时可以发布。

②模型简单,只有一条主干,节省分支合并的成本。

但是该工作流也有一定的缺点。在开发高质量的工程项目时,团队需要建设完备的测试用例,在提交环节要求提交人保持原子提交,即功能和提交一一对应。

(2)基于分支的工作流

在基于分支的工作流中,主干用于存储线上代码,需要变更时,基于主干最新代码开分支完成功能的开发、测试和发布;分支发布前,需要先同步主干的更新;上线之后,需要将分支合并回主干。

基于分支的工作流的优点有:

①分支并行,独立开发,分支不会相互影响;

②对团队而言,使用门槛低,分支贯穿一个独立功能开发、测试、发布的整个过程,给予团队充分的时间完善测试用例及完成人工测试;

③容易上手,系统会引导开发人员完成新建分支、同步主干、合会主干等全部操作。

但是基于分支的工作流也存在一定的缺点,如:需要花费分支合并的成本、需要不断地同步主干,来发现分支的冲突风险点并提前解决。

02 评审

评审是保证团队工程质量的一个重要的过程。如果不经过评审直接提交代码,可能会污染代码历史,增加后期维护成本,严重时可能还会产生代码质量问题。

在项目开发过程中,可能会出现本地运行正常的代码,在测试环境或者线上环境突然崩溃的情况。针对这样的问题,可以使用质量防护网。质量防护网包括代码扫描、持续集成、人工评审三个层次。

代码扫描能够找出不符合代码规范的地方,在行间距中插入代码评论,同时出具一个风格报告,方便工程师对代码风格问题进行修改。

持续集成会配置一个云端构建,通过云端构建,快速探测出代码初期Bug,帮助开发人员提早修复。

在前两步做好后,团队的资深成员就可以就架构、逻辑、设计等问题进行深入评审。

通过这三步,实现了机器、人工双重评审,层层递进,确保团队的工程质量。

交付平台——iPipe

iPipe是一个交付平台,围绕它我们主要讲解三个实践集。

01 固化端到端的交付流程

在这里插入图片描述

标准的软件交付的过程包括以下几点:

首先会有一个明确的发布版本的输入,

然后基于这个发布版本,会进行代码提交。

代码提交之后会进行编译、测试。其中测试环节可能包含模块级的测试和系统级的测试。

最后进行发布。发布上线的过程可能会分为预上线、生产灰度、生产全量几个环节。

为了使代码变更流程标准化,需要使用交付流水线的方式来落地。通过标准化交付过程从而达到可靠、可重复的作用。交付流水线是串行执行的,上一个阶段成功执行后,就会触发下一个阶段。执行阶段由任务组成,这些任务可以是穿行的也可是并行的。任务的执行状态决定阶段执行状态。

iPipe这一工具目前包含了标准的交付流水线,用户可以在iPipe中看到流水线的构建情况。在使用交付流水线的过程中,如果当前阶段失败,后面的阶段就不会继续进行,这样可以节省资源并且快速的发现问题,及时修复问题。

02 插件化现有工具和服务

在交付流水线中执行各种任务时需要依赖很多工具和服务,比如maven,docker、jenkins、git等工具和服务。

我们通过一套标准的插件化开发规范将这些工具和服务集成到了流水线中,用户在使用流水线的过程中就可以很方便的使用这些插件和服务。如果流水线中没有想使用的插件、服务或工具,可以根据效率云提供的插件规范,自行扩展以满足项目需求。

03 数据度量驱动过程改进

通过交付流水线,可以快速获取项目所有的数据和信息,如:一个版本从代码提交到交付上线的周期或者一个项目各个阶段发现的缺陷数量等等。

用户可以通过调用API获取数据来进行数据的度量,从而推动交付过程的改进。在后续的发展中,平台会识别项目中关键的数据指标并且自动化的形成更加鲜明的数据报表。这样就可以持续的进行数据度量,给个人及团队提供一个维度丰富的平台。

点击进入了解更多技术资讯~~

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

研发工具链介绍 的相关文章

  • OSGi:将参数传递给特定包

    我有一个带有自定义 Main 类的自定义 jar 它启动 OSGi 框架并安装 启动捆绑包 这个主 jar 还包括一个属性文件 目标 我有一个包 A 它应该以某种方式获取主 jar 的该属性文件的属性 我的第一次尝试是在捆绑包 A 中定义一
  • 从 PDF 中提取不可选择的内容

    我正在使用 Apache PDFBox 从 PDF 文件中提取页面 但找不到提取不可选择的内容 文本或图像 的方法 从 PDF 文件中选择内容是没有问题的 请注意 相关 PDF 在复制内容方面没有任何限制 至少从我在文件的 文档限制摘要 中
  • 将比较器对象存储在数组中

    我为我的对象定义了 4 个比较器 如下所示 public static Comparator
  • 数组查找时间复杂度和。它是如何存储的

    众所周知 通过索引访问数组的时间复杂度是O 1 Java 的文档ArrayList 它由数组支持 对其也有同样的说法get手术 size isEmpty get set iterator 和 listIterator 操作以恒定时间运行 查
  • Spring Batch如何作为Reader读取多个表(查询)并将其写入平面文件写入

    在我的项目中 我读取了具有不同查询的多个表 并将这些结果集合并到平面文件中 我该如何实现这一目标 我的意思是 JdbcReader 直接采用 1 个选择查询 我如何自定义它 如果 JdbcCursorItemReader 不能满足您的需求
  • 在 Java 中重置 Graphics2D 对象

    我正在用 Java 尝试 Graphics2D 但像往常一样 我被困住了 P 问题是 假设我有这个代码 Graphics2D g Graphics2D this getGraphics Inside a JFrame g rotate Ma
  • 如何检测线程是否被IO阻塞?

    在Java中 线程可以有不同的状态 新的 可运行的 阻塞的 等待的 TIMED WAITING 的 终止的 然而 当线程被IO阻塞时 其状态为 RUNNABLE 如何判断是否被IO阻塞 NEW 线程已创建但尚未处理 可运行 线程正在占用CP
  • 用户“root”@“localhost”的访问被拒绝

    我正在尝试从数据库中获取记录 但我面临这个访问被拒绝的问题 我尝试了 Stack Overflow 上提到的其他解决方案 例如向用户授予权限 但没有任何效果 访问数据库的代码 public void service HttpServletR
  • Java 创建 Thread 实例时会发生什么

    我有一个关于 Java 线程和操作系统线程的问题 我读了Java 线程与 Pthreads https stackoverflow com questions 5269535 java threads vs pthreads and Jav
  • Spring Batch:比较数据库之间的数据

    我有两个数据库 Oracle 和 MySQL 目标是将Oracle表中的值保存到MySQL中 要求 MySQL表中不存在数据 但我在理解 Spring Batch 时遇到了困难 步骤中 它包含itemReader itemProcessor
  • 如何对JConsole的密码文件的密码进行加密

    我正在使用 JConsole 访问我的应用程序 MBean 并使用 password properties 文件 但根据 Sun 的规范 该文件仅包含明文格式的密码 com sun management jmxremote password
  • 如何在最短的时间内克隆java中的输入流

    有人可以告诉我如何克隆输入流 并花费尽可能少的创建时间吗 我需要多次克隆输入流以使用多种方法来处理 IS 我尝试了三种方法 但由于这样或那样的原因 事情不起作用 方法 1 感谢 stackoverflow 社区 我发现以下链接很有帮助 并将
  • 在Java中一个接一个地播放WAV文件

    我正在尝试玩几个WAV http en wikipedia org wiki WAV文件一个接一个 我尝试了这个方法 for String file audioFiles new AePlayWave file start 但这会同时播放它
  • 如何迭代SparseArray?

    有没有办法迭代 Java SparseArray 适用于 Android 我用了sparsearray通过索引轻松获取值 我找不到 看来我找到了解决方案 我没有正确注意到keyAt index 功能 所以我会这样做 for int i 0
  • GAE - Eclipse 中的开发服务器未更新?

    我在 Eclipse 上使用 Google AppEngine 开发服务器 我的本地网页似乎没有更新 直到我在开发服务器上进行了多次重新启动 使用 Eclipse 中的 运行 或 调试 按钮 我究竟做错了什么 基本流程是 更改 java 文
  • Android:如何以编程方式仅圆化位图的顶角?

    我目前正在使用这段代码 Override public Bitmap transform Bitmap source Bitmap result Bitmap createBitmap source getWidth source getH
  • Google OR-Tools:无法运行 java 示例,java.lang.UnsatisfiedLinkError:java.library.path 中没有 jniortools

    我是java新手 我想尝试google or tools来解决车辆路由问题 只是尝试运行 java 示例here https developers google com optimization introduction run progr
  • 仅在java中使用数组计算50的阶乘

    我是java的初学者 我有一个作业要编写一个完整的程序 使用数组计算 50 的阶乘 我无法使用像 biginteger 这样的任何方法 我只能使用数组 因为我的教授希望我们理解背后的逻辑 我猜 然而 他并没有真正教我们数组的细节 所以我在这
  • 如何在 SpringDoc OpenAPI 3 中引用文件?

    我有 Spring Boot 项目 我想在其中记录我的 API 这里是正在处理的 Web 服务的示例 ApiResponses value ApiResponse responseCode 200 content Content media
  • gwt - 在 RPC 调用中使用 List

    我有一个 RPC 服务 方法如下 public List

随机推荐

  • Ubuntu16.04桌面突然卡住怎么办?

    不知道有没有小伙伴和我一样 正在Ubuntu上工作呢 突然桌面就卡住了 键盘也没了反应 鼠标那个箭头只能移动 但是点击时却没有反应 作为一个Ubuntu小白 在最近的学习过程中遇到了好多问题 我把这些问题需要注意的地方记录下来 希望可以帮助
  • JMC性能监测

    文章目录 一 打开JMC 二 界面说明 三 配置java监测 四 总结 性能监测图形化 通过jdk自带的JMC工具即可轻松实现 JMC的全称为java mission control 意思为java程序任务控制台 一 打开JMC 在你下载好
  • 图解通信原理与案例分析-9:SFP光通信案例--数字信号的2-ASK光调制解调

    文本以SFP光模块的内部实现为案例 介绍数字电信号的光信号调制解调的基本原理 即如何把二进制的数字电信号调制到光信号上进行传输 反之 如何从光信号中解调出二进制的数字电信号 这部分的调制解调 完全是有SFP硬件实现的 不需要软件的编码 1
  • 关于Qt关闭程序但保持程序后台运行的坑(非常棘手)

    1 先说说我的后台程序的应用场景 关闭当前程序 隐藏 调用另一个ui ui的类型是悬浮窗 Qt Tool 并且在系统通知栏可以见到图标 后台程序逻辑都正常执行 2 实现后台运行的两种主要方式 1 重写closeEvent 并设置event
  • javaswing 设置背景图片

    背景图片的路径用自己的 改一下 package com gao import java awt import java awt event ActionEvent import java awt event ActionListener i
  • 树莓派不能上网解决方案

    判断自己的树莓派能不能上网 用这条命令试试 ping www baidu com ping www baidu com Temporary failure in name resolution 出现了以上错误 说明树莓派不能上网 解决思路
  • css3实现hover颜色,背景色,宽度等平滑变动(transition)

  • webpack 和html-webpack-plugin版本对应问题

    为了实现功能 配置生成预览页面 以前是 要实现的效果是 直接打开设置的首页 这里由于版本对应问题 一直报错 当前版本 devDependencies html webpack plugin 2 30 1 webpack 3 6 0 webp
  • idea使用lombok插件不能生效的原因

    要成功的使用lombok插件 需要3个步骤 一 需要先在idea中下载Lombok plugin 点击File gt settings gt plugins gt 然后点击以下图中所示 接着 在输入框输入lombok进行搜索 之后点击安装便
  • 粤嵌GEC6818-学习笔记2-屏幕相关及音频播放

    这里写目录标题 LCD屏幕 简介 操作 打开屏幕 映射 如何让plcd指向屏幕首地址 BMP图片的解析 把一张BMP格式的图片显示在我们的开发板上 触摸板的相关操作 练习 获取屏幕坐标 线程进程 练习 创建广告播放的一个线程 音频播放 播放
  • STM32——GPIO输入——按键检测

    硬件介绍 当按键置空时 IO接地 按键按下之后 IO口接通3 3V高电压 电流比较大 为了避免损坏IO 这里需要加装一个限流电阻 可以看到IO口是默认低电平 按键按下后产生一个上升沿 和平常的电路设计不太一样 这是因为PA0还具有一种自动唤
  • centos7网卡配置参数详细

    CentOS 7 中的网卡配置参数通常位于 etc sysconfig network scripts ifcfg
  • Python爬虫从入门到精通:(1)爬虫基础简介_Python涛哥

    第一章 爬虫基础简介 爬虫概述 前戏 你是否在夜深人静的时候 想看一些会让你更睡不着的图片 你是否在考试或者面试前夕 想看一些具有针对性的题目和面试题 你是否想在杂乱的网络世界获取你想要的数据 爬虫的价值 实际应用 就业 什么是爬虫 通过编
  • TensorFlow学习(4) 学习率调度 & 正则化

    1 学习率调度 恒定高学习率训练可能会发散 低学习率会收敛到最优解但是会花费大量时间 1 1 常用的学习率调度及其概念 幂调度 指数调度 分段调度 性能调度 1 2 实现幂调度 在创建优化器时 设置超参数decay 使用示例 optimiz
  • Python 面向对象程序设计类的使用、继承等

    这个实验主要通过了解对象 类 封装 继承 方法 构造函数和析构函数等面向对象的程序设计的基本概念 掌握 Python 类的定义 类的方法 类的继承等 在做实验时要注意 init 应该是4个下划线 前后各两个 也要注意自己的属性条件 并且也可
  • 对 tcp out-of-window 的安全建议

    TCP 收到一个 out of window 报文后会立即回复一个 ack 这是 RFC793 中 SEGMENT ARRIVES 段的要求 但这是为什么 难道不是默默丢弃才对吗 对 oow 报文回复 ack 岂不是把正确的 ack 号回过
  • L2-041 插松枝

    include
  • 复习1: 深度学习优化算法 SGD -> SGDM -> NAG ->AdaGrad -> AdaDelta -> Adam -> Nadam 详细解释 + 如何选择优化算法

    深度学习优化算法经历了 SGD gt SGDM gt NAG gt AdaGrad gt AdaDelta gt Adam gt Nadam 这样的发展历程 优化器其实就是采用何种方式对损失函数进行迭代优化 也就是有一个卷积参数我们初始化了
  • 无向图染色

    无向图染色 给一个无向图染色 可以填红黑两种颜色 必须保证相邻两个节点不能同时为红色 输出有多少种不同的染色方案 输入描述 第 行输入M 图中节点数 N 边数 后续N行格式为 V1V2表示一个V1到V2的边 数据范围 1 lt M lt 1
  • 研发工具链介绍

    本节课程为 研发工具链介绍 我们将主要学习三个工具 项目管理工具 iCafe 代码管理工具 iCode 交付平台 iPipe 此外我们知道 管理实践具有以下三个特点 用 精益 指引产品规划 用 敏捷 加速迭代开发 用 数据 驱动持续改进 而