软件开发的主要任务是 什么是软件工程( 二 )


(1)、缺乏规划设计环节,软件的结构随着不断的修改越来越差,导致无法继续修改;
(2)忽视需求环节,给软件开发带来很大风险;
(3)不考虑测试和程序的可维护性 , 没有任何文档 , 维护软件是非常困难的 。
2.瀑布模型
温斯顿·罗伊斯在1970年提出了著名的“瀑布模型” 。直到20世纪80年代早期,它是唯一广泛使用的软件开发模型 。
【软件开发的主要任务是 什么是软件工程】瀑布模型将软件生命周期分为规划、需求分析、软件设计、编程、软件测试、运维等六个基本活动 。,并规定了它们自上而下的固定顺序,彼此相连,像瀑布一样,一步一步地落下来 。
在瀑布模型中,软件开发的所有活动都是严格以线性方式进行的,当前活动接受前一个活动的工作结果 , 并实现所需的工作内容 。需要验证当前活动的工作结果 。如果验证通过,结果将作为下一个活动的输入,继续下一个活动;否则 , 修改将被返回 。
瀑布模型强调文档的作用 , 并要求在每个阶段进行仔细的验证 。但是这种模型的线性过程过于理想化 , 已经不适合现代软件开发模式 , 几乎已经被业界所抛弃 。它的主要问题是:
(1)、每个阶段的划分完全固定,阶段之间产生大量文档,大大增加了工作量;
⑵由于开发模型是线性的,用户只能看到开发结果,直到整个过程结束,增加了开发的风险;
(3)早期的错误可能要到开发后期的测试阶段才能发现 , 会带来严重的后果 。
3.快速原型模型(快速原型模型)
快速原型模型的第一步是建立一个快速原型 , 实现客户或未来用户与系统的交互 。用户或客户将评估原型,并进一步细化要开发的软件的需求 。通过逐步调整原型以满足客户的要求 , 开发人员可以确定客户的真实需求是什么;第二步是在第一步的基础上开发出让客户满意的软件产品 。显然 , 快速原型法可以克服瀑布模型的缺点 , 降低软件需求不明确带来的开发风险,效果显著 。快速原型的关键是尽可能快地构建软件原型 。一旦确定了客户的真实需求 , 搭建好的样机就会被丢弃 。因此,原型系统的内部结构并不重要 。重要的是,原型必须快速建立 , 然后修改以反映客户的需求 。
4.增量模型
像建豪宅一样,软件是一步一步建起来的 。在增量模型中 , 软件作为一系列增量组件来设计、实现、集成和测试,每个组件都由代码片段组成,这些代码片段提供由各种交互模块形成的特定功能 。
增量模型并不在每个阶段交付完整的可运行产品,而是满足客户需求的可运行产品的子集 。整个产品被分解成几个组件,开发人员逐个交付产品 。这样做的好处是软件开发可以更好地适应变化,客户可以不断地看到开发出来的软件,从而降低开发风险 。然而,增量模型也有以下缺陷:
(1)随着各个组件逐渐融合到现有的软件架构中,添加的组件不得破坏已经构建好的系统部分,这就要求软件具有开放的架构 。
⑵在开发过程中 , 需求的变化是不可避免的 。增量模型的灵活性可以使其适应这种变化的能力远胜于瀑布模型和快速原型模型模型,但也容易退化为边做边改的模型,从而失去软件过程控制的完整性 。
5.螺旋模型
1988年 , Barry Boehm正式发表了软件系统开发的“螺旋模型” , 该模型将瀑布模型与快速原型模型相结合,强调了被其他模型忽略的风险分析,特别适用于大型复杂系统 。
螺旋模型由风险驱动,强调支持软件复用的替代方案和约束,有助于将软件质量作为一个特殊的目标融入产品开发 。然而 , 螺旋模型也有一定的局限性,如下:
(1)螺旋模型强调风险分析 , 但很多客户并不容易接受和相信这种分析并做出相关反应 。因此,这种模型通常适合于内部的大型软件开发 。
⑵如果风险分析会极大地影响项目的利润,那么进行风险分析是没有意义的 。因此,螺旋模型只适用于大型软件项目 。
(3)软件开发人员要善于发现可能存在的风险并准确分析,否则会带来更大的风险 。
6.进化模型 。
主要针对不能完全提前定义需求的软件开发 。用户可以给出待开发系统的核心需求,当看到核心需求的实现时,可以有效地给出反馈,以支持系统的最终设计和实现 。软件开发人员首先根据用户的需求开发核心系统 。当核心系统投入运行后,用户对其进行测试 , 完成他们的工作,并提出完善系统和增强其能力的要求 。软件开发人员根据用户反馈实现开发的迭代过程 。第一次迭代过程由需求、设计、编码、测试、集成等阶段组成,为整个系统增加一个可定义、可管理的子集 。在开发模式上,采用批量循环开发的方法,部分功能的每次循环开发都成为该产品原型的新功能 。因此,设计不断演变成新的系统 。实际上,这个模型可以被看作是许多重复执行的“瀑布模型” 。

推荐阅读