通过度量把发版过程的不确定变成确定-构建闲鱼版本持续交付管道及度量 | 实践案例三

简介: 2018 财年初为了应对闲鱼业务和技术快速发展。闲鱼技术团队在云效中心敏捷教练的指导下闲鱼客户端的泳道研发支撑项目 kickoff。

2018 财年初为了应对闲鱼业务和技术快速发展。闲鱼技术团队在云效中心敏捷教练的指导下闲鱼客户端的泳道研发支撑项目 kickoff。

确定了端侧的研发模式从“小瀑布模式”到“泳道”持续集成的转变。

确定了端侧2-1-1的核心愿景目标。因为端侧依赖打包,适配验证等必要环节。

目标设置为2-1-7。

  • 即:“2"指的2周的交付周期,85%以上的需求可以在2周内交付;
  • 第一个“1”指的是1周的开发周期,85%以上的需求可以在1周内开发完成;
  • 第二个“7”指的是7小时的发布前置时间 - -拉集成代码后可以在7小时内完成发布。

确定核心目标很关键,但执行和支撑也同样重要。

我们做了哪些事情?核心目标 :“2-1-7” 实施的效果如何呢?下文主要从几个方面介绍:

一、建能力

背景:集团 AONE(云效)系统针对服务端做了比较多持续集成的支撑,但缺少支撑端侧持续集成的支撑系统,我们建立了两个平台 fishci,fishgurad。

  • fishci 主要实现了端代码监控,项目打包,测试件触发的能力。
  • fishguard 主要 建立了 测试包,测试机,测试任务和通知管理的能力。两个平台的设计思路是:

 - 低投入,围绕核心功能展开,做功能最小集合。
 - 充分复用已有集团已有中台平台能力。

  • 研发无人化理念建设:测试件自动构建,触发运行自动化

串联系统

image.png

由此建立了 1 次代码提交(commit,push,merge request )到实时出端主干回归测试结果持续集成能力。

同时沉淀了整个端侧研发效能和质量的过程数据。

二、建度量

目标达成,度量很关键,度量决定了我们做的事情在目标大方向上是否偏离,距离目标还有多远。所以对 2-1-7 核心目标做度量之外,我们还需要分解过程目标。

fishci 和 fishguard 两个平台支撑了端侧的代码变更,编译打包,触发数据,测试件运行数据,沉淀在平台的这些数据就具备了版本运营的能力。

技术 PM,PTM,TL 可以通过数据关注版本运行状态,跟踪和做持续的改进。

三、改过程

泳道集成研发过程整体图:

image.png

  • 研发分支管理:需求关联分支,develop 分支,develop 和 release 管理,合入代码

评审卡口。

  • 端开发:端架构升级。
  • 测试技术:端侧 UI 测试件自动构建和回归,端性能测试自动化,端侧 monkey 自动化触发。
  • 流程卡口:需求 aone(云效)管理,新建代码 review 卡口,新建集成质量卡口,发版质量标准,新建性能测试集成卡口。

四、版本研发度量数据:(度量数据更新到 3 月份底)

1. 发版效能和需求吞吐量:

发版准时率度量:20/21= 96%

需求吞吐量(按月):

结论:需求吞度量逐步提升。3 月底需求吞吐量达到历史最高。

---使用合入 develop 分支的分支数度量(每一个分支对应一个 aone(云效)需求编号)

image.png

研发耗时:

需求“端”到“端”接手开发到开发测试(自测)时间即效能数据,(2-1-7)中的 1度量数据:使用泳道第一次 push 代码的时间---合入 develop 的时间做度量。

结论:开发到合入主干时间,之前无度量数据。

通过数据暴露的问题1月份泳道研发分支大需求过多,导致平均研发周期在2周左右,(玩家,社区)。

我们的工程体系对需求的拆分支持的还需要提升,后面把闲鱼社区做独立 bundle 的拆分。

三月份研发周期下降到1周左右。接近目标。

image.png

2. 持续集成效率核心数据:

集成效率核心数据

使用合入develop分支的变更频次和变更规模度量的task的次数和代码规模(文件数)。

结论:可以看到,持续集成的按月次数提升,提交分布更均匀,持续集成的节奏在朝着正确的方向运转。

image.png

发布效率:从拉集成分支到发布

泳道模式前:1周目前版本:平均1.5天

3. 集成质量核心数据:

集成后变更规模:

使用 release 分支变更频次和变更规模度量,越少越好。

结论:release 分支提交次数在明显上升,需求吞吐量增加的同时,集成后代码质量下降。这是我们效率增加后质量的负向指标也升高,风险在增大。

image.png

总缺陷在泳道阶段,集成阶段的缺陷走势。

结论:缺陷总数趋势稳定,提测阶段缺陷数在增加,集成后的缺陷占比在下降。

image.png

泳道提测质量和遗留到集成阶段缺陷趋势。

