写点什么

创业公司如何成功实施持续交付?一个 10 年测试老兵的经验谈

  • 2016-05-02
  • 本文字数:1593 字

    阅读完需:约 5 分钟

正如 Kurt Bittner 说的那样,如果敏捷仅仅是个开始的话,那持续交付则是头条!(我则更喜欢理解成高潮)。

“If Agile Was the Opening Act, Continuous Delivery is the Headliner!”——Kurt Bittner

现代企业要求软件开发过程保持最大的工作效率,传统的瀑布式开发早已跌入历史洪流,甚至敏捷宣言也已超过 10 年的历史,软件开发在经历了敏捷开发、持续集成后,正逐步迈入到持续交付的时代

持续交付是持续集成的延伸,强调以自动化、可视化的手段更快的将产品交付到客户手中。持续交付的一个重要衡量指标就是从代码提交直到客户能使用这个功能所花费的时间,通过实行持续交付,这个时间往往可以从原先的几天、几周缩短到几分钟。当然,快速交付并不意味着不可靠。

那么我们如何实施自己的持续交付?以我们实际项目为例,与大家进行一个探讨,归纳起来,总共经历了以下 3 个过程:

(点击放大图像)

搭建持续集成环境

以Jenkins 为核心搭建持续集成平台,每天定时从代码库中检出最新的代码进行编译、构建。构建结果通知到项目组,开发人员只需要关注每天的集成结果是否是绿的就可以了,同时加入测试环境部署及自动化测试。

(点击放大图像)

图1. 自动部署测试环境

(点击放大图像)

图2. Selenium 自动测试

代码规范及单元测试

简洁统一风格的代码有利于大家更好的理解及进行走查,而单元测试则是为了前期高质量的交付。

(点击放大图像)

图 3. 单元测试统计
通过 SonarQube+JaCoCo 的引入,可方便的定位到存在问题的代码行及单元测试情况。

(点击放大图像)

图 4. 问题定位

自动化测试流水线

持续交付讲究 Automate almost everything 将一切过程自动化起来,减少人工的干预。这里我们主要加入了以下环节。

自动化的接口及集成测试
测试进入的越早,发现问题修复的成本越低,通过引入 TestNG 等测试框架,对接口以及模块集成进行测试,有效的降低 Bug 流入后续环节的风险。

测试分级

将测试用例拆分成 SmokingTest、AllTest 等多套用例集,一方面快速反馈代码更新可能引起的风险,同时保证测试的有效覆盖,同时通过分布式集群并发执行等方式,加速执行效率,最终形成以下的流水线。

(点击放大图像)

图5. 管道流水线

自动化交付及全平台工具整合

在传统模式下开发、测试、运维往往比较独立,测试完成后由运维人员进行部署上线,但是由于运维人员能力水平存在高低,复杂环境下的发布往往只有固定的几人才能搞得定,从而导致上线发布周期被拉长。我们通过自建交付自动化工具,同时整合平台让运维对外提供服务,消除开发、测试与运维之间的边界,大大降低了自动化运维的门槛,让运维效率有了很大的提升。

(点击放大图像)

图6. 交付自动化

通过作业流程的编排,沉淀标准化作业封装,让普通运维人员快速实现相应的自动化脚本,同时通过整合资源/ 环境,对开发测试提供资源申请、部署等服务,加速自动化发布的验证,避免在正式发布时导致问题。

持续的反馈

上线发布完成并不意味着交付结束,当今社会是一个以服务取胜的社会,我们交付给用户的不再是简单的产品,更多的应该是服务。通过自动化的监控获取用户的反馈快速做出响应,不断提升我们的服务,才能提高用户的满意度和粘性。

总结

持续交付是一套方法论,通用的并不一定适合自己。希望仅以本文做一个引子,让大家寻找到适合自身的持续交付之路!附上一张交付过程中的工具集供大家参考。

(点击放大图像)

作者介绍

