1.1.2 软件生命周期
1.软件生命周期简介
一个计算机软件,从开始构思开始,经过软件开发成功投入使用,直到最后决定停止使用,并被另一个软件代替时为止,称为该软件的一个生命周期。
整个软件生命周期可划分为若干阶段,每个阶段有明确的任务,这样可以使规模大、结构复杂的软件开发变得容易控制和管理。依据不同的原则对软件生命周期的划分也不同。20世纪70 年代,B.W.Boehm提出了软件生命周期的“瀑布模型”,较典型地刻画了软件生命周期的阶段划分。他将软件生命周期划分为下列8个阶段:
(1)问题定义
(2)可行性研究
(3)需求分析
(4)总体设计(概要设计)
(5)详细设计
(6)编码
(7)综合测试
(8)维护
这8个阶段又可以归纳为3个时期,即计划时期、开发时期和运行时期(见图1-2)。各个阶段的工作按顺序开展,形如自上而下的瀑布,这种发展模式也因此得名。相邻的阶段既相互区别又相互联系,每个阶段都以其前一阶段的工作成果作为本阶段工作的基础。软件开发的经验表明,软件开发越到后期,改正前期开发工作的失误越困难,因此在软件开发工作中应该对软件开发工作的阶段性给予充分认识,在前期工作不充分的前提下不应过早地进入软件开发的下一阶段。
图1-2 软件生命周期
(1)软件的计划时期
软件的计划时期是软件项目的初始时期,其主要任务是分析用户的需求,确定软件开发的总目标,给出系统功能、性能结构、可靠性及接口等方面的要求,在与用户充分交流的基础上,进行软件的可行性分析,制订开发计划,最终提交项目可行性报告和项目规划报告。
(2)软件的开发时期
软件的计划时期后接着就是进行软件产品的设计和生产。软件的设计任务包括软件功能需求分析、概要设计和详细设计。软件的生产就是软件的编码实现和软件测试验证。
(3)软件的运行时期
软件交付使用后就进入运行维护时期。在运行期间软件会暴露在开发阶段遗留的一些问题,所以需要进行软件纠错维护。软件维护还包括适应性维护、功能性维护和预防性维护。适应性维护是指当系统运行环境发生变化以后,为适应这种改变必须对软件进行的修改;功能性维护是指在软件过程中为满足用户需求的变化与扩充对软件所做的修改;预防性维护则是指为改善软件将来的可维护性所做的准备工作。
2.软件开发模型简介
人们根据软件开发的特点,提出了多种软件开发模型。软件开发模型是跨越整个软件生存周期的系统开发、运行和维护所实施的全部工作和任务的结构框架,它给出了软件开发活动各阶段之间的关系。除了上面提到的瀑布模型外,还有渐进式模型、演化模型、螺旋模型、喷泉模型、智能模型、基于构件的开发模型、第4 代技术等。已经产生的一系列的软件工程过程模型各自有其优点和缺点,但是它们均有一系列共同的一般阶段。
软件过程模型发展经历了以下阶段。
(1)以软件需求完全确定为前提的第一代软件过程模型,如瀑布模型等。
这类开发模型的特点是软件需求在开发阶段已经被完全确定,将生命周期的各项活动依顺序固定,强调开发的阶段性;其缺点是开发后期要改正早期存在的问题,需要付出很高的代价,用户需要等待较长时间才能够看到软件产品,增加了风险系数。并且如果在开发过程存在阻塞问题,则影响开发效率。
(2)在开始阶段只能提供基本需求的渐进式开发模型,如螺旋模型和原型实现模型。
这类开发模型的特点是软件开发开始阶段只有基本的需求,软件开发过程的各个活动是迭代的。通过迭代过程实现软件的逐步演化,最终得到软件产品。在此引入了风险管理,采取早期预防措施,增加项目成功概率,提高软件质量;其缺点是由于需求的不完全性,从而为软件的总体设计带来了困难,削弱了产品设计的完整性,并要求较高的风险技能管理水平。
(3)以体系结构为基础的基于构件组装的开发模型,如基于构件的开发模型和基于体系结构的开发模型等。这类模型的特点是利用需求分析结果设计出软件的总体结构,通过基于构件的组装方法来构造软件系统。
在这些阶段中,瀑布模型一般用于结构化开发,前一阶段的输出是后一阶段的输入。
下面就根据瀑布模型中对软件生命周期的划分,详细介绍一下可行性研究、需求分析、概要设计、详细设计、编码和测试、运行和维护等几个软件开发的基本步骤。