一、软件过程
1.能力成熟度模型
CMM 将软件过程改进分为以下5个成熟度级别。
1)初始级(Initial)
软件过程的特点是杂乱无章,有时甚至很混乱,几乎没有明确定义的步骤,项目的成功完全依赖个人的努力和英雄式核心人物的作用。
2)可重复级(Repeatable)
建立了基本的项目管理过程和实践来跟踪项目费用、进度和功能特性,有必要的过程准则来重复以前在同类项目中的成功。
3)已定义级(Defined)
管理和工程两方面的软件过程已经文档化、标准化,并综合成整个软件开发组织的标准软件过程。所有项目都采用根据实际情况修改后得到的标准软件过程来开发和维护软件。
4)已管理级(Managed)
制定了软件过程和产品质量的详细度量标准。软件过程的产品质量都被开发组织的成员所理解和控制。
5)优化级(Optimized)
加强了定量分析,通过来自过程质量反馈和来自新观念、新技术的反馈使过程能不断持续地改进。
2.能力成熟度模型集成(CMMI)
CMMI提供了两种表示方法:阶段式模型和连续式模型,
(1)阶段式模型
- 初始的:过程不可预测且缺乏控制。
- 已管理的:过程为项目服务。
- 已定义的:过程为组织服务。
- 定量管理的:过程已度量和控制。
- 优化的:集中于过程改进。
(2)连续式模型
CL₀(未完成的)
过程域未执行或未得到CL,中定义的所有目标。
CL₁(已执行的)
其共性目标是过程将可标识的输入工作产品转换成可标识的输出工作产品,以实现支持过程域的特定目标。
CL₂(已管理的)
其共性目标集中于已管理的过程的制度化。根据组织级政策规定过程的运作将使用哪个过程,项目遵循已文档化的计划和过程描述,所有正在工作的人都有权使用足够的资源,所有工作任务和工作产品都被监控、控制和评审。
CL₃(已定义级的)
其共性目标集中于已定义的过程的制度化。过程是按照组织的剪裁指南从组织的标准过程集中剪裁得到的,还必须收集过程资产和过程的度量,并用于将来对过程的改进。
CL₄(定量管理的)
其共性目标集中于可定量管理的过程的制度化。使用测量和质量保证来控制和改进过程域,建立和使用关于质量和过程执行的定量目标作为管理准则。
CL₅(优化的)
使用量化(统计学)手段改变和优化过程域,以满足客户要求的改变和持续改进计划中的过程域的功效。
二、软件过程模型
软件过程模型习惯上也称为软件开发模型,它是软件开发全部过程、活动和任务的结构框架。典型的软件过程模型有瀑布模型、增量模型、演化模型(原型模型、螺旋模型)、喷泉模型、基于构件的开发模型和形式化方法模型等。
2.1瀑布模型
(1)瀑布模型是将软件生存周期中的各个活动规定为依线性顺序连接的若干阶段的模型,包括需求分析、设计、编码、测试、运行与维护。它规定了由前至后、相互衔接的固定次序,如同瀑布流水逐级下落。
(2)以项目的阶段评审和文档控制为手段有效地对整个开发过程进行指导,所以它是以文档作为驱动、适合于软件需求很明确的软件项目的模型。
(3)瀑布模型的优点:容易理解,管理成本低;强调开发的阶段性早期计划及需求调查和产品测试。
(4)缺点:难以看到项目的真正进度状态,项目风险的控制能力较弱,开发费用高。
(5)适用:开发大规模系统,具备相关领域及类似开发经验。需求明确,变更较少。新技术替代原有技术。
2.2V模型
瀑布模型的一个变体是V模型。
V模型描述了质量保证活动和沟通、建相关活动以及早期构建相关的活动之间的关系。随着软件团队工作沿着V模型左侧步骤向下推进,基本问题需求逐步细化,形成问题及解决方案的技术描述。一旦编码结束,团队沿着V模型右侧的步骤向上推进工作,其实际上是执行了一系列测试(质量保证活动),这些测试验证了团队沿着V 模型左侧步骤向下推进过程中所生成的每个模型。V模型提供了一种将验证确认活动应用于早期软件工程工作中的方法。
2.3增量模型
- 增量模型强调每一个增量均可发布一个可操作的产品。
- 优点:增量模型作为瀑布模型的一个变体,具有瀑布模型的所有优点。第一个可交付版本所需要的成本和时间很少;开发由增量表示的小系统所承担的风险不大;由于很快发布了第一个版本,因此可以减少用户需求的变更;运行增量投资,即在项目开始时,可以仅对一个或两个增量投资。
- 缺点:如果没有对用户的变更要求进行规划,那么产生的初始增量可能会造成后来增量的不稳定;如果需求不像早期思考的那样稳定和完整,那么一些增量就可能需要重新开发,重新发布;管理发生的成本、进度和配置的复杂性可能会超出组织的能力。
2.4演化模型
- 演化模型有原型模型和螺旋模型等。
- 演化模型是迭代的过程模型,使得软件开发人员能够逐步开发出更完整的软件版本。
- 适用于对软件缺乏准确认识的情况,应对竞争或商业压力。
- 应对不断演变的软件产品的过程模型。
2.5原型模型
- 原型方法比较适合于用户需求不清、需求经常变化的情况。当系统规模不是很大也不太复杂时,采用该方法比较好。
- 快速,低成本构建原型
- 可支持用户界面设计,不可用来指导代码优化,有效捕获系统需求
2.6螺旋模型
- 螺旋模型将瀑布模型和演化模型结合起来,加入了两种模型均忽略的风险分析,弥补了这两种模型的不足。
- 每个螺旋周期分为如下4个工作步骤。
(1)制订计划。确定软件的目标,选定实施方案,明确项目开发的限制条件。
(2)风险分析。分析所选的方案,识别风险,消除风险。
(3)实施工程。实施软件开发,验证阶段性产品。
(4)用户评估。评价开发工作,提出修正建议,建立下一个周期的开发计划。
- 适用于:大型软件,大规模、复杂、高风险系统
- 要求开发人员具有丰富的风险评估经验
- 缺点:过多迭代会增加开发成本,延长时间
2.7喷泉模型
- 支持软件重用和多项开发活动集成的局限性。
- 喷泉模型是一种以用户需求为动力,以对象作为驱动的模型,适合于面向对象的开发方法。
- 喷泉模型使开发过程具有迭代性和无间隙性。允许各开发活动交叉,迭代进行。
- 边分析,边设计
- 优点:提高开发效率,节省时间
- 缺点:需要大量人员,不利于项目管理,审核难度加大,严格管理文档
2.8统一过程模型
- 用例和风险驱动,以架构为中心,迭代并且增量
- 统一过程定义了4个技术阶段:
1)起始阶段:
起始阶段专注于项目的初创活动,产生的主要工作产品有构想文档(Vision Document)、初始用例模型、初始项目术语表、初始业务用例、初始风险评估、项目计划(阶段及迭代)、业务模型以及一个或多个原型(需要时)。
2)精化阶段
精华阶段在理解了最初的领域范围之后进行需求分析和