**引言:**软件生存周期模型是一个包括软件产品开发、运行和维护中有关过程、活动和任务的框架,覆盖了从该系统的需求定义到系统的使用终止(IEEE标准12207.0-1996)。把这个概念应用到开发过程,即软件过程模型,可以发现所有生存周期模型的内在基本特征:描述了开发的主要阶段;定义了每一个阶段要完成的主要过程和活动;规范了每一个阶段的输入和输出(提交物);提供了一个框架,可以把必要的活动映射到该框架中。
软件过程是生产一个最终满足需求并且达到工程目标的软件产品所需的步骤。《计算机科学技术百科全书》中指出,软件过程是软件生存周期中的一系列相关的过程。过程是活动的集合,活动是任务的集合。软件过程有3层含义:一是个体含义,即指软件产品或系统再生存周期中的某一类活动的集合,如软件开发过程、软件管理过程等;二是整体含义,即指软件产品在所有上述含义下的软件过程的总体;三是工程含义,即指解决软件过程的工程,应用软件工程的原则,方法来构造软件过程模型,并结合软件产品的具体要求进行实例化,以及在用户环境下的运行,以此进一步提高软件生产率,降低成本。
常见的软件生存周期模型有瀑布模型、演化模型、螺旋模型和喷泉模型等。
1.瀑布模型(Waterfall Model)
瀑布模型是将软件生存周期各个活动规定为依线性顺序连接的若干阶段的模型。它包括需求分析、设计、编码、测试、运行和维护。它规定了由前至后、相互衔接的固定次序,如同瀑布流水,逐级落下,如图所示:
增量模型作为瀑布模型的一个变体,具有瀑布模型的所有优点,此外,它还有以下优点:第一个可交付版本所需要的成本和时间很少;开发由增量表示的小系统所承担的风险不大;由于很快发布了第一个版本,因此可以减少用户需求的变更;运行增量投资,即在项目开始时,可以进队一个或两个增量投资。
增量模型的不足之处:如果没有对用户的变更要求进行规划,那么产生的初始增量可能会造成后来增量的不稳定;如果需求不像早期思考的那样稳定和完整,那么一些增量就可能需要重新开发;管理发生的成本、进度和配置的复杂性,可能会超出组织的能力。
3.演化模型(Evolutionary Model)
演化模型主要针对事先不能完整定义的软件开发,是在快速开发一个原型的基础上,根据用户在使用原型的过程中提出的意见和建议对原型进行改进,获得原型的新版本。重复这一过程,最终可得到令用户满意的软件产品。
演化模型的主要优点是,任何功能一经开发就能进入测试,以便验证是否符合产品需求,可以帮助引导出高质量的产品要求。其主要缺点是,如果不加控制地让用户接触开发中尚未稳定的功能,可能对开发人员及用户都产生负面影响。
4.螺旋模型(Spiral Model)
对于复杂的大型软件,开发一个原型往往达不到要求。螺旋模型将瀑布模型和演化模型结合起来,加入了两种模型均忽略的风险分析,弥补了这两种模型的不足。
螺旋模型将开发过程分为几个螺旋周期,每个螺旋周期大致和瀑布模型相符合,如下图所示。在每个螺旋周期分为如下四个工作步骤。
6.统一过程(Unified Process)
统一过程的特色是“用例和风险驱动,以架构为中心,迭代的增量开发过程”。迭代的意思是将整个软件开发项目划分为许多个小的“袖珍项目”,每个“袖珍项目”都包含正常软件项目的所有元素:计划、分析和设计、构造、集成和测试,以及内部和外部发布。
统一过程定义了5个阶段及其制品。
(1)起始阶段(Inception Phase)
起始阶段专注于项目的初创活动,产生的主要工作产品有构想文档(Vision Document)、初始用例模型、初始项目术语表、初始业务用例、初始风险评估、项目计划(阶段及迭代)、业务模型以及一个或多个原型(需要时)。本阶段的里程碑是生命周期目标。
(2)精化阶段(Elaboration Phase)
精化阶段再理解了最初的领域范围之后进行需求分析和构架演进,产生的主要工作产品有用例模型、补充需求(包括非功能需求)、分析模型、软件体系结构描述、可执行的软件体系结构原型、初步的设计模型、修订的风险列表、项目计划(包括迭代计划、调整的工作流、里程碑和技术工作产品)以及初始用户手册。本阶段的里程碑是生命周期架构。
(3)构建阶段(Construction Phase)
构建阶段关注系统的构建,产生实现模型,产生的主要工作产品有设计模型、软件构件、集成的软件增量、测试计划及步骤、测试用例以及支持文档(用户手册、安装手册和对于并发增量的描述)。初始运作功能。
(4)移交阶段(Transition Phase)
移交阶段关注于软件提交方面的工作,产生软件增量,产生的主要工作产品有提交的软件增量、β测试 告和综合用户反馈。本阶段的里程碑是产品发布版本。
(5)生产阶段(Production Phase)
生产阶段对持续使用的软件进行监控,提供运行环境(基础设施)的支持,提交并评估缺陷 告和变更请求。
在每个迭代中,有五个核心工作流:捕获系统应该作什么的需求工作流,精化和结构化需求的分析工作流,用系统架构实现需求的设计工作流,构造软件的实现工作流,验证实现是否如期望那样工作的测试工作流。
统一过程的典型代表是RUP(Rational Unified Process),主要针对前4个技术阶段。RUP是UP的商业扩展,完全兼容UP,但比UP更完整,更详细。
7.敏捷方法(Agile Development)
敏捷开发的总体目标是通过“尽可能早地、持续地对有价值的软件的交付”使客户满意。通过再软件开发过程中加入灵活性,敏捷开发使用户能够再开发周期的后期增加或改变需求。
敏捷过程的典型方法有很多,每一种方法基于一套原则,这些原则实现了敏捷方法所宣称的理念(敏捷宣言)。
(1)极限编程(XP)
XP是一种轻量级(敏捷)、高效、低风险、柔性、可预测的、科学的软件开发方式。它由价值观、原则、实践和行为4各部分组成,彼此相互依赖、关联,并通过行为贯穿于整个生存周期。
· 四大价值观:沟通、简单性、反馈和勇气。
· 5个原则:快速反馈、简单性假设、逐步修改、提倡更改和优质工作。
· 12个最佳实践:
计划游戏(快速制定计划、随着细节的不断变化而完善)、
小型发布(系统的设计要能够尽快可能早地交付)、
隐喻(找到合适的比喻传达信息)、
简单设计(只处理当前的需求,使设计保持简单)、
测试先行(先写测试代码,然后再编写程序)、
重构(重新审视需求和设计,重新明确地描述它们以符合新的和现有的需求)、
结队编程、
集体代码所有制、
持续集成(可以按日甚至按小时为客户提供可运行的版本)、
每周工作40个小时、
现场客户、
编码标准。
(2)水晶法(Crystal)
水晶法认为每一个不同的项目都需要一套不同的策略、约定和方法论。
(3)并列征求法(Scrum)
并列征求法使用迭代的方法,其中,把每30天一次的迭代称为一个“冲刺”,并按需求的优先级别来实现产品。多个自组织和自治的小组并行地递增实现产品。协调是通过简短的日常情况会议来进行,就像橄榄球中的“并列争球”。
(4)自适应软件开发(ASD)
ASD有6个基本的原则:有一个使命作为指导;特征被视为客户价值的关键点;过程中的等待是很重要的,因此“重做”与“做”同样关键;变化不被视为改正,而是被视为对软件开发实际情况的调整;确定的交付时间迫使开发人员认真考虑每一个生产的版本的关键需求;风险也包含其中。
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!