软件过程模型
软件过程模型
? 软件过程模型是软件开发全部过程、活动和任务的结构框架
? 也称软件开发模型
或软件生存周期模型
? 软件过程模型
? 典型的软件过程模型有:
– 瀑布模型(waterfall model)
– 演化模型(evolutionary model)
– 增量模型(incremental model)
– 原型模型(prototyping model)
– 螺旋模型(spiral model)
– 喷泉模型(water fountain model)
– 基于构件的开发模型(component-based development model)
– 形式方法模型(formal methods model)
瀑布模型
? 1970年W.Royce提出瀑布模型
? 特征
– 接受上一阶段的结果作为本阶段的输入
– 利用这一输入实施本阶段应完成的活动
– 对本阶段的工作进行评审
– 将本阶段的结果作为输出,传递给下一阶段
? 缺点
– 缺乏灵活性,难以适应需求不明确或需求经常变化的软件开发
– 开发早期存在的问题往往要到交付使用时才发现,维护代价大
演化模型
? 许多软件项目在开发早期对软件需求的认识是模糊的、不确定的,因此软件很难一次开发成功
? 可以在获取了一组基本的需求后,通过快速分析构造出该软件的一个初始可运行版本,称之谓原型(prototype),然后根据用户在试用原型的过程中提出的意见和建议、或者增加新的需求,对原型进行改造,获得原型的新版本,重复这一过程,最终得到令客户满意的软件产品
? 演化模型的开发过程就是从构造初始的原型出发,逐步将其演化成最终软件产品的过程
? 演化模型适用于对软件需求缺乏准确认识的情况
? 典型的演化模型有:增是模型、原型模型、螺旋模型
增量模型
? 增量模型将软件的开发过程分成若干个日程时间交错的线性序列,每个线性序列产生软件的一个可发布的“增量”版本,后一个版本是对前一版本的修改和补充,重复增量发布的过程,直至产生最终的完善产品。
? 增量模型融合了瀑布模型的基本成分(重复地应用)和演化模型的迭代特征
? 增量模型强调每一个增量都发布一个可运行的产品
? 增量模型特别适用于:
– 需求经常变化的软件开发
– 市场急需而开发人员和资金不能在设定的市场期限之前实现一个完善的产品的软件开发
? 增量模型能有计划地管理技术风险,如早期增量版本中避免采用尚未成熟的技术
原型模型
? 原型(prototype)是预期系统的一个可执行版本,它反映了系统性质(如功能、计算结果等)的一个选定的子集。一个原型不必满足目标软件的所有约束,其目的是能快速、低成本地构建原型
? 原型方法从软件工程师与客户的交流开始,其目的是定义软件的总体目标,标识需求。然后快速制订原型开发的计划,确定原型的目标和范围,采用快速设计的方式对其建模,并构建原型
? 被开发的原型应交付给客户试用,并收集客户的反馈意见,这些反馈意见可在下一轮迭代中对原型进行改进。在前一个原型需要改进,或者需要扩展其范围的时候,进入下一轮原型的迭代开发
? 原型的类型:
– 探索型(exploratory prototyping)
其目的是要弄清目标系统的要求,确定所希望的特性,并探讨多种方案的可行性
? 实验型(experimental prototyping)
其目的是验证方案或算法的合理性,它是在大规模开发和实现前,用于考核方案是否合适,规格说明是否可靠
? 演化型(evolutionary prototyping)
其目的是将原型作为目标系统的一部分,通过对原型的多次改进,逐步将原型演化成最终的目标系统
? 原型的使用策略:
? 废弃(throw away)策略
主要用于探索型和实验型原型的开发。这些原型关注于目标系统的某些特性,而不是全部特性,开发这些原型时通常不考虑与探索或实验目的无关的功能、质量、结构等因素,这种原型通常被废丢,然后根据探索或实验的结果用良好的结构和设计思想重新设计目标系统
? 追加(add on)策略
主要用于演化型原型的开发。这种原型通常是实现了目标系统中已明确定义的特性的一个子集,通过对它的不断修改和扩充,逐步追加新的要求,最后使其演化成最终的目标系统
? 原型可作为单独的过程模型使用,它也常被作为一种方法或实现技术应用于其它的过程模型中
螺旋模型
? B.Boehm于1988年提出
? 是瀑布模型和演化模型的结合,并增加了风险分析
? 螺旋模型沿着螺线旋转,在四个象限上分别表达四个方面的活动,即:
? 制定计划:确定软件目标,选定实施方案,弄清项目开发的限制条件
? 风险分析:评价所选的方案,识别风险,消除风险
? 工程实施:实施软件开发,验证工作产品
? 客户评估:评价开发工作,提出修正建议
? 螺旋模型出现了一些变种,它可以有3到6个任务区域
? 螺旋模型指引的软件项目开发沿着螺线自内向外旋转,每旋转一圈,表示开发出一个更为完善的新软件版本
? 如果发现风险太大,开发者和客户无法承受,则项目就可能因此而终止
? 多数情况下沿着螺线的活动会继续下去,自内向外,逐步延伸,最终得到所期望的系统
喷泉模型
? 喷泉模型是一种支持面向对象开发的模型
? 体现迭代和无间隙特征
? 迭代:各开发活动常常重复工作多次,相关的功能在每次迭代中随之加入演进的系统
? 无间隙:开发活动之间不存在明显的边界
基于构件的开发模型
? 支持软件复用(reuse)
? 利用预先包装好的软件构件(包括组织内部开发的构件和现存商品化构件COTS)来构造应用系统
? 领域工程的目的是构建领域模型、领域基准体系结构和可复用构件库
? 领域分析分析该领域中各种应用系统的公共部分或相似部分,构建领域模型和领域基准体系结构(reference architecture),标识领域的候选构件
? 对候选构件进行可变性分析,以适应多个应用系统的需要
? 构建可复用构件,经严格测试和包装后存入可复用构件库
? 应用系统工程的目的是使用可复用构件组装应用系统
? 分析待开发的应用系统,设计应用系统的体系结构,标识应用系统所需的构件
? 在可复用构件库中查找合适的构件(也可购买第三方的构件)
? 特化选中的构件,必要时作适当的修改,以适应该应用系统的需要
? 开发那些未找到合适构件的应用部分
? 组装应用系统
? 评价构件的复用情况,以改进可复用构件,同时对新开发的部分进行评价,并向构件工程推荐候选构件
? 根据AT&T、Ericsson、HP公司的经验,有的软件复用率高达90%以上,产品上市时间可缩短2~5倍,错误率减少5~10倍,开发成本减少15%~75%。仅管这些结论出自一些较好使用基于构件开发的实例,但毫无疑问,基于构件的开发模型对提高软件生产率、提高软件质量、降低成本、提早上市时间起到很大的作用
形式方法模型
? 形式化方法(formal methods)是建立在严格数学基础上的一种软件开发方法。软件开发的全过程中,从需求分析、规约、设计、编程、系统集成、测试、文档生成、直至维护各个阶段,凡是采用严格的数学语言,具有精确的数学语义的方法,都称为形式化方法
? 形式化方法用严格的数学语言和语义描述功能规约和设计规约,通过数学的分析和推导,易于发现需求的岐义性、不完整性和不一致性,易于对分析模型、设计模型和程序进行验证。通过数学的演算,使得从形式化功能规约到形式化设计规约,以及从形式化设计规约到程序代码的转换成为可能
? 形式方法模型
? 净室软件工程(cleanroom software engineering)是一种形式化方法,希望在缺陷可能产生严重的危险前消除缺陷
? 净室软件工程强调在程序构造开始前进行正确性验证,并将软件可靠性认证作为软件测试的一部分
? 净室方法还强调统计质量控制技术,分析使用情况的概率分布,并由统计样本导出测试
? 净室方法采用增量模型,每个增量开发包括如下净室任务:增量策划、需求收集、盒结构规约、形式化设计、正确性验证、代码生成、代码审查和验证、统计测试计划、统计使用测试、认证等。如图1.14所示
? 净室过程模型