阿里妹导读:业务的快速发展,须要咱们更快速地响应,和更高质量产品的交付。如何从原来大(xiao)迭(pu)代(bu)的开发模式切换为精益开发模式?以 2-1-1(2周需求交付周期,1周需求开发周期,1小时集成时长)为愿景驱动改进,达到持续交付价值,响应业务要求成为咱们的目标。今天,闲鱼工程师琪钰为咱们分享:闲鱼是怎样朝着这一目标前进的?切换为精益开发模式后,又面临了哪些问题和挑战?名词解释:精益开发模式,团队基于看板组织协做,以持续地交付需求为目标,需求按优先级,逐步进入开发、提测。因为在项目协做中,采用看板泳道来管理需求,所以在闲鱼,同窗们习惯称之为泳道模式。weex
因此,构建一个贯穿从需求到代码开发,再到测试整个过程的流程,并将其工具化、自动化就显得十分必要和紧迫,而持续集成就是这一流程的重要形式体现,构建一个高效的持续集成系统摆在咱们面前。这将必定程度下降开发过程当中的沟通成本,流程工具化,加速自动化。并发
如今针对服务端的集成发布有不少能够参考的实践,但对客户端的集成发布来讲,咱们依然面对以下难点。工具
如何作到需求和代码分支关联,确保代码可追溯;单元测试
如何作到代码分支和打包项目关联,代码变动可自动触发打包;测试
如何作到代码范围和测试范围关联,确保测试回归范围。ui
而要解决上面的这些难点,缺乏一站式的工具平台支撑(集团内平台对服务端的发布有很好的支持,但对于客户端的集成发布来讲,涉及平台工具比较多)。编码
为了解决从需求建立到发布整个项目研发过程当中协同、构建、集成和测试等遇到的问题,提升团队的持续交付能力。针对客户端集成发布,咱们的总体方案的目标是首先是拉通整个需求交付流程中各个环节,简化持续交付工做,提供及时的质量反馈机制,让开发同窗关注在业务的开发;有效提升集成成功率及缩短集成发布周期,让版本可以按时上线你们可以按时下班;建设可视化、自动化、智能化的持续集成流水线,让业务需求真正的可持续交付。spa
空谈误国,实干兴邦。在谈论更多的改进以前,咱们先把基础本的流程经过工具先串起来,只有先看到总体,而后再发现问题逐步改进。开发
流程化get
咱们的核心流程是这样的,一旦建立需求分支,交付通道就已创建,直到需求发布。
当完成了第一步,将整个流程打通以后,咱们发现,在整个流程中,依然有不少是依赖人工操做的地方,这是最容易出错,而且极低地影响效率的地方,对咱们来讲,这是改进的机会,因此,第二步咱们的重点就是作好无人化和自动化。
无人化
为了支撑持续集成流水线的运行,以无人化、自动化、可扩展为目标,及基于最小研发成本原则,咱们作得事情主要分为精益开发流程协同支撑无人化及测试验证自动化两部分。
fish CI 主要是研发流程支撑,如需求绑定、监听变动、触发打包、触发测试等,fish guard 主要测试件调度、执行,结果通知,及后续测试件接入扩展部分。目前已接入的测试件主要有 UI 遍历、UI 识别、monkey、单元测试等。后续计划按照分层测试的原则,接入更多的测试件,如代码静态扫描、weex 自动化测试、服务端测试件等,加强测试件覆盖度,拓展自动化测试边界。关于这一部分,咱们将在后面的文章中作更深刻的分享。
数据度量
管理学之父彼得德鲁克说:“若是你不能度量它,你就没法改进它”,其实也是咱们整个持续集成流水线的自检,咱们到底作得怎么样,持续交付的能力如何,咱们定义了以下指标用于后续统计。
指标主要分为响应能力、效率、质量三个维度,经过响应能力的这些指标,能够反应出打包变快了,质量反馈变快了,集成变快了,集成频率变高了;有效率的指标,反应出流水线工做的有效性,成功率越高说明流水线越稳定;最后质量,主要从代码质量和项目测试质量来度量,经过修改的文件数,模块分布能够反映出代码的拆分、依赖等状况;经过项目测试中 bug 的分布和库存,能够反映出项目质量状况,是否及时发现及时修复,是否达到发布标准等。
闲鱼从3月中旬开始试运行精益开发模式(持续交付模式)到如今,闲鱼全部的业务需求所有走精益开发模式,咱们交付的速度,由一个月一个版本到两周一个版本。这离不开咱们在流水线各个环节中的改进,如打包变快了,需求分支构建次数愈来愈多,集成频率愈来愈高,以及自动化测试验证及时反馈集成质量状况。此外,闲鱼在精益开发模式下质量得到了明显提高,以下图所示:
绿色分割线左半部分,是以前未切换到泳道模式前的一个版本,bug 趋势看,前面编码阶段,测试基本未介入,大量的代码批量集成后集中测试,在缺陷充分被移除后,才能交付,没法持续交付。绿色分割线右半部分,是某个业务线的缺陷趋势图,小批量的持续集成、及时测试和发现问题、及时修复,能够快速持续交付。
简单总结下,咱们作的事情,第一步是拉通整个交付过程,有一个稳定的交付过程,第二步保证交付的效率,即响应变快了,集成变快了,质量反馈变快了,第三步持续交付,关键词是“持续地”,频次上提出了更高的要求,集成的频率变高了,之前一个月集成一次,如今天天都能集成,从一个月一次,到 nightly build,再到随时集成。即相比之前,让开发同窗“更”有信心集成一次变动并发布。
所以,咱们的终极目标就是7*24随时发布,没有发布窗口限制,真正作到交付流水线自动化无人化和全自动化测试,下降持续构建成本,拓展自动化测试边界。
本文来自云栖社区合做伙伴“阿里技术”,如需转载请联系原做者。