4.2.1 软件建模的意义
毫无疑问,高质量是软件开发努力追求的一个重要目标。但是,软件质量受到诸多因素的混合影响,在软件工程过程中,我们面临着成本和工作量的压力,在软件产品方面,我们需要保证软件的功能、性能、有效性、容错能力、扩展性、可维护性、可移植性等等,尤其对大型复杂软件系统而言,费用超支、生产率低下和质量不高等问题常常会困绕着软件开发。然而,造成这些难以应对的问题的主要根源在于软件的复杂性,如图4.3从技术和管理两方面显示了软件的复杂性。可以这样说,未来20年我们面临的挑战不是成本、速度和性能,而将是复杂性的问题。
图4.3 软件复杂性
从管理角度来看,软件规模、客户要求和资金状况等对其产生直接的影响,显然,特定用户委托开发的大型软件项目的管理难度远远高于自主开发的小型软件产品。从技术角度来看,应用第四代语言(4GL)和组件技术开发软件,以及实现交互特性等的技术复杂度较低,但是,满足体系结构、系统定制、软件复用和高性能等要求却具有很高的技术复杂度。各种类型的软件系统分布在软件复杂度空间的不同部分,如防御武器系统和空中运输控制系统在技术和管理上均具有很高的复杂度,而小型的科学模拟系统和商业制表软件则相对简单得多。人们在处理现实问题的过程中,对复杂问题的理解能力是有限的,因此,需要采用科学的方法降解复杂度,从而保证正确地解决问题。
建模(Modeling)是一种处理上述复杂性的有效手段,它将难以处理的复杂问题划分成若干容易解决的小问题,解决了这些小问题也就解决了复杂的难题。建模的目的是将所要设计的结构和系统的行为融汇贯通,对系统的体系结构进行可视化和控制,化解复杂性的问题,有效地管理开发风险,从而开发出高品质的软件。
也许人们会产生这样的疑问:"软件已经是抽象的东西,为什么要进行软件建模?"我们不可否认下面的事实:
* 软件系统越来越大,如Windows NT5.0具有4千万行代码,任何个人都不可能单独管理这些代码;
* 没有参加开发的人员无法直接理解程序代码;
* 我们需要一种描述复杂系统的简单方法。
近年来,面向对象的建模方法逐渐流行起来,对象或类成为软件系统的主要构造块,人们在问题空间或解空间中识别各种对象,并对其进行抽象化描述,从不同的视角建立模型,形成系统的不同视图。这种方法适合于在各种问题域中建造各种规模和复杂程度的系统,为使用组件技术装配系统提供了良好的概念基础。
在我们的日常活动中,建模已经成为一项经过验证且被广为接受的工程技术。在建筑业,人们借助建筑模型获得对实际建筑物的印象,通过数学模型分析风力等对建筑物的影响;在制造业,人们将计算机模型和物理模型等应用于汽车和飞机的设计之中;在电影业,剧本也是一种建模的形式。
鉴于软件所具有的复杂性,以及人们对复杂问题理解的局限性,在软件开发过程中使用共同的建模语言进行软件建模成为必要,特别是对于大型复杂系统而言。建模可以更好地理解我们正在开发的系统,有助于根据实际需求对系统进行可视化,从而详细说明系统的结构和行为,为指导我们构造系统提供了一个模板,并对我们作出的决策进行文档化。
|