软件系统的本质是复杂的,开发团队的任务就是制造出简单的假象。
软件的复杂性是其根本特征,原因在于:
问题域的复杂性:软件系统一般都是处理逻辑或业务规则比较复杂的问题。
管理开发过程的困难性:不存在标准的流程,且现有的各种流程都只适合特定的团队、项目或者产品。
软件实现的灵活性:软件的实现是没有标准的,即便存在一些所谓的原则(如面向对象设计原则),这些原则也可以在进度或特定限制下妥协。
描述离散系统行为的问题:离散系统永远都只能是对连续过程的抽样和模拟,这就使得系统一直是从一个状态变到另一个状态,而这些状态又容易受到外部的干扰。
复杂系统的5个属性
层次结构:复杂系统的架构是它所有的组件以及这些组件之间的层次结构的函数。
相对本原:基础组件的选择或者说抽象取决于系统的观察者。
分离关注:注意组件内部作用与组件间作用的差异,以此来分离系统。
共同模式:复杂系统具有共同的模式,因此组件的复用成为可能。
稳定的中间形式:复杂系统是由简单系统演变而来的。
复杂系统的这些属性为开发者去开发软件系统提供了一些指导准则与探索方向。