阿里云「飞天发布时刻」2024来啦!新产品、新特性、新能力、新方案,等你来探~ 了解详情
写点什么

敏捷和架构设计分道而行,又最终拥抱彼此成为朋友

  • 2016-10-12
  • 本文字数:2169 字

    阅读完需:约 7 分钟

《程序员必读之软件架构》一书的作者 Simon Brown 说:由于对敏捷宣言的误解,人们认为不再有必要定义软件架构或者做软件设计。很多软件开发者没有足够的工具箱,而且软件业界缺乏共同的软件架构词汇表。一个好的架构使得敏捷性成为可能,因为足够的预先设计,为设定未来的方向打下稳固的基础。

SwanseaCon 2016 的开幕演讲上,Brown 谈了敏捷和架构设计是如何分道而行,又是如何最终成为好朋友。SwanSeaCon 016 在南威尔士举行,是第二届敏捷开发和软件技艺会议,参与的人包括软件开发者、软件架构师、项目经理、分析师和咨询师。InfoQ 通过问 & 答、总结和文章的方式全程报道了该会议。

Brown 说,瀑布模型目标是优化那些你可以在早期获知的事情。开发前期花费的时间能够有效降低后期的开销。作为示例,他提到了结构化系统分析和设计方法 (SSADM),一个基于瀑布模型的软件开发方法。它采用系统管理的概念为软件设计提供端到端的生命周期管理。Brown 也提到了统一软件管理流程(RUP),一个增量迭代的框架。采用 RUP 时,应该根据实际项目做定制,但是没有人这么做,所以大家认为 RUP 流程太大了。

瀑布模型的主要问题是反馈周期太长。瀑布模型的结构化和严谨性有助于开发一个高质量的产品,但是如果没有及时的反馈,会带来开发错误产品的风险。
敏捷宣言声明了流程和工具重要,而个人和交互的价值更高。但是很多人错误地解读了敏捷宣言,认为不再需要流程。敏捷宣言也声明了“有效的软件产品比全面的文档重要”,这也使得人们认为没有必要做架构和软件设计。Brown 说,这导致了敏捷和架构设计的冲突。

第一个冲突是关于团队的结构,问题是我们是否需要一个专职的软件架构师,或者团队中的每一个人都是架构师?敏捷宣言第 11 条声明了“最好的架构、需求和设计源于自组织的团队”。Brown 说,好消息是声明里确实提到了架构和设计。他看到过成功地把架构师的角色延展开的团队,但是也看到了没有人负责架构和设计的团队,在这样的团队里,每个人都认为架构设计是别人的事情。

第二个冲突与流程有关。Brown 说,历史上,曾经出现过预先进行大量设计(BDUF)的趋势,人们尝试理解所有的事情,从而预先绘制一本蓝图。人们想知道敏捷是否允许进行一些预先设计。进化论设计方法尝试提供一套可以做一些预先设计的解决方案,但是当架构设计不正确的时候,软件修改变得很困难,重构的开销巨大。Brown 说,如果一开始就着手构建,核心功能模块更可能运行到最好的状态。

Brown 不赞同测试驱动开发(TDD)不需要架构的观点。他建议预先确定架构,这样 TDD 可以在设定的界限内工作。同时,Brown 强烈反对在“最后负责任时刻”才确定架构,因为这很可能被解读为“任何时候都不要做决定”。

Brown 说,为了解决架构方面的问题,我们需要理解敏捷的真正意义。他提出的核心定义是:

快速行动,拥抱变化,经常发布软件,获取反馈。

敏捷是一种轻量级的软件交付方法,它基于持续提高的想法和文化。Brown 说,真正地做敏捷,而不是形式上敏捷,这很重要。但是敏捷宣言的措辞容易让人误解,“x 胜于 y”的表述常常被错误地解读为 y 不重要。

宣言第九条声明“持续关注技术上的卓越和优秀的设计增强了敏捷性”。Brown 说,一个好的架构使得敏捷成为可能。按照他的说法,敏捷性是一个“非功能的”,或者说是“质量”的需求。采用敏捷,你需要平衡多快地行动,以及多高的软件质量。

Brown 质疑是否有软件设计复兴,因为纪律化的敏捷交付(DSDM)和大规模敏捷框架(SAF)等方法都有软件设计的元素在里面。他说:

这不是说要创造一个完美的最终状态、框架、或者一个完备的架构。你需要为团队以及你所构建的东西设定一个起点,使得你们可以在正确的方向上,作为一个团队合力前进。

