为什么软件的本质是复杂的
正如Brooks所指出的:“软件的复杂性是一个基本特征,而不是偶然。这种固有的复杂性有四个原因:问题域的复杂性、管理开发过程的困难性、能实现的灵活性,以及刻画离散系统行为的问题。
1.我们在然健中视图解决的问题常常涉及不可避免的复杂性,在其中我们可以发现数不清的竞争性需求,甚至是相反的需求。请考虑一下一家多引擎飞机的电子系统和一个蜂窝式移动电话交换系统或一个自动化机器人的需求。这些系统的基本功能已经很难理解了,现在还要加上所有的(常常是隐含的)非功能需求,如可用性、性能、成本、健壮性和可靠性。这种无限制的外部复杂性是导致软件复杂性原因之一。
2.管理开发过程的困难性
3.软件中随处可能出现的灵活性
一家建造房屋的公司通常不会自己经营林场,砍伐树木已获取原木。但在软件中却经常发生,软件提供了非常大的灵活性,所以开发者几乎可能表达任何形式的抽象。但是这种灵活性变成了一种难以置信的、诱人的属性,因为它迫使开发者构造几乎所有的初级构建模块,高层的抽象将简历在这些初级构建模块之上。结果软件行业还是一种劳动密集型的产业。
4.描述离散系统行为的问题
复杂系统的5个属性
1.层次结构
复杂性常常以层次结构的行驶存在。复杂的系统由一些相关的子系统组成,这些子系统又有自己的子系统,如此下去,知道达到某种最低层次的基本组件。
2.相对本原
3.关注分离点
4.共同模式
5.稳定的中间形式