葛成远,10 年测试老兵,掉入运维领域而无法自拔。热衷于研究虚拟化、自动化等各种高逼格技术,努力让自己成为测试里最会运维,运维里最懂测试的牛B 攻城狮。广通软件十多年来耕耘于运维管理软件研发和服务咨询,面向数据中心、互联网、物联网三个领域提供整合化的运维工具和服务。微信公众号: broada_ops。


感谢郭蕾对本文的策划和审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们。

2016-05-02 17:376091

评论

发布
暂无评论
发现更多内容

Redis扩展数据类型详解

码农参上

redis 8月日更

连续霸榜丨EasyDL到底有多强?

百度大脑

人工智能 EasyDL

7金5银,中国跳水梦之队背后的"黑科技"是什么?

百度大脑

人工智能 黑科技 跳水队

舍弃Kong和Nginx,Apache APISIX 在趣链科技 BaaS 平台的落地实践

API7.ai 技术团队

nginx 开源 网关 kong APISIX

TCP 三次握手

W🌥

计算机网络 TCP/IP 8月日更

使用FL studio中文版进行音乐合并和剪切

懒得勤快

「独立思考」的背后是一个残酷的世界

非著名程序员

提升认知 个人提升 独立思考 8月日更

知乎李大海对话阿里云贾扬清:透视AI应用难题与未来趋势

阿里云大数据AI技术

Asop 之 消息处理机制

Qunar技术沙龙

android Linux 消息队列 安卓 epoll

企业不可忽视的三大关键时刻

石云升

管理经验 关键时刻 体验设计 8月日更

手把手 Golang 实现静态图像与视频流人脸识别

声网

音视频 人脸识别

对象存储手把手教四 | Bucket 生命周期管理

QingStor分布式存储

对象存储 分布式存储 生命周期 数据管理

程序员投入时间和精力实现财富增长之道,这可能会伴随你程序员整个生涯(请不要连续点赞)

孙叫兽

程序员 赚钱 教程 引航计划 签约计划第二季

聊聊 PC 端自动化最佳方案 - WinAppDriver

星安果

Python 自动化 WinAppDriver

新药开发瓶颈问题或将被打破,北鲲云超算平台开启药物研发“加速度”

北鲲云

想聊天?自己搭建个聊天机器人吧!

百度开发者中心

人工智能 最佳实践 方法论 飞桨 语言 & 开发

云服务器市场改变了行业市场的发展规模

九河云安全

绝了!阿里甩出“源码阅读指南”,原来源码才是最经典的学习范例

Java 编程 架构 面试 程序人生

波场DAPP钱包开发|波场DAPP特点

Geek_23f0c3

钱包系统开发 DAPP智能合约交易系统开发 波场DAPP 波场钱包

RESTful API

escray

学习 极客时间 如何落地业务建模 8月日更

5招教你实现多线程场景下的线程安全

华为云开发者联盟

Java 线程 多线程 线程安全

一文带你了解大厂亿级并发下高性能服务器是如何实现的!

Linux服务器开发

事件驱动 多进程 Linux服务器开发 IO多路复用 高性能服务器

企业数字化转型第一步,云服务器的部署以及搭建

九河云安全

图谱可视化|手把手教你采集明星人物关系并进行图谱展示

Python研究者

知识图谱 8月日更

fil矿机怎么购买?fil矿机在哪买?

fil矿机怎么购买 fil矿机在哪买

从新手村出来,我在 Apache APISIX 社区发出了第一个 PR

API7.ai 技术团队

开源 后端 API网关 APISIX

DeFi去中心化平台源码开发|智能合约系统搭建

量化系统19942438797

Karmada: 云原生多云容器编排平台

华为云原生团队

开源 容器 k8s多集群管理 多云管理平台 多云

趁着课余时间学点Python(十)面向对象的理解(前奏)

ベ布小禅

8月日更

ipfs矿机挖币哪家最好?ipfs矿机公司实力排行如何?

ipfs矿机挖币哪家最好 ipfs矿机公司实力排行如何

CSS 文档中定位指南:static、relative、absolute、fixed、sticky

devpoint

CSS 8月日更

创业公司如何成功实施持续交付?一个10年测试老兵的经验谈_语言 & 开发_葛成远_InfoQ精选文章