0

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

 2 years ago
source link: https://www.bobjiang.com/post/blog/architecture_in_agile/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

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

Bob Jiang
2015-05-30

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

架构设计的根源

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

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

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

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

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

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

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

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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK