敏捷软件开发中的架构设计

Page content

前言:本文主要从软件开发的架构设计根源、以及敏捷软件开发中如何做架构设计两个方面来进行阐述。

架构设计的根源

架构一词来源于建筑业,指的是“一个结构内的元素及元素间关系的一种主观映射的产物”。而软件开发是一个新兴产业,在高速发展的同时也在学习借鉴其他行业经验。架构就是软件开发学习建筑业的产物。这个学习(或参考、或借鉴)是完全错误的,软件开发和盖楼是完全不同的两件事情。软件开发是脑力工作(知识工作),是一件复杂的事情。而盖楼是体力工作,是一件繁杂的事情。如果说要和建筑业进行学习借鉴的话,软件开发的过程和设计建筑蓝图(blueprint)是具有相似之处的。因此为了更好的响应变化,软件开发不适合采用整体预先的架构设计。

软件开发是一个持续学习、不断反馈的过程。

软件开发的目的是为了产生可工作的软件,是为了解决一些人的问题。而这些问题是来自一个人的头脑中,如果想要知道一个人是怎么想的,就必须要持续沟通(学习),不断地和这个人进行反馈。这才是软件开发的本质。

敏捷软件开发中的架构设计

与软件社区的某些讨论相比,敏捷开发并非要求像船货崇拜那样热衷于Scrum或其他过程和方法学。敏捷的本质是响应变化、持续学习和不断反馈。敏捷表现为软件及其开发过程的可持续和高质量。敏捷原则中写道“坚持不懈地追求技术卓越和良好设计,敏捷能力由此增强”,这为架构指明了敏捷开发中扮演的角色——无需大量预先设计。

架构只是一种知识的表达方式。软件开发作为一项知识性工作,需要学习技术、学习客户需求,学习和提出产品需求的人交流,学习从设计实践中选取最佳方案,学习合作等等。总而言之,知识源自学习,学习需要时间,而时间正是过程的组成元素。

因此在软件开发的一开始,我们对知识(或需求)了解的最少,这个时候如果进行全面完整的架构设计,往往是基于大量的假设和猜想,做出的种种重大决策也是不明智不理智的,是百害而无一利的。在软件开发结束的时候,信息是最丰富的,我们了解的知识也是最全面的,但此时做决策已然晚了。所以架构设计也是一个基于经验的活动,在持续学习和不断反馈的过程中,不断地检视和调整。

最后,送给痴迷于全面整体的架构设计朋友们一句话:“软件开发的目的是尽早频繁地交付客户价值。”