成功的软件组织应该总是能够交付满足其用户需要的软件。如果一个软件组织能够及时并可预测地开发出这样的软件,并能够有效地利用人力和物力资源,那么这个软件组织就是可持续发展的。
在上段话里有一个重要的含义:一个开发队伍的主要产品不应该是一堆漂亮的文档、世界级的会议、伟大的口号或者几行获得普利策奖金的源代码,而应该是满足不断发展的用户及其业务需要的优秀软件。其他的一切事物都是次要的。
建模是开发优秀软件的所有活动中的核心部分,其目的是为了把想要得到的系统结构和行为沟通起来,为了对系统的体系结构进行可视化和控制,为了更好地理解正在构造的系统,并经常揭示简化和复用的机会,同时也是为了管理风险。
通过建模,要达到4个目的:
- 模型有助于按照实际情况或按照所需要的样式对系统进行可视化。
- 模型能够规约系统的结构或行为。
- 模型给出了指导构造系统的模板。
- 模型对做出的决策进行文档化。
建模并不只是针对大的系统。甚至像狗窝那样的软件也能从一些建模中获益。然而,可以明确地讲,系统越大、越复杂,建模的重要性就越大,一个很简单的原因是:
因为不能完整地理解一个复杂的系统,所以要对它建模。
人对复杂问题的理解能力是有限的。通过建模,缩小所研究问题的范围,一次只着重研究它的一个方面,这就是Edsger Dijkstra几年前讲的”分而治之“的基本方法,即把一个困难问题划分成一系列能够解决的小问题;解决了这些问题也就解决了这个难题。此外,通过建模可以增强人的智力。一个适当选择的模型可以使建模人员在较高的抽象层次上工作。
第一,选择要创建什么模型,对如何动手解决问题和如何形成解决方案有着意义深远的影响。
换句话说,就是要好好地选择模型。正确的模型将清楚地表明最棘手的开发问题,提供不能轻易地从别处获得的洞察力;错误的模型将使人误入歧途,把精力花在不相关的问题上。
第二个,可以在不同的精度级别上表示每一种模型。
如果正在建造一座大厦,有时需要从宏观上让投资者看到大厦的样子,感觉到大厦的总体效果。而有时又需要认真考虑细节问题,例如,对复杂棘手的管道的铺设,或对少见的结构件的安装等。
第三个,最好的模型是与现实相联系的。
如果建筑的物理模型不能以与真实的建筑相同的方式做出反应,则它的价值是很有限的;飞机的数学模型,如果只是假定了理想条件和完美制造,则可能掩盖真实飞机的一些潜在的、致命的现实特征。最好是有能够清晰地联系实际的模型,而当联系很薄弱时能够精确地知道这些模型怎样与现实脱节。所有的模型都对现实进行了简化;但有一点要记住,关键是简化不要掩盖掉任何重要的细节。
第四个,单个模型或视图是不充分的。对每个重要的系统最好用一小组几乎独立的模型从多个视角去逼近。
如果正在建造一所建筑物,会发现没有任何一套单项设计图能够描述该建筑的所有细节。至少需要楼层平面图、立面图、电气设计图、采暖设计图和管道设计图。并且,在任何种类的模型中都需要从多视角来把握系统的范围(例如不同楼层的蓝图)。