NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

迈出持续交付的第一步

  • 2013-11-07
  • 本文字数:2410 字

    阅读完需:约 8 分钟

持续交付整合了许多实践,这些实践的数量可能令人生畏。但是通过执行一些基本的步骤就可以让开发者立刻受益。我们应该如何迈出持续交付的第一步呢?AccuRev 的首席技术官 Dave Jabs提供了自己的建议。

Dave 认为能够在开发和交付方面表现优秀的软件开发组织将在商业中拥有战略优势。然而,很多开发组织很难做到及时交付软件。“持续交付”这一实践形式越来越成为准时交付软件工作的重要组成部分。持续交付定义了一组旨在消除机械障碍、提高交付速度以响应市场需求的实践行为。他最欣赏来自 Thoughtworks 的 Jez Humble 对持续交付的定义,他的书籍也开创了持续交付的先河。他说:“我的软件交付哲学的精髓是构建一个随时可以用于生产的软件。我们称之为‘持续交付’是因为我们不断运行一个部署管道来检测这个软件是否在交付状态。”

持续交付并非持续部署、也不是持续发布或者某些只有云计算应用程序需要考虑的东西。持续交付使用一组包括分段软件开发和交付过程的关键准则。过程中的每一阶段都设有一系列不同标准。在软件进入下一阶段前必须对当前阶段标准进行验证。这些过程中的测试、软件部署和推广均采用自动化模式。基于阶段的过程最终形成了交付管道。新软件可以在交付管道持续运行,并在运行过程中不断被验证以逐步获得更高的质量。

因为持续交付并非工具或产品,所以实现它是困难的。能实现成功的持续交付的方法必然是一个完整的方法,它必须协调好技术、过程、人和价值的关系。这意味着团队心态的转变,以及开发流程、开发工具的改变。要想做好持续交付,开发组织也需要做出改变。实现卓越的持续交付并不容易,但它的回报是非常诱人的:开发团队将达到先前认为不可能的运行速度。

Dave 认为,持续交付的全局概念并不新鲜。实际上,第一个敏捷原则就声明:“最高优先级是通过早期和持续交付有价值的软件满足客户需求。”尽管熟知这个概念,许多公司——甚至一些致力于敏捷过程的公司——都很难做到持续交付。

持续交付路线图的第一站是为开发和交付管道建模。当下许多开发组织由互相不联系的团队构成。如果你想做到持续交付,你需要保证管道从头到尾是连续的。

实现持续交付需要开发组织实现一个多步骤方法,Dave 总结道:

  1. 为现有流程建模并测量其周期时间
  2. 识别过程中的延迟
  3. 制定行动计划将当前延迟降为最小,消除潜在的延误

通过执行这些步骤,Dave 认为,开发组织可以消除开发工作与运营工作之间的等待延迟,以获得一个单一、统一标准,概念上可以执行各种交付软件的管道。持续交付是一个旅程,而不是一夜之间的产物,因为开发组需要做出技术、过程、文化、人员等方面的巨大改变以实现完整的管道——而且进行这些改变是需要时间的,其耗时常常多于一年。那么软件开发组织要从哪里入手呢?Dave 认为公司最初应当集中攻克的三个基本领域如下:

  • 需求管理:需求必须被分解为最小的交付单元;根据增量交付来制定和管理开发方案。
  • 测试 / 验证:QA(测试 / 验证)环节必须是基于经验的、结构化的、有组织的、自动化的。此外,良好、持续的集成是持续部署的先决条件。
  • 交付技术:首先是版本控制。再现性的软件构建是一种常见的方法,然而再现性的部署常常丢失。之后是自动化交付。持续此操作直到它成为一个一键无阻的过程。

很多软件开发公司在实现持续交付时都遇到了难以克服的障碍。Dave 认为,他们之所以会遇到这种障碍是因为他们现有的产品并没有遵循持续交付定律进行开发。好消息是,他们现在开始改变了。公司开始制定目标、宗旨,执行实践,这些将使他们获益——从在最初的一些小利益到最终的理想状态。

在需求管理方面,公司在定义易懂的、易管理的、可交付的小交付故事(story)时常常会遇到问题。Dave 提供的解决方案是设定目标,让每一个故事精简,然后集中精力在短的时间周期内不断改进故事的写作过程直到故事完成。在一组相关的故事完成前,可以通过使用功能切换进行故事隐藏或通过 A/B 测试判断一组故事的可用性。

在测试 / 验证方面,Dave 指出,在当今的软件开发测试中,大部分公司在 GUI 测试的投入巨大。这种做法其实并非最优。

公司应该把大部分测试集中在单元测试,因为单元测试的测试覆盖率是最大的。在单元测试中,重点应进一步放在集成测试。在集成测试中,开发者通过执行一系列小的集成测试以确保各组件可以共同工作。GUI 应当是投放精力最少的测试,因为 GUI 测试通常是脆弱、缓慢、不可靠、性价比最低的。这种测试策略将带来更小的循环周期,更高的质量,更低的测试成本。

