《程序员必读之软件架构》一书的作者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年之后,他们终于又成为了朋友。他说:“让我们不要忽略过去的经验,而是从中学习”。

-END-

欢迎关注“互联网架构师”,我们分享最有价值的互联网技术干货文章,助力您成为有思想的全栈架构师,我们只聊互联网、只聊架构,不聊其他!打造最有价值的架构师圈子和社区。

本公众号覆盖中国主要首席架构师、高级架构师、CTO、技术总监、技术负责人等人 群。分享最有价值的架构思想和内容。打造中国互联网圈最有价值的架构师圈子。

  • 长按下方的二维码可以快速关注我们

  • 如想加群讨论学习,请点击右下角的“加群学习”菜单入群

为了解决架构的问题,我们需要先理解敏捷的真谛相关推荐

  1. MVC架构中的Repository模式 个人理解

    关于MVC架构中的Repository模式 个人理解:Repository是一个独立的层,介于领域层与数据映射层(数据访问层)之间.它的存在让领域层感觉不到数据访问层的存在,它提供一个类似集合的接口提 ...

  2. 浅谈架构、操作系统、芯片的理解

    浅谈架构.操作系统.芯片的理解 序言 架构篇 操作系统篇 芯片篇 序言 从事物联网行业,总是会有一些概念上的疑惑,对此网上查阅了资料,结合自己理解,做了一些汇总,方便自己以后查阅. 架构篇 我们接触架 ...

  3. MVC架构和SSM框架的个人理解

    MVC架构和SSM框架的个人理解 前言 一.原生JavaWeb对应MVC架构 二.SSM框架对应MVC架构 第一块内容(MyBatis): 第二块内容(Spring): 第三块内容(SpringMVC ...

  4. 如何解决架构与业务发展冲突?讯飞输入法Android架构演进

    内容来源:2017 年 12 月 3 日,科大讯飞应用研发经理程坤在"IAS2017互联网架构峰会"进行<讯飞输入法Android架构演进与实践>演讲分享.IT 大咖说 ...

  5. 架构设计中服务层的简单理解

    在ddd设计中我们经常会提到服务层,服务层是什么?职责是什么?有什么好处?. 先看简单的层次图(注:这里并没有考虑其他多余的领域逻辑数据层存储,或者UOW这些细节) 我的理解是服务层是处于我的应用程序 ...

  6. 大数据架构师之路 | 概念术语理解

    架构师,不明觉厉,也是我的追求目标,因此搜集了很多大数据架构相关的知识,理解并整理出来,一起学习. 知识拓展 大数据人工智能行业技术人员必备技能 hive入门 | 数据类型.数据存储.数据结构详解+S ...

  7. 业务架构20多年,技术人员理解了吗?

    目录 Zachman 模型 TOGAF FEA 和 DODAF 为何沉闷至今? 模型与业务模型 建模原则与模型思维的应用 业务架构这个词大家时常听到,但是能解释得清楚的却不多,撩撩度娘,你就会发现,不 ...

  8. 中台之上(十):业务架构设计“笨重”,它能跟敏捷沾边吗?

    传说中和现实中的双模开发 \n "天下武功唯快不破".电影<功夫>中火云邪神这句台词可谓深得互联网时代竞争的要旨,也不乏业内人士常常感叹,一个产品的成功可能只是领先对手 ...

  9. AIGC席卷智慧办公,金山办公如何架构文档智能识别与理解的通用引擎?

    如今,智慧办公是企业办公领域数字化转型的题中之义.作为国内最早开发的软件办公系统之一,金山办公如何应用深度学习实现复杂场景文档图像识别和技术理解?本文将从复杂场景文档的识别与转化.非文本元素检测与文字 ...

  10. 项目架构相关知识的个人简单理解(水平有限,勿喷)

    (一)传统架构 一台Web应用服务器Tomcat并发量为400,如果当并发量为40000时,理论上需要100台: 同一个工程部署到多台服务器上就会存在两个问题: 问题1: 在Tomcat集群中节点数量 ...

最新文章

  1. linux下jboss的安装配置
  2. Jquery获取选中行的某个数据
  3. F-子序列(组合数,打表,扩展欧拉,容斥)
  4. 程序闪退怎么运行_苹果应用程序崩溃闪退怎么办?如何解决苹果设备的软故障?...
  5. 前轮转向最大角度设计原来_五桥转向故障
  6. matlab如何泰勒公式用求近似值_Matlab 数值计算泰勒公式
  7. 求解会议安排问题(回溯,C++)
  8. 查看服务器上Docker镜像 latest具体版本
  9. GTK GDK 事件 信号
  10. 电池续航时间增10倍
  11. navicat连接pgsql报错:authentication method 10 not supported
  12. FTP错误详解及解决方案
  13. 计算机软件专业可以考哪些证书
  14. python socket 编程之三:长连接、短连接以及心跳(转药师Aric的文章)...
  15. 安装office时提示:安装程序包的语言不受系统支持
  16. SOA,SOAP,RPC,以及 RPC协议与 REST 协议之间的关系(搜狗)
  17. 打印设置自定义表尾_打印excel工作表时,如何把表头和表尾一起打印到每一页上?-excle怎样设置表尾打印...
  18. R时间序列模型之贝叶斯预测
  19. SolidWorks工程图修改标注尺寸字体和字号的方法
  20. EXCEL 二级连动下拉菜单

热门文章

  1. 实施ERP系统的一般方法和步骤
  2. PHP中的unset的使用问题
  3. 原来蒋先生才是中国互联网启蒙第一人!
  4. Acrobat Pro DC 教程,如何将演示文稿转换为 PDF 文件?
  5. Sketch中文版教程,已加星标的更新如何使用?什么是Sketch星标功能?
  6. iZotope RX 9 for Mac(数字音频修复工具)
  7. 如何在恢复模式下重新启动Mac?
  8. 磁盘工具无法修复磁盘怎么办
  9. mac快速电脑锁屏/睡眠方法
  10. Tipard Mac Video Converter Ultimate如何在Mac上转换DVD 视频?