(major bug+低级 bug 数)

结论:泳道提测质量恶化,质量压力持续增加,1 月份提测质量达到最差。项目风险也最高。

三月份有所下降,质量压力好转。

image.png

提测缺陷密度和遗漏到集成阶段缺陷密度趋势。

( 加权*10000 度量开发缺陷密度)

结论:随着开发提测质量随着需求吞吐量提高,提测阶段缺陷密度恶化,遗留到release 阶段缺陷密度有下降,依赖测试的泳道测试中的效率提升(发现更多的缺陷)。

三月份,需求吞吐量增高,变更量增大的情况下缺陷密度好转,整个质量压力好转。

image.png

五、小结

  1. 使用这些度量数据看可以得到结论,我们的研发过程从小瀑布集中式到泳道分布式持续集成,需求吞吐量增大,质量数据更透明,效能有明显的提升。
  2. 数据暴露问题看我们距离目标还有一定的差距,但从度量角度看这些问题数据是很有意义的。这些数据在度量之前是不可知的,也无从分析改进的切入点。现在可以通过改进action 和数据验证 形成闭环 来确定改进效果和方向。向正确方向行进很重要!同时通过平台设置质量卡口,使得我们的过程质量更透明和可控。(有趣是,设置了更多,更严格的质量卡口之后,整个效能数据并没有变差。)
  3. 总之通过这些度量数据,我们可以度需求吞吐量(多),需求响应速度(快),集成频次(好),缺陷收敛和缺陷密度(好),投入资源情况(省)。

如何评估研发效能,我的思考是通过数据可以拟合一张图(如下图。)

X 曲线才是我们的期望曲线。其他曲线都值得去监控和改进。

image.png

                                                                本文作者:韩越峰

lQLPDhsB-6_MTiPNBDjNB4CwJ0odfQ_xJCgB0-wc0wAZAA_1920_1080.png

相关文章
|
3月前
|
缓存 Devops jenkins
专家视角:构建可维护的测试架构与持续集成
【10月更文挑战第14天】在现代软件开发过程中,构建一个可维护且易于扩展的测试架构对于确保产品质量至关重要。本文将探讨如何设计这样的测试架构,并将单元测试无缝地融入持续集成(CI)流程之中。我们将讨论最佳实践、自动化测试部署、性能优化技巧以及如何管理和扩展日益增长的测试套件规模。
60 3
|
5月前
|
敏捷开发 监控
敏捷开发的全过程问题之快速建立迭代机制并进行规模化的推广和度量的问题如何解决
敏捷开发的全过程问题之快速建立迭代机制并进行规模化的推广和度量的问题如何解决
|
5月前
|
敏捷开发
敏捷开发的全过程问题之迭代排期时提前梳理下一迭代的需求列表的问题如何解决
敏捷开发的全过程问题之迭代排期时提前梳理下一迭代的需求列表的问题如何解决
|
5月前
|
消息中间件 监控 安全
质量标准化实践问题之帮助项目组所有同学了解测试进度和问如何解决
质量标准化实践问题之帮助项目组所有同学了解测试进度和问如何解决
54 2
|
5月前
|
测试技术 UED
质量标准化实践问题之测试策略的本质如何解决
质量标准化实践问题之测试策略的本质如何解决
32 2
|
5月前
质量标准化实践问题之功能预演中出现问题如何解决
质量标准化实践问题之功能预演中出现问题如何解决
31 1
|
5月前
|
测试技术 编译器 持续交付
持续部署的内涵和实施路径问题之集成尽早进行每次集成很小的问题如何解决
持续部署的内涵和实施路径问题之集成尽早进行每次集成很小的问题如何解决
|
6月前
|
运维 监控 安全
软件研发核心问题之用在需求拆解时明确监控范围与形式的问题如何解决
软件研发核心问题之用在需求拆解时明确监控范围与形式的问题如何解决
|
6月前
|
Java Spring
通用研发提效问题之配置的若干场景下若干方案的变化该如何解决
通用研发提效问题之配置的若干场景下若干方案的变化该如何解决
|
8月前
|
设计模式 安全 Java
老系统重构系列--如何用一套流程接入所有业务线
**摘要:** 本文介绍了老系统改造的过程,作者提出,ToB业务的挑战在于需要支持多种差异化的业务需求,而模板模式在处理这种需求时可能会导致继承关系复杂和粒度过粗。为了解决这些问题,文章提出了以下步骤: 1. **梳理流程差异点**:识别不同业务流程的差异,以便确定扩展点。 2. **领域模型梳理**:区分核心域和支撑域,确保核心域的稳定性。 3. **二次抽象隔离层**:创建隔离层,避免核心域因新业务接入而变得不稳定。 4. **基于SPI的扩展体系建设**:选择了COLA-SPI实现扩展点,允许业务域定义接口并实现差异化的流程逻辑。
183 0