InfoQ Geekathon 大模型技术应用创新大赛 了解详情
写点什么

从持续设计到持续交付:完善循环

  • 2013-07-10
  • 本文字数:3009 字

    阅读完需:约 10 分钟

通常情况下,软件交付中的创新和产品构思之间并不总会互相影响。尽管如此,随着对产品新功能的需求不断增多,及对应产品生命周期的缩短,甚至商业模型,也都使得将持续设计和持续交付置于同一循环以实现全面的交付成为必需。由于缺少好的名字,我们就暂就时叫本文为创新循环,循环的每一个阶段如下所示:

  1. 选择一个构思
  2. 将该构思提炼成一个可测的假设
  3. 选择完成该构思所需的功能
  4. 开发并测试这些功能
  5. 开发和测试那些衡量标准以证实该假设是否可行
  6. 将构思发布到生产环境
  7. 对该构思成功与否进行衡量
  8. 重复这一循环。

不出意料,支持该方式需要应用程序在以下方面进行创新:度量和分析,基础架构,测试,试验型设计,持续设计及支持持续交付的流程和工具。在本文中,我们将介绍维持该循环所要求的重要创新。以下涉及的每个话题都可独立成文或者涉猎更多,请将此调查问卷作为一个引子,激发大家去更多地了解这些话题。

度量和分析

度量是有风险的,它很容易产生反效果,激励坏行为。尽管如此,度量却是以上我们所描述循环的一个主要方面。软件系统中关于具体内容的构想的定义不仅在于软件具体行为,也在于如何知晓该构想的好坏。我们可以参考一个具体实例:市场部有人认为如果改变他们的网上购物流程,其网上营业额将会提升 20%。该例子的构想是改变流程,而可测性的假设就是用户使用新流程后,会有高于之前流程 20% 的人倾向购买。在这种情况下,其度量就很简单,我们需要去测量每个流程客户的购买结果。我们可以随机性地将用户分配到不同的流程,然后评定各流程是否达到它的目标。为了完成这个度量,我们要保证我们记录下每个流程用户的使用情况和销售结果。在测试的最后阶段,我们就会知道该营销想法好坏与否。

试验型设计

有时,什么是正确的度量或需要哪种类型的分析来评估一个构想的价值,并不显而易见。比如:试图提高生产力的构想,就可能很难去度量。提供给系统所有者对其构想成功与否的反馈,对新需求的优先级排定和引导系统改进起着至关重要的作用。

设计可测试性假设有效的方式是:设计一系列试验以验证新功能是否交付了预期结果。因此,我们从新功能的预期结果和其对系统行为带来的影响来决定。设计试验的关键是保证度量了新功能的真实影响。拿上述改变购买流程的例子来讲,度量和比较用户使用新旧流程比单方面查看历史数据提供了更有效的依据。

演变型基础架构

要使该循环有效执行下去,部分地要求快速调整系统以尝试新的想法。在理想世界里,我们能够预见所有对系统可能想要的修改。现实中,一切改变都是不可预测的。用户期望,商业环境,竞争对手情况,规章制度等都在一个组织管辖范畴之外。因此不论改变是否可预见,我们都需要能够适应。演变型基础架构和紧急设计是敏捷软件开发采取的方式,能让不可预计变化变得尽可能简单和安全。

支持演变型基础架构和紧急设计的测试将在下个章节涉及。通过认清由于系统新加功能所产生的重构机会,紧急设计关注于保持代码可维护性与干净整洁。与之相反,演变型基础架构关注于系统的构架因素,包括技术选择和不同架构元素间的接口设计。

在这种情况下,演变型架构的目标包含独立开发系统不同部分的能力,即使它们需要相互交互。我们通过对功能的合理封装,连同合同测试里记录的每个系统对其它系统行为的影响等途径来将其实现。为每个开发团队提供这样的测试能让他们从一开始就意识到随着系统的开发将不可避免地会遇到不兼容性问题。演变型架构的另外一个目的在于目标数据修改,信息修改,以及某个组件对其他组件实现的交换。

测试

