软件开发模型是从软件项目需求定义直至软件经使用后废弃为止,跨越整个生存周期的系统开发、运作和维护所实施的全部过程、活动和任务的结构框架。
常用的模型主要有瀑布模型、原型模型、螺旋模型和喷泉模型。
瀑布模型(图 2-1)适用于软件项目初期对软件问题的模糊认识,需要经过需求分析,才能使软件问题逐步清晰,而获得对软件规格的明确定义,由此使软件项目由定义期过渡到开发期,并经过软件开发而最终得到需要实现的软件产品这个最底层结果。瀑布模型各阶段分明,它们自上而下,相互衔接。瀑布模型中的阶段只能逐级到达,不能跨越。每个阶段都有明确的任务,都需要产生出确定的成果。
图 2-1 瀑布模型
快速原型方法是原型模型在软件分析、设计阶段的应用,用来解决用户对软件系统在需求上的模糊认识,或用来试探某种设计是否能够获得预期结果。主要适合需求不是很清楚、需求不断增加的开发模型。
原型模型按需求可以分为增量型模型和渐进性模型。增量模型适用于对于需求不能很快全部明确的系统,软件开发项目难于做到一次开发成功,可使用此模型。首先按瀑布模型的方法进行第一次开发工作,通过实验找出需求中的欠缺和不足之处,明确那些未知的软件需求,再迭代进行增加部分的需求分析和开发。对有些系统这种反复可能要进行几次,但尽可能不要超过两次,否则难以控制软件的结构规模、开发质量和进度。
渐进模型主要是针对部分需求尽管明确但一时难以准确进行定义的系统设计,如用户的操作界面等。使用此模型时,可以先做初步的需求分析,之后立即进行设计和编码,随后与系统进行第一次集成(不做或少做测试)。根据集成后反映的问题,进一步做更全面的需求分析、设计、编码、测试和集成。
螺旋模型是一种引入了风险分析与规避机制的过程模型,是瀑布模型、快速原型方法和风险分析方法的有机结合。
螺旋模型基本方法是,在各个阶段创建原型进行项目试验,以降低各个阶段可能遇到的项目风险。例如,为了降低用户对软件界面不满意的风险,可以在需求分析阶段建立“界面原型”;为了降低软件不能按设计要求实现的风险,可以在设计阶段针对所采用的技术建立“仿真试探原型”。
图 2-2 是螺旋模型的工作流程图。它用螺旋线表示软件项目的进行情况,其中,螺旋线中的每个回路表示软件过程的一个阶段。因此,最里面的回路与项目可行性有关,接下来的一个回路与软件需求定义有关,而再下一个回路则与软件系统设计有关,以此类推。
图 2-2 螺旋模型
螺旋线中的每个回路都被分成四个部分:
(1)目标设置:确定项目的阶段性目标,分析项目风险。
(2)风险评估:对风险进行详细的评估分析,并确定适当的风险规避措施。
(3)开发软件:根据对风险的认识,决定采用合适的软件开发模型,实施软件开发。
(4)制定计划:对项目进行阶段评审,制定项目下一个阶段的工作计划。
对软件项目进行风险分析也是需要费用的,假如项目风险分析费用过高,甚至超过项目开发费用,显然这就不合算了。实际上,只有较大型的项目才有较高的风险,才有进行各个阶段详细风险分析的必要。因此,螺旋模型主要应用于大型软件项目之中。
喷泉模型对软件复用和生存周期中多项开发活动的集成提供了支持,主要支持面向对象的开发方法。“喷泉”一词本身体现了迭代和无间隙特性。系统某个部分常常重复工作多次,相关功能在每次迭代中随之加入演进的系统。所谓无间隙是指在开发活动,即分析、设计和编码之间不存在明显的边界,如图 2-3 所示。
图 2-3 喷泉模型