软件生存周期
软件生存周期(Software Life Cycle):一个软件项目从问题提出开始,直到软件产品最终退役(废弃不用)为止。
软件生存周期分为三个时期:计划、开发和维护
整个软件生存周期划分为多个相对独立的较小阶段,给每个阶段赋予确定而有限的任务,从而降低了整个软件工程的难度,提高了软件开发生产率
• 目的和实质:
控制开发工作的复杂性,通过有限的确定步骤,把用户需求从抽象的逻辑概念转化为具体的物理实现。
• 软件生存期模型:瀑布模型,演化模型,螺旋模型,喷泉模型。
软件过程
围绕软件开发所进行的一系列活动,早期,人们称软件过程为“软件开发模型”
早期观点:软件生存周期中的阶段和软件过程中的活动是基本一致的。
传统软件过程
一、瀑布模型:
瀑布模型(WaterfallModel)又称流水式过程模型,它将软件开发过程模仿旅游景点的阶梯瀑布,由上向下一个阶梯一个阶梯地倾泻下来,最后进入一个风平浪尽的大湖,这个大湖就是软件企业的产品库。
瀑布模型
基于软件生存周期的线性开发模型
软件生存周期中的阶段和软件过程中的活动是基本一致的。
瀑布模型:系统的生命周期方法学用瀑布模型来进行模拟。
各阶段间具有顺序性和依赖性
前阶段结束—>后阶段开始。
前阶段输出文档—>后阶段输入文档。
推迟实现的观点:设置系统分析与设计、推迟物理实现。
质量保证的观点:
每个阶段必须完成规定的文档
每个阶段结束前要对文档评审,以便尽早发现问题,改正错误。
传统瀑布模型存在问题
传统的瀑布模型过于理想化
实际项目很少按照该模型给出的顺序进行;
在设计阶段可能发生规格说明文档中的错误。
而设计上的缺陷或错误可能在实现过程中显现出来。
在综合测试阶段将发现需求分析、设计或编码阶段的许多错误。
不适合需求模糊的系统
开发初始阶段很难彻底弄清软件需求
用户常常难以清楚地给出所有需求;用户必须有耐心,等到系统开发完成;
二、原型模型:
以某个软件原型为参照模型的开发方法,叫做原型法。在初步需求分析之后,马上向客户展示一个软件产品原型,对客户进行培训,让客户试用,在试用中收集客户意见,修改原型,再让客户试用,反复循环几次,直到客户确认为止。
快速原型模型特点
“逼真”的原型可以使用户迅速作出反馈
循环回溯和迭代:非线性模型
使用快速开发工具
种类
渐进型:对原型补充和修改获得最终系统
抛弃型:原型废弃不用
应防止的偏向
舍不得抛弃,从而影响软件质量
增量模型
先完成一个系统子集的开发,再按同样的开发步骤增加功能 (系统子集),如此递增下去直至满足全部系统需求。系统的总体设计在初始子集设计阶段就应作出设想。
增量
小而可用的软件
第一个增量通常是软件的核心
特点
在前面增量的基础上开发后面的增量
每个增量的开发可用瀑布或快速原型模型
每个增量开发的顺序性和总体的迭代性相结合
增量模型的优点
在较短时间内向用户提交可完成部分工作的产品,并分批、逐步地向用户提交产品。从第一个构件交付之日起,用户就能做一些有用的工作。
整个软件产品被分解成许多个增量构件,开发人员可以一个构件一个构件地逐步开发。
逐步增加产品功能可以使用户有较充裕的时间学习和适应新产品,从而减少一个全新的软件可能给客户组织带来的冲击。
采用增量模型比采用瀑布模型和快速原型模型需要更精心的设计,但在设计阶段多付出的劳动将在维护阶段获得回报。
使用增量模型的困难
在把每个新的增量构件集成到现有软件体系结构中时,必须不破坏原来已经开发出的产品。此外,必须把软件的体系结构设计得便于按这种方式进行扩充,向现有产品中加入新构件的过程必须简单、方便,也就是说,软件体系结构必须是开放的。
开发人员既要把软件系统看作整体。又要看成可独立的构件,整体和独立的相互矛盾。
多个构件并行开发,具有拼装集成的风险。
螺旋模型
一个螺旋式周期
计划:确定目标,选择方案,选定完成目标的策略
风险分析:从风险角度分析该策略
建立原型:建立原型来实现本轮螺旋的目标。
评审:评价前一步的结果,计划下一轮的工作
优点
对可选方案和约束条件的强调有利于已有软件的重用,也有助于把软件质量作为软件开发的一个重要目标;
减少过多测试或测试不足;
维护和开发之间无本质区别。
特点
风险驱动
主要适用于内部开发的大规模软件项目
要有具有丰富风险评估专门知识的开发人员,否则风险更大。
软件演化模型
形式化方法模型
• 形式化方法模型:基于程序变换和验证技术的软件开发
• 转换模型(transformationalmodel)
• 净室模型(cleanroommodel)
转换模型
• 开发过程
• 确定形式化需求规格说明书
• 进行自动的程序变换
• 针对形式化开发记录进行测试
• 特点
• 形式化软件开发方法
• 形式化需求规格说明
• 变换技术
• 程序自动生成技术
• 确保正确
净室模型
• 净室思想
• 在分析和设计阶段消除错误
• 在“洁净”状态下实现软件制作
• 形式化
• 盒结构表示分析和设计
• 正确性验证