上QQ阅读APP看书,第一时间看更新
1.1 软件复杂度剖析
任何软件系统的发展都遵循从简单到复杂、从集中到分散的过程。在系统诞生的初期,我们习惯于构建单一、内聚和全功能式的系统,因为这样的系统完全可以满足当前业务的需求。当业务发展到一定阶段,集中化系统开始表现出诸多弊端,功能拆分与服务化思想和实践被引入。而当系统继续演进,团队规模随之增大,由于分工模糊和业务复杂度不断上升,系统架构逐渐被腐化,直到系统不能承受任何改变,进入需要重新拆分的阶段。推倒重来意味着重复从简单到复杂、从集中到分散的整个过程,如图1-1所示。
图1-1 系统架构的轮回
系统架构的轮回给人们的启示就是将所有东西放在一起不是一个好的选择,软件系统的关注点应该清晰划分,并能通过功能拆分降低系统复杂性。因此,在本质上,架构的演进过程就是一个解决系统复杂度问题的过程。那么,软件复杂度具体指的是什么呢?我们又应该如何对复杂度本身进行剖析呢?图1-2给出了问题的答案。
图1-2 软件复杂度的3个维度
在图1-2中,我们可以看到软件复杂度的形成涉及3个维度——规模、结构和变化。本节将详细介绍图1-2中的3个复杂度维度。同时,我们也需要认识到,软件复杂度体现的是一种客观规律,因为任何一个软件系统都会受到这3个维度的影响,开发人员无法完全避免,但引入一定的设计思想和方法可以降低软件复杂度。在本节中,我们将展开介绍软件复杂度的应对策略。