
1.3 软件过程模型
软件过程模型也称为软件生存期模型或软件开发模型,是描述软件过程中各种活动如何执行的模型。它确立了软件开发和演绎各阶段的次序限制以及各阶段活动的准则,确立了开发过程所遵守的规定和限制,便于各种活动的协调以及各种人员的有效通信,有利于活动重用和活动管理。
目前常见的软件过程模型有瀑布模型、增量模型、螺旋模型、喷泉模型、变换模型和基于知识的模型等。
1.3.1 瀑布模型
瀑布模型是经典的软件开发模型,是1970年由W.Royce提出的最早的软件开发模型。如图1-4所示,瀑布模型将软件开发活动中的各项活动规定为依线性顺序连接的若干个阶段的工作,形如瀑布流水,最终得到软件系统或软件产品。换句话说,它将软件开发过程划分成若干个互相区别而又彼此联系的阶段,每个阶段中的工作都以上一个阶段工作的结果为依据,同时作为下一个阶段的工作基础。

图1-4 瀑布模型
每个阶段的任务完成之后,产生相应的文档。它是以文档作为驱动的,该模型适合于需求很明确的软件项目开发。
在软件工程的第一阶段,瀑布模型得到了广泛的应用。它简单、易用,在消除非结构化软件、降低软件的复杂性、促进软件开发工程化方面起了很大的作用。但在软件开发实践中也逐渐暴露出它的缺点。由于瀑布模型是一种理想的线性开发模式,它将一个充满回溯的软件开发过程硬性分割为几个阶段,无法解决软件需求不明确或者变动的问题。这些缺点对软件开发带来了严重影响,由于需求不明确,会导致开发的软件不符合用户的需求而夭折。
1.3.2 增量模型
增量模型是一种非整体开发的模型。根据增量的方式和形式的不同,分为基于瀑布模型的渐增模型和基于原型的快速原型模型。图1-5描述的是一般的增量模型。

图1-5 一般增量模型
该模型具有较大的灵活性,适合于软件需求不明确、设计方案有一定风险的软件项目。
增量模型和瀑布模型之间的本质区别是:瀑布模型属于整体开发模型,它规定在开始下一个阶段的工作之前,必须完成前一阶段的所有细节。而增量模型属于非整体开发模型,它推迟某些阶段或所有阶段中的细节,从而较早地产生工作软件。
1.3.3 螺旋模型
对于大型软件,只开发一个原型往往达不到要求。螺旋模型将瀑布模型和增量模型结合起来,并加入了风险分析。它是由TRW公司的B.Boehm于1988年提出的。该模型将开发划分为制定计划、风险分析、实施工程和客户评估4类活动。如图1-6所示,沿着螺旋线每转一圈,表示开发出一个更完善的新的软件版本。如果开发风险过大,开发机构和客户无法接受,则项目有可能就此终止。在多数情况下,会沿着螺旋线继续下去,自内向外逐步延伸,最终得到满意的软件产品。

图1-6 螺旋模型
螺旋模型将开发过程分为几个螺旋周期,每个螺旋周期可分为4个工作步骤:
① 制定计划:确定目标、方案和限制条件。
② 风险分析:评估方案、识别风险和消除风险。
③ 实施工程:开发验证下一级产品。
④ 客户评估:计划下一周期工作。
1.3.4 喷泉模型
喷泉模型是由B.H.Sollers和J.M.Edwards于1990年提出的一种新的开发模型,主要用于采用面向对象技术的软件开发项目。它克服了瀑布模型不支持软件重用和多项开发活动集成的局限性。喷泉模型使开发过程具有迭代性和无间隙性。软件的某个部分常常被重复使用多次,相关对象在每次迭代中随之加入渐进的软件成分,即迭代性;而分析和设计活动等各项活动之间没有明显的边界,即无间隙性。
喷泉模型是以面向对象的软件开发方法为基础,以用户需求作为喷泉模型的源泉。如图1-7所示,喷泉模型有如下特点。

图1-7 喷泉模型
① 喷泉模型规定软件开发过程有4个阶段,即分析、系统设计、软件设计和实现。
② 喷泉模型的各阶段相互重叠,它反映了软件过程并行性的特点。
③ 喷泉模型以分析为基础,资源消耗呈塔形,在分析阶段消耗的资源最多。
④ 喷泉模型反映了软件过程迭代性的自然特性,从高层返回低层无资源消耗。
⑤ 喷泉模型强调增量开发,它依据“分析一点,设计一点”的原则,并不要求一个阶段的彻底完成,整个过程是一个迭代的逐步提炼的过程。
⑥ 喷泉模型是对象驱动的过程,对象是所有活动作用的实体,也是项目管理的基本内容。
⑦ 喷泉模型在实现时,由于活动不同,可分为系统实现和对象实现,这既反映了全系统的开发过程,也反映了对象的开发和重用过程。
1.3.5 智能模型
智能模型也称为基于知识的软件开发模型,是知识工程与软件工程在开发模型上结合的产物,是以瀑布模型与专家系统的综合应用为基础建立的模型。该模型通过应用系统的知识和规则帮助设计者认识一个特定的软件的需求和设计,这些专家系统已成为开发过程的伙伴,并指导开发过程。
从图1-8中可以清楚地看到,智能模型与其他模型不同,它的维护并不在程序一级上进行,这样大大地降低了问题的复杂性。

图1-8 智能模型
智能模型的主要优点有:
① 通过领域的专家系统,可使需求说明更加完整、准确和无二义性;
② 通过软件工程的专家系统,提供一个设计库支持,在开发过程中成为设计者的助手;
③ 通过软件工程知识和特定应用领域的知识及规则的应用来提供开发的帮助。
但是,要建立适合于软件设计的专家系统,或建立一个既适合软件工程又适合应用领域的知识库都是非常困难的。目前,在软件开发中正应用AI技术,在CASE工具系统中使用专家系统,例如,使用专家系统来实现测试自动化,AI技术在软件开发阶段取得了局部进展。