在回答这个问题之前,我们先了解下什么是软件架构设计。
就像软件工程那样,软件架构设计也是来自于建筑学。软件架构设计就是一种顶层设计,它综合考虑软件的各功能需求和非功能需求,设计出软件的层次结构,需要的一个或多个软件框架以及连接这些软件层次和软件框架之间的接口。
从软件架构设计的概念上可以看出,软件架构设计对于越复杂的软件系统,意义越大。如果软件功能简单、规模不大,没有架构设计也不会有太大影响。
下面还是以盖房子为例来说明下,对于一个复杂的系统,架构设计为什么很重要。
首先,我们假设客户所需要的只是一个小平房,如下图所示。
对于这样简单的需求,不会有谁会去找专业的设计师来进行专业的设计,通常只只要找一些有经验的工人,把需求和他说一下,就可以完成。
接下来客户提高了需求,他需要一幢如下图所示的高大、功能齐全的现代化别墅。这样的房子,除了考虑规划几个房间、房间的功能等这些基本居住要求之外,还得考虑许许多多其他非功能性的要求,如给排水系统、安保系统等,并且要使得所有这些功能性需求和非功能性需求合理又有效地结合在一起,这就需要进行架构设计了。
因为只有通过架构设计,我们才能保证别墅在建设过程中不会出现不断修修补补、拆东墙补西墙的情况,以至于最后弄出一个结构混乱的系统来。就像下图这样。虽然所有的功能需求都实现了,但是供水管道难看地被安在了屋外,楼梯居然安放在了窗户下,这种房子是客户无法接受的。
软件开发也是一样。如果没有顶层设计,统一合理地把软件的功能需求和非功能需求分配到软件部件当中,那么最后只能交给客户一个乱糟糟的软件。
这正是:
参考书目:大象:Thinking in UML(第二版),谭云杰,中国水利水电出版社
作者简介:王小双,长期从事GJB5000推广、实施、评价、改进的工作,创建《软件工程之思》微信公众号,一直在《软件工程之思》分享GJB5000、CMMI、软件工程的知识和感悟。现致力于GJB5000咨询以及软件过程改进、软件工程能力提升的研究工作。