精益和敏捷都以增值和移除浪费为目标。定义一个起点是很价值的,你需要适当的预先设计打造坚固的基础,设定正确的方向。

Brown 说维基百科中定义的软件技艺太专注于代码。很多软件开发者没有足够的工具箱。有许多书写软件文档的方法,但是人们常常不知道它们。如果你问他们是如何进行软件设计的,他们说一些诸如“我们使用白板”,以及“我们画一个方框代表组件”。他所经历的是很多人不知道怎么组件化,用什么标准分解组件,例如有的人没有听说过类- 责任- 协作(CRC)。

Brown 说:“在同一方向上快速行动,需要良好的沟通和交流”。软件业界缺乏软件架构方面的共同的词汇表。软件开发应该被看成是一种工程学规范。他提到了 Mary Shaw 的关于通向软件工程学规范的进程的演讲 (包括在 InfoQ 的评论文章软件 - 有否成为一门“工程学”中)。Shaw 总结了软件开发成为工程学所需要做的事情:

某种意义上说,我们是一种工程学规范,但是我们的实践还不能持续地达到一定的水准,以确保计算系统的质量能够满足工程学相关的社会契约。我们需要继续把科学的、已经被纂写好的知识引进到软件设计和分析领域中。

Brown 说,尽管敏捷和架构设计在过去的一段时间里曾经分道而行,但是在 15 年之后,他们终于又成为了朋友。他说:“让我们不要忽略过去的经验,而是从中学习”。

查看英文原文: How Agile and Architecture Parted and Finally Became Friends


感谢夏雪对本文的审校。

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

2016-10-12 19:002121

评论

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

备受关注的Bit.Store,最新动态一览

西柚子

Hadoop Echarts

Emperor_LawD

hadoop 5月月更

关于数据一致性的理论

穿过生命散发芬芳

数据一致性 5月月更

linux之iftop命令

入门小站

Linux

备受关注的Bit.Store,最新动态一览

小哈区块

玩了一场剧本杀,同车队友“不是人”

脑极体

【刷题第五天】1. 两数之和

白日梦

5月月更

百万用户规模电商秒杀系统架构设计

「架构实战营」

Web3.0时代将重新审视品牌增长因素:文化、背景和商业

devpoint

NFT 元宇宙 Web3.0 品牌重塑

维护版式文档技术生态 国际PDF协会向福昕软件发来感谢信

联营汇聚

Iframe的好处和坏处

恒山其若陋兮

5月月更

知名金融数字化服务提供商南天信息加入龙蜥社区

OpenAnolis小助手

开源 金融数字化 龙蜥社区 CLA 南天信息

MySQL入门:Case 语句很好用

宇宙之一粟

MySQL CASE表达式 5月月更

druid 源码阅读(二)初始化连接池(1)

爱晒太阳的大白

5月月更

深入剖析 split locks,i++ 可能导致的灾难

火山引擎开发者社区

大数据的特点

奔向架构师

大数据 数据仓库 5月月更

“软件定义汽车”的数字化之变,华为云低代码平台带来了什么?

脑极体

时序数据库在监控运维平台中的应用

CnosDB

IoT 时序数据库 开源社区 CnosDB infra

在线TSV转纯文本工具

入门小站

工具

在线HTTP请求头响应头转JSON工具

入门小站

工具

druid 源码阅读 2——minEvictableIdleTimeMillis参数的实现逻辑

张大彪

备受关注的Bit.Store,最新动态一览

BlockChain先知

快速上手 Pythond 采集器的最佳实践

观测云

运维 可观测性 可观测

数据产品经理的价值管理

第519区

团队管理 项目管理 产品经理 数据产品经理 项目经理

论现象背后的驱动结构

凌晞

架构 结构化思维

Cilium 多集群 ClusterMesh 介绍

Se7en

架起医院就诊“快车道”,YRCloudFile 打造智慧 PACS 存储系统

焱融科技

云计算 分布式 高性能 文件存储 智慧医疗

2021年国内促进软件产业发展十大事件出炉,HarmonyOS 2入选

科技汇

单源最短路问题

工程师日月

算法 5月月更

设计微博系统中“微博评论”的高性能高可用计算架构

高山觅流水

「架构实战营」

【愚公系列】2022年05月 二十三种设计模式(十一)-享元模式(Flyweight Pattern)

愚公搬代码

5月月更

敏捷和架构设计分道而行,又最终拥抱彼此成为朋友_研发效能_Ben Linders_InfoQ精选文章