另一个常见的问题是扩展持续集成。Dave 认为,随着开发的步步深入,开发者可能会遇到越来越多并发的变化,花在构建和测试上的时间会越来越长,这些都可能导致失败的构建。最糟糕的情况是在一个单一主线进行构建时,结果不是大部分工程工作而是大部分工程都失败。这种做法就不是持续交付。更糟糕的是,这种不稳定的主线会影响所有的开发者,并且将他们的成果大打折扣。

公司可以通过采用两项主要技术来实现大规模持续交付。每一项技术都被设计为“分而治之”的策略,这些策略允许开发者关注对持续交付有显著影响的特定区域:

组件或服务架构:公司可以选择将他们的软件变为组件或者服务框架。这些组件可以独立部署,独立生产,不受其它组件的影响。它们有清晰的接口,可以兼容多个版本的组件。通过这种结构,开发者可以运行相互独立、互不干扰的开发工作和交付管道。这种结构提供了工程的可扩展性。

多团队持续集成:在这种方法中,开发者通过采用多个团队小组进行开发的方式获得可扩展性。开发者在各组进行整合和测试步骤时进行工程整合,最终实现部署管道。多级持续集成的关键是将管道开发和集成测试分为几个阶段。开发组织可以依据团队分支、特征分支、构建(每天、每周等)和主线定义各阶段。通过在各阶段使用集成测试开发组织在一定程度上扩大了测试的覆盖范围,提高了测试的连续性。测试连续性允许代码在管道里流动,加快问题识别速度,让开发者更容易分析、解决问题,这些都降低了修正问题的成本。

2013-11-07 07:021837
用户头像

发布了 501 篇内容, 共 248.5 次阅读, 收获喜欢 57 次。

关注

评论

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

软件架构治理 之 如何识别和定位架构问题

码猿外

微服务 架构设计 软件架构治理

uni-app技术分享| 10分钟实现一个简易uniapp视频通话

anyRTC开发者

uni-app 音视频 WebRTC 实时通信 视频通话

手把手带你玩转LiteOS Ping组件

华为云开发者联盟

协议 LiteOS ping 组件 数据包

Scrum Master是什么?Scrum Master的职责是什么?和PM又有哪些区别?

PingCode

敏捷开发 PM Scrum Master

【高并发】通过ThreadPoolExecutor类的源码深度解析线程池执行任务的核心流程

冰河

Java 并发编程 多线程 高并发 异步编程

来看看深度学习如何在文娱行业“落地”

博文视点Broadview

三大重磅报告,莅临GOPS全球运维大会#324龙智展位即可获取!

龙智—DevSecOps解决方案

运维 gops

Android Activity Deeplink启动来源获取源码分析

vivo互联网技术

android 源码解析 Activity

如何在Java代码中使用SAP云平台CloudFoundry环境的环境变量

Jerry Wang

Java SAP CloudFoundry 11月日更

在 Spring Boot 中使用搜索引擎 Elasticsearch

码语者

Spring Boot Elastic Search

基于OneData的数据仓库方法论

大数据技术指南

11月日更

架构训练营模块七作业 - 设计消息队列存储消息数据的 MySQL 表

李焕之

软硬一体的算法实践,阿里云如何以算法实现场景 “再创新”?

阿里云视频云

阿里云 算法 视频超分 视频云 异构计算

令人不悦的–requests.exceptions.ProxyError

老表

Python Error 11月日更 ProxyError

9个问题,带你掌握流程控制语句中的java原理

华为云开发者联盟

Java 变量 finally 流程控制 语句

Windows漏洞:MS08-067远程代码执行漏洞复现及深度防御

华为云开发者联盟

windows 漏洞 Windows漏洞 MS08-067 远程代码

千万级学生管理系统的考试试卷存储方案

Steven

架构实战营

直播带货系统都有什么功能?如何搭建?

风行无疆

研究综述 | AI -自动化机器学习

索信达控股

机器学习 自动化机器学习 机器学习算法

一文详细分析公式树开源库

华为云开发者联盟

算法 数据 公式树 变异

Vue进阶(幺玖零):表单验证 trigger:‘blur‘ OR trigger:‘change‘ 区别

No Silver Bullet

Vue 表单校验 11月日更

云小课 | DSC之数据水印,防止数据被盗用

华为云开发者联盟

版权保护 华为云 数据安全中心 数据水印 追踪溯源

Apache APISIX 社区周报 | 2021 11.1-11.14

API7.ai 技术团队

云原生 API网关 社区周报 Apache APISIX

河南等保测评公司都有哪几家?都在哪里?

行云管家

网络安全 信息安全 数据安全 等级保护

往ABAP gateway system上和CloudFoundry 部署HTML5应用

Jerry Wang

log SAP CloudFoundry 11月日更

数据分片的原则和经验

编程宝库

系统架构 数据分片 编程宝库

Vue项目优化打包——前端加分项

CRMEB

dart系列之:dart类中的泛型

程序那些事

flutter dart 程序那些事 11月日更

springboot从数据库中获取application配置

小鲍侃java

11月日更

实战 | 超详细的Kafka集群操作

五分钟学大数据

11月日更

前端服务框架调研:Next.js、Nuxt.js、Nest.js、Fastify

智联大前端

node.js Vue 服务端 React

迈出持续交付的第一步_DevOps & 平台工程_崔康_InfoQ精选文章