1.5 软件复杂度的分类

软件复杂度的分类如图1-4所示。

图1-4 软件复杂度的分类

最上层是问题域本身的复杂度,也称为业务复杂度,该复杂度和软件系统本身无关,在没有软件的时候就已经存在了,代表业务本身。

第二层是解决方案的复杂度,指业务问题映射到软件领域之后的解决方案,描述软件系统处理业务领域问题的具体方法,领域驱动设计(Domain-Driven Design,DDD)就工作在这一层。

第三层是软件的复杂度,分为本质复杂度和随机复杂度。

本质复杂度是软件必须拥有的,继承自问题域本身的复杂度,除非缩小问题域的范围,否则无法消除本质复杂度,本质复杂度是系统复杂度的下限。

随机复杂度是软件可以拥有也可以没有的属性,由解决方案的实现过程附加产生,主要表现为短视效应、认知负荷和协同成本,是我们需要尽力规避的部分,也是需要关注的重点。