软件开发模型
建模是软件工程最常用的一种技术。所谓软件开发模型,就是为整个软件建立模型。模型是为了理解事物而对事物做出的一种抽象
1.瀑布模型(生存周期模型/线性顺序模型):
特点:
①阶段的顺序性和依赖性
一个阶段的完成才能开始下一个阶段
前一阶段的输出文档是后一阶段的输入文档
②推迟实现的观点
瀑布模型在编码前是分析阶段和设计阶段,是考虑目标系统的逻辑模型并不涉及软件的物理实现。把逻辑设计和物理设计区分开也是按照瀑布模型开发软件的重要指导思想。
③质量保证的观点
每个阶段必须交付出合格的文档
对文档进行审核
优点:
对于软件工程实践经验少的软件开发人员,接到软件开发任务以后,总想尽早开始编写代码,急于求成,但是实践证明,对于中、大规模的软件项目来说,往往是编码工作开始得越早,最终完成的时间越长。
缺点:
①大大增加开发前期的工作量去对项目做出准确的需求分析
②它是一种理想的线性开发模型,缺乏灵活性,特别是无法解决软件需求不明确或不准确的问题
2.快速原型模型
原型是指模拟某种产品的原始模型,在其他产业中经常使用。软件开发中的原型是软件的一个早期可运行的版本,它反映了最终系统的重要特性
优缺点:
①优点:克服瀑布模型的缺点,减少由于软件需求不明确带来的开发风险。
②缺点: 所选用的开发技术和工具不一定符合主流的发展;快速建立起来的系统结构加上连续的修改可能会导致产品质量低下。
原型类型:
探索型原型:目的是要型清用户的需求,确定所期望的特性,并探索各种方案的可行性。它主要针对开发目标模糊,用户与开发都对项目都缺乏经验的情况,通过对原型的开发来明确用户的需求。
实验型原型:主要用于设计阶段,考核;实现方案是否合适,能否实陋。
演化型原型:主要用于及早向用户提交一个原型系统,该原型系统或者包含系统的框架,或者包含系统的主要功能,在得到用户的认可后,将原型系统不断扩充演变为最终的软件系统。
原型的运用方式:
①抛弃策略是将原型用于开发过程的某个阶段,促使该阶段的开发结果更加完整、准确、一致、可靠,该阶段结束后,原型随之作废。探索型和实验型就是采用此策略的。
②附加策略是将原型用于开发的全过程,原型由最基本的核心开始,逐步增加新的功能和新的需求,反复修改反复扩充,最后发展为用户满意的最终系统,演化型快速原型就是采用此策略。
3.增量模型(渐增模型)
增量模型又称为渐增模型,也称为有计划的产品改进模型,它从一组给定的需求开始,通过构造一系列可执行中间版本来实施开发活动。第一个版本纳入一部分需求,下一个版本纳入更多的需求,依此类推,直到系统完成。每个中间版本都要执行必需的过程、活动和任务。
比较瀑布模型、原型进化模型,增量模型具有非常显著的优越性。但是,增量模型对软件设计有更高的技术要求,特别是对软件体系结构,要求它具有很好的开放性与稳定性,能够顺利地实现构件的集成。
特点:
①将待开发的软件系统模块化,可以分批次地提交软件产品,使用户可以及时了解软件项目的进展。
②以组件为单位进行开发降低了软件开发的风险。一个开发周期内的错误不会影响到整个软件系统。
③开发顺序灵活。开发人员可以对组件的实现顺序进行优先级排序,先完成需求稳定的核心组件。当组件的优先级发生变化时,还能及时地对实现顺序进行调整。
优点:
①整个项目的资金不会被提前消耗,因为首先开发和交付了主要功能和高风险功能。
②每个增量交付一个可操作的产品。
③每次增量交付过程中获取的经验,有利于后面的改进,客户也有机会对建立好的模型作出反应。
④采用连续增量的方式,可把用户经验融入到细化的产品,这比完全重新开发要便宜得多。
⑤“分而治之”的策略,使问题分解成可管理的小部分,避免开发团队由于长时间的需求任务而感到泪丧。
……
好处多多,不一一列举
使用场景:
①软件产品可以分批次地进行交付。
②待开发的软件系统能够被模块化。
③软件开发人员对应用领域不熟悉,难以一次性地进行系统开发。
④项目管理人员把握全局的水平较高。
注意:
①良好的可扩展性架构设计,是增量开发成功的基础。
②由于一些模块必须在另一个模块之前完成,所以必须定义良好的接口。
③与完整的系统相比,增量方式正式的回顾和评审更难于实现,所以必须定义可行的过程。
④要避免把难题往后推,首先完成的应该是高风险和重要的部分。
⑤客户必须认识到总体成本不会更低。
⑥分析阶段采用总体目标而不是完整的需求定义,可能不适应管理。
⑦需要更加良好的计划和设计,管理必须注意动态分配工作,技术人员必须注意相关因素的变化。
螺旋模型:
螺旋模型是目前实际软件项目开发中比较常用的一种开发模型。相比于瀑布模型和增量模型,加入了被忽略的风险分析,结合两种模型,弥补了两种模型的不足,更适合开发一些存在风险的复杂的大型软件开发。
优点:
①设计上的灵活性,可以在项目的各个阶段进行变更。
②以小的分段来构建大型系统,使成本计算变得简单容易。
③客户始终参与每个阶段的开发,保证了项目不偏离正确方向以及项目的可控性。
④随着项目推进,客户始终掌握项目的最新信息 , 从而他或她能够和管理层有效地交互。
⑥客户认可这种公司内部的开发方式带来的良好的沟通和高质量的产品。
缺点:
很难让用户确信这种演化方法的结果是可以控制的。建设周期长,而软件技术发展比较快,所以经常出现软件开发完毕后,和当前的技术水平有了较大的差距,无法满足当前用户需求。
螺旋模型的项目适用:
对于新近开发,需求不明确的情况下,适合用螺旋模型进行开发,便于风险控制和需求变更。
四种象限:
①制定计划:确定软件目标,选定实施方案,弄清项目开发的限制条件;
②风险分析:分析评估所选方案,考虑如何识别和消除风险;
③实施工程:实施软件开发和验证;
④客户评估:评价开发工作,提出修正建议,制定下一步计划。
螺旋模型由风险驱动,强调可选方案和约束条件从而支持软件的重用,有助于将软件质量作为特殊目标融入产品开发之中。
喷泉模型:
喷泉模型主要用于采用对象技术的软件开发项目。该模型认为软件开发项目自下而上周期的各阶段是相互迭代和无间隙的特性。软件的某个部分常常被重复工作多次,相关对象在每次迭代中随之加入渐进的软件成分。无间隙指在各项活动之间无明显边界,如分析和设计活动之间没有明显的界限,由于对象概念的引入,表达分析、设计、实现等活动只用对象类和关系,从而可以较为容易地实现活动的迭代和无间隙,使其开发自然地包括复用。
优点:
喷泉模型不像瀑布模型那样,需要分析活动结束后才开始设计活动,设计活动结束后才开始编码活动.该模型的各个阶段没有明显的界限,开发人员可以同步进行开发.其优点是可以提高软件项目开发效率,节省开发时间,适应于面向对象的软件开发过程。
缺点:
由于喷泉模型在各个开发阶段是重叠的,因此在开发过程中需要大量的开发人员,因此不利于项目的管理.此外这种模型要求严格管理文档,使得审核的难度加大,尤其是面对可能随时加入各种信息、需求与资料的情况。