一、软件过程
软件过程是软件生存周期中的一系列相关的过程。过程是活动的集合。活动是任务的集合。
能力成熟度模型CMM:
成熟度等级表明了一个软件组织的过程能力的水平。除初始级外,每个成熟度等级都包含若 干个关键过程域。
达到某个成熟度级别,该级别(以及较低级别) 的所有关键过程域都必须得到满足,并且过程必须实现制度化。
CMM提供了18个关键过程域,每个关键过程域都有一 组对改进过程能力非常重要的目标,并确定了一组相应的关键实践。
能力成熟度模型集成CMMI:
CMMI是在能力成熟度模型CMM成功后导致了各种模型诞生,模型种类的繁多导致框架术语矛盾不一致,因而诞生了CMMI。
两种表示法:
阶段式模型:
过程域分组:
连续式模型:
连续式模型关注每个过程域的能力,一个组织对不同的过程域可以达到不同的过程域能力等级。
CMMI中包括六个过程域能力等级,等级号为0~5。能力等级表明了单个过程域中组织执行的好坏程度。
允许组织对连续式模型的过程域进行剪裁,也允许对不同的过程域采用不同的能力等级。
连续式模型将24个过程域划分为过程管理、项目管理、工程和支持四个过程组:
二、软件过程模型
通常使用生命周期模型简洁地描述软件过程。
软件过程模型是软件开发全部过程、活动和任务的结构框架。
也称软件开发模型或软件生存周期模型。
典型的软件过程模型有:
瀑布模型 演化模型 增量模型 原型模型 螺旋模型
喷泉模型 基于构件的开发模型 形式方法模型
1. 瀑布模型
(1)阶段间具有顺序性和依赖性:
必须等前一阶段完成才能开始后一阶段任务。
前一阶段输出文档为后一阶段输入文档。
(2)推迟实现:
即注重系统分析与设计,而不是尽快编码。避免返工。
(3)质量保证:
每个阶段必须完成规定的文档。
每个阶段结束前都要对文档进行审评。
优点:
可强迫开发人员采用规范的方法。
严格地规定了每个阶段必须提交的文档。
要求每个阶段交出的所有产品都必须经过质量保证小组的仔细验证。
缺点:
在项目各个阶段之间极少有反馈,不能全面认识动态的软件产品。
只有在生命周期的后期才能看到结果。
用户最初提出的需求发生变化很难处理。
2. 演化模型
许多软件在开发早期对软件需求的认知很模糊、不确定,软件很难一次开发成功。因此可以在获得一组基本需求后,快速分析构造出该软件的一个初始可运行版,称为原版。然后根据用户在试用原版得出的意见和建议进行改造获得新版本。不断重复获得用户满意的版本。
演化模型适用于:
对软件需求缺乏认知的情况。
典型的演化模型:
增量模型、原型模型、螺旋模型
3. 增量模型
增量模型在演化模型的基础上进行了改变:
发布软件时并非发布一个最终版本,而是发布一个初始版本,后续版本是对初始版本的一个增加扩充。增量模型强调每一个增量都发布一个可运行的 产品。
增量模型适用于:
需求经常变化的软件开发。
市场急需而开发人员和资金不能在设定的市场期限之前实现一个完善的产品的软件开发
优点:
从项目开始,用户就可以做一些有用的工作。能在短时间向用户提交可完成部分工作的产品。
逐步增加产品功能,使用户有充分时间适应新产品。减少新产品对用户的冲击。
缺点(困难):
在把每个增量版本集成到上一个版本中时,必须不破坏原来的版本。
必须把软件的体系结构设计的易于扩充。
4. 原型模型
原型模型就是细化的演化模型。
原型的类型:
探索型:其目的是要弄清目标系统的要求,确定所希望的特性,并探讨多种方案的可行性
实验型: 其目的是验证方案或算法的合理性,它是在大规模开发和实现前,用于考核方案是否合适,规格说明是否可靠。
演化型: 其目的是将原型作为目标系统的一部分,通过对原型的多次改进,逐步将原型演化成最终的目标系统。
原型的使用策略:
废弃策略 :主要用于探索型和实验型原型的开发。这些原型只是为了得出某些结果,得到结果之后就会被废弃。用得到的结果去另设计新的版本。
追加策略: 主要用于演化型原型的开发。对原型进行不断修改扩充,最终使其演化为最终版本。
5. 螺旋模型
是瀑布模型和演化模型的结合,并增加了风险分析。
螺旋模型沿着螺线旋转,在四个象限上分别表达 四个方面的活动,即:
制定计划:确定软件目标,选定实施方案,弄清项目开发的限制条件
风险分析:评价所选的方案,识别风险,消除风险
工程实施:实施软件开发,验证工作产品
客户评估:评价开发工作,提出修正建议
适用:
螺旋模型适用于于内部开发的大规模软件项目。 只有内部开发的项目,才能在风险过大时方便地 中止项目。
优点:
对可选方案和约束条件的强调有利于已有软件的重用。
减少了过多测试或测试不足所带来的风险。
维护只是模型的另一个周期,在维护和开发之间无本质区别。
6. 喷泉模型
喷泉模型是一种支持面向对象开发的模型。体现迭代和无间隙特征 :
迭代:各开发活动常常重复工作多次,相关的功能在每次迭代中随之加入演进的系统
无间隙:开发活动之间不存在明显的边界
7. 基于构件的开发模型
支持软件复用,利用预先包装好的构件来构造应用系统。
包括领域工程和应用系统工程:
领域工程目的:构建领域模型、领域基准体系结构和可复用构件库。
应用系统工程目的:使用可复用构件组装应用系统。
8. 形式方法模型
形式化方法是建立在严格数学基础上的一 种软件开发方法。软件开发的全过程中,从需求分析、规约、设计、编程、系统集成、测试、文档生成、直至维护各个阶段,凡是采用严格的数学语言,具有精确的数学语义的方法,都称为形式化方法。
形式化方法用严格的数学语言和语义描述功能规约和设计规约, 通过数学的分析和推导,易于发现需求的岐义性、不完整性和不一致性,易于对分析模型、设计模型和程序进行验证。通过 数学的演算,使得从形式化功能规约到形式化设计规约,以及从形式化设计规约到程序代码的转换成为可能。