在演变型架构章节,我们讲述了支持该变革循环重要的测试风格。尽管如此,很多其他测试方式对支持该循环也至关重要。彻底有效的单元测试对支持演变式设计是至关重要的,而且也为添加新功能而不影响当前功能带来了更多自信。同样,一个彻底的回归测试集也在不同粒度层提供了同样的保护。

一个完整的测试策略对于参与到该创新循环的系统,保证了在不影响旧功能的前提下新功能的正常使用。该测试应包含功能测试以外的技术型测试(压力,环境等)。同样重要的,测试这一功能对该构想的度量的支持也应该包含在测试策略里。为了确保该循环的进行,自动化测试至关重要。手动测试循环一般都很长,手动测试应该关注于核心领域,并更倾向于探索性。

持续设计

值得兴奋的是设计越来越关注于客户和用户体验。与软件开发其它方面一样,以用户为中心的设计也在学习如何更加以敏捷为导向。同架构和应用设计一样,对用户体验框架的设定,一些前期思考是必需的。尽管如此,需再次强调的是,不应集中太多精力在初始框架的确定上,应该同架构和设计一样,让设计随着用户需求及期望的变化而不断改变发展。

持续设计允许用户体验通过系统演变不断探索来获得启发。该方式也将我们的注意力集中在功能都将为用户系统交付了哪些价值。希望通过以用户为中心的方式来防止系统常见的功能臃肿现象。

持续交付

与本调研文章的其它话题一样,持续交付的复杂性和全面性能占据多个篇幅,而非几个段落。但是,持续交付背后的概念所提供的机制能使该创新循环执行下去。在这里,与持续交付原理最相关的是快速部署到生产环境,缩短了构想与其价值回馈的循环时间。

完成快速部署需要持续交付多种技术,包括架构自动化,构建自动化,部署和回滚自动化,数据集成自动化,当然还有之前提到的测试自动化。每个技术对支持以下步骤都是必需的:快速开发新功能,快速测试新系统,快速安全部署产品,快速安全回滚以防止系统没有如期工作或新功能被证实为坏主意。

演变循环

最后,上述创新循环的目的在于允许组织能快速测试构想。如果没有该循环,组织就需要在执行某个构想上花费很多资源,而这也意味着只有少数构想被尝试,因此,组织能成功实现的就仅限于某些特定的构想。通过减少费用、时间,和尝试新构想所带来的风险,该创新循环允许组织尝试更多,从而加大了找到更多构想潜在价值的可能性。

演变型架构和全面的测试,连同敏捷软件开发的其它实践,减少了执行某个构想的开发时间。持续设计致力于某一功能应如何与系统其他模块集成,并为如何度量某一想法成功与否提供了建议。试验型设计和合理的使用度量完成了所需的回馈循环以判定某想法的成功与否。持续交付所提供的机制允许将所有这些工作集成起来以完成该变革循环。

通过减少试验所带来的风险和费用,为组织持续地为其员工和客户提高他们的服务提供了基础。我们认为完成该变革循环能为组织提供了一个非常具有竞争力的优势。

关于作者

Dr.Rebecca Parsons 现为 ThoughtWorks 的首席技术官。她拥有长达 20 多年的软件应用开发经验,其从业领域涉及电信到新兴互联网服务。她在领导创建大型分布式对象应用,基于应用的服务以及集成各种不同系统方面拥有广泛的经验。目前她也是敏捷联盟董事会的主席。

加入 ThoughtWorks 之前,她是中弗罗里达大学计算机系的助理教授。她同时也是洛斯阿拉莫斯洛国家实验室并行与分布式计算,通用算法,生物计算以及非线性动态系统的博士后。她在 2010 年休假时曾在 UNICEF 位于乌干达坎帕拉的创新实验室工作过。

Rebecca 获得布拉德利大学的计算机科学以及经济学学士学位,莱斯大学的计算机硕士以及博士学位。

参考英文原文: Continuous Delivery with Continuous Design: Completing the Cycle


感谢陈菲对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。

活动推荐:

