软件开发模型(Software Development Model)是指软件开发全部过程、活动和任务的结构框架。软件开发模型能清晰、直观地表达软件开发全过程,明确规定了要完成的主要活动和任务,用来作为软件项目工作的基础。
一、瀑布模型(Waterfall Model )
即生存周期模型,由制定计划、需求分析、软件设计、程序编写、软件测试和运行维护等六个基本活动构成,并且规定了它们自上而下、相互衔接的固定次序,如同瀑布流水,逐级下落。
核心:按工序将问题化简,将功能的实现与设计分开,便于分工协作,即采用结构化的分析与设计方法将逻辑实现与物理实现分开。
2、缺点:A、阶段间的顺序性、依赖性强
B、严格质量保证(每阶段均有文档和审评)
C、便于分工协作,推迟物理实现(设计时,不考虑实现)
D、适用于系统要求明确的系统,各种应用软件的开发均可使用
A、开发周期长
B、发现问题越晚,修改的代价越大
C、阶段划分完全固定,产生大量的文档,增加工作量;
D、与用户见面晚,而增加了开发的风险,成功率低(主要由于需求分析不足)
二、快速原型模型(Rapid Prototype Model)
首先,建造一个快速原型,实现客户或未来的用户与系统的交互,用户或客户对原型进行评价,进一步细化待开发软件的需求。通过逐步调整原型使其满足客户的要求,开发人员可以确定客户的真正需求是什么;第二步则在第一步的基础上开发客户满意的软件产品。
基本思想:允许从部分需求出发,先建立一个不全面的系统,通过测试这个系统,进一步使系统扩充和完善
1、优点:
A、开发人员和用户都共同参与
B、与用户见面快,开发效率高
C、减少由于需求不明确带来的开发风险D、适用于那些知识型软件系统的开发
2、缺点:
A、周期长,成本高;
B、从整体结构上不如瀑布型清晰;
C、软件的文档不如瀑布型的划分严格;
即:演化模型。融合了瀑布模型的基本成分(重复应用)和原型实现的迭代特征,采用随着日程时间的进展而交错的线性序列,每一个线性序列产生软件的一个可发布的“增量”。增量构件是由多种相互作用的模块所形成的提供特定功能的代码片段构成. 强调每一个增量均发布一个可操作的产品。
A、产品分解,逐个交付,降低开发风险。2、缺陷:
B、应对需求变化的灵活性,优于瀑布模型和快速原型模型
C、适应于需求经常改变的软件开发过程。
A、由于构件逐渐并入,软件必须具备开放式的体系结构。四、螺旋模型(Spiral Model)
B、易退化为边做边改模型,使软件控制失去整体性。
C、如果增量包间存在相交且未很好处理,则必须做全盘系统分析
将瀑布模型和快速原型模型结合起来,强调了风险分析,特别适合于大型复杂的系统。迭代方式:螺旋模型沿着螺线进行若干次迭代
1、 制定计划:目标,方案,限制条件;
2、风险分析:识别、消除风险;
3、实施工程:开发、验证;
4、客户评估:评价、修正
1、优点:
夸大风险阐发,做出应对策略,特别适用于庞大、复杂并具备高风险的系统。2、缺点:
A、具备专门的技术人员从事风险评估分析五、喷泉模型(fountain model)
B、过多迭代增长开发成本,延迟提交时间。
以用户需求为动力,以对象为驱动的模型,首要用于描述面向对象的软件开发历程。认为软件开发历程自下而上周期的各阶段是彼此重叠以及屡次反复的,就像水喷上去又可以落下来,近似一个喷水。
开发阶段没有特定次序要求,可以交互进行。具有更多的增量和迭代性质,而且在项目的整个生存期中还可以嵌入子生存期。
1、优点:
A、提高开发效率、节省开发时间、面向对象2、缺陷:
B、哪错直接找哪(而瀑布模型、演化式/增量式、螺旋式,当程序出错时,直接找上一阶段,逐渐上推)
A、严格的文档,审查困难
B、开发阶段重叠,需大量开发职员,因此失败于项目的办理。