2023年9月3-5日,「QCon全球软件开发大会·北京站」 将在北京•富力万丽酒店举办。此次大会以「启航·AIGC软件工程变革」为主题,策划了大前端融合提效、大模型应用落地、面向 AI 的存储、AIGC 浪潮下的研发效能提升、LLMOps、异构算力、微服务架构治理、业务安全技术、构建未来软件的编程语言、FinOps 等近30个精彩专题。咨询购票可联系票务经理 18514549229(微信同手机号)。

2013-07-10 12:112584
用户头像

发布了 39 篇内容, 共 12.2 次阅读, 收获喜欢 2 次。

关注

评论

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

乌镇大会第七年,挥别错的才能和对的相逢

脑极体

从简历被拒,再到斩获阿里offer,这份PDF功不可没

Java 程序员 架构 编程语言

5分钟实现用docker搭建Redis集群模式和哨兵模式

Java redis 架构 分布式 后端

不愧是阿里Springboot项目笔记,在Github上已标星85.4K

Java 程序员 架构 后端 springboot

对象存储手把手教六 | CORS 入门讲解

QingStor分布式存储

如何用研发效能搞垮一个团队

CODING DevOps

团队协作 研发效能 CIF 峰会

音频和视频流最佳选择?SRT 协议解析及报文识别

声网

音视频 协议 流媒体开发

工信部:六大措施推动区块链技术广泛应用

CECBC

公司应该如何招人?

石云升

团队管理 管理 引航计划 内容合集 9月日更

中国已进入财富6.0时代!数字人民币大爆发

CECBC

Springboot学习路线汇总(升职加薪必备架构图)

Java spring 编程 架构 后端

太爽了!花了6个月18天,肝完阿里技术官的笔记,40*16K

Java 架构 面试 程序人生 编程语言

源码大咖炼成记:阿里淘系技术专家首推《源码探索笔记》实属精品

Java 架构 面试 程序人生 编程语言

GraphQL 快速入门【5】GraphQL 示例

码语者

Rest graphql

Alibaba深夜自爆“Java核心架构笔记”,太牛了

Java 编程 架构 程序人生 编程语言

【得物技术】深入理解synchronzied底层原理

得物技术

Java 原理 编译 synchronized 底层原理

六面天猫,已拿offer,我的面经复盘总结,大厂真的有那么难进吗?

Java spring 架构 java面试

2021最新版阿里巴巴内部百亿级高并发系统(全彩版小册开源)

Java 架构 面试 后端 高并发

后起之秀-network policy之eBPF实现

Lance

成本直降50% | 阿里云发布云原生网关,开启下一代网关新进程

阿里巴巴云原生

阿里云 云原生 网关 升级

干货满满!龙蜥社区Meetup走进龙芯圆满结束,5大技术分享精彩回顾

OpenAnolis小助手

Linux 开源社区 国产操作系统 国产芯片

架构实战营-模块四-千万级学生管理系统考试试卷存储方案

娜酱

#架构实战营

2022界计算机毕业设计选题

清风

计算机毕业设计 java毕设选题

C++后台开发—网络IO模型与Reactor模式

Linux服务器开发

reactor Linux服务器开发 C++后台开发 网络io IO模型

索信达:商业银行监管评级办法,新一代数据治理解决方案出炉

索信达控股

金融科技 数据治理 银行

阿里云容器服务全面升级为 ACK Anywhere,让云的边界拓展至企业需要的每个场景

阿里巴巴云原生

阿里云 容器 云原生 ACK Anywhere

12306抢票算法居然是redis实现的

redis 架构 面试 高并发 计算机

开源应用中心|五分钟教你搭建一个基于Laravel开发博客的应用

开源 开源社区 开源软件

使用Python实现视频Logo消除处理

老猿Python

音视频 Moviepy 引航计划 Python编程语言 视频剪辑处理

智能,服务,生态:华为调制的AIOps,味道有何不同?

脑极体

2022eact面试题附答案

buchila11

React

  • 扫码添加小助手
    领取最新资料包
从持续设计到持续交付:完善循环_文化 & 方法_Rebecca Parsons_InfoQ精选文章