软件过程能力成熟度模型旨在通过提升组织的软件开发能力帮助顾客提升软件的业务价值。
本模型借鉴吸收了软件工程、项目管理、产品管理、组织治理、质量管理、卓越绩效管理、精益软件开发等领域的优秀实践,为组织提供改进和评估软件过程能力的一个成熟度模型。
总体框架
成熟度等级的总体特征
等级 | 等级名称 | 结果特征 | 行为特征 |
1级 | 初始级 | 软件过程和结果具有不确定性 | 1、能实现初步的软件交付和项目管理活动; 2、项目没有完整的管理规范,依赖于个人的主动性和能力。 |
2级 | 项目规范级 | 项目基本可按计划实现预期的结果 | 1、项目依据选择和定义管理规范,执行软件开发和管理的基础过程; 2、组织按照一定的规范,为项目活动提供了支持保障工作。 |
3级 | 组织改进级 | 在组织范围内能够稳定的实现预期的项目目标 | 1、在2级充分实施的基础上进行持续改进; 2、依据组织的业务目标、管理要求以及外部监管需求,建立并持续改进组织标准过程和过程资产; 3、项目根据自身特征,依据组织标准过程和过程资产,实现项目目标,并贡献过程资产。 |
4级 | 量化提升级 | 在组织范围内能够量化的管理和实现预期的组织和项目目标 | 1、在3级充分实施的基础上使用统计分析技术进行管理; 2、组织层面认识到能力改进的重要性,了解软件能力在业务目标实现、绩效提升等方面的重要作用,在制定业务战略时可获得项目数据的支持; 3、组织和项目使用统计分析技术建立了量化的质量与过程绩效目标,支持组织业务目标的实现; 4、建立了过程绩效基线与过程绩效模型; 5、采用有效的数据分析技术,分析关键软件过程的能力,预测结果,识别和解决目标实现的问题以达成目标; 6、应用先进实践,提升软件过程效率或质量。 |
5级 | 创新引领级 | 通过技术和管理的创新,实现组 织业务目标的持续提升,引领行 业发展 | 1、在4级充分实施的基础上进行优化革新; 2、通过软件过程的创新提升组织竞争力; 3、能够使用创新的手段实现软件过程能力的持续提升,支持组织业务目标的达成; 4、能将组织自身软件能力建设的经验作为行业最佳案例进行推广。 |
能力域
治理
要求说明 | 概述 | 二级能力要求 | 三级能力要求 | 四级能力要求 | 五级能力要求 |
战略与治理 | 组织基于愿景、使命、价值观等,建立组织战略,指导组织业务发展。高级管理层履行其领导作用和承诺,为实现组织战略,提供所需资源,监督业务发,并在必要时进行决策。 | 2.1确定软件开发过程能力建设的范围和边界 2.2基于愿景、使命、价值观等建立组织战略 2.3定期回顾组织战略 | 3.1定义、维护和沟通软件开发过程的组织方针 3.2确保资源的提供以支撑组织战略 3.3确保人员能力以支撑组织战略 3.4监督与评估组织战略 | 4.1基于对软件过程数据统计分析的结果,进行组织战略与治理决策 | 5.1采用创新的方法或手段,强化组织治理能力 |
目标管理 | 组织基于战略,建立组织业务目标,分解到具体的过程能力要求,跟踪和评估目标实现的情况,并为实现目标采取必要的措施。 | 2.1根据组织战略,建立并更新组织业务目标 2.2基于度量数据,跟踪业务目标达成 | 3.1根据组织业务目标,建立组织过程能力要求 3.2 监督与评估过程能力的达成情况 | 4.1 基于统计分析的结果,监督和评估业务目标和过程能力的达成情况 |
开发与交付
要求说明 | 概述 | 二级能力要求 | 三级能力要求 | 四级能力要求 | 五级能力要求 |
需求 | 需求开发和管理之间是同步实施、互为依赖的,两者共同作用使需求得到有效的管理、控制和优化。 需求开发的目的是引出、分析并建立顾客、服务、软件的需求;需求管理的目的是管理和跟踪需求,并确保需求与基于需求的计划、活动和工作产品之间的一致性。 | 2.1 收集、记录利益相关方的需要,形成用户需求 2.2 项目与利益相关方就需求的实现做出承诺 | 3.1 挖掘需求 3.2 分析需求形成软件需求 3.3 确认需求 3.4 管理需求变更 3.5 建立和维护双向可追溯,保持需求的一致性 | ||
设计 | 软件设计是从软件需求出发,根据需求分析确定的结构和模块,对实现软件的结构、系统的数据、系统组件之间的接口以及所用算法的描述。 | 2.1 制定满足需求的设计方案 | 3.1 确定设计方案 3.2 开展软件设计,形成相关设计文件 3.3 评审设计 | 4.1 基于统计分析的结果,监督和评估业务目标和过程能力的达成情况 | |
开发 | 开发分为实现、集成两个过程,两个过程可以重叠或相互作用,并且可以重复或循环地进行。实现是根据软件设计阶段的要求,进行如下工作:软件编程、调试、开展静态分析、代码审查等,形成满足设计要求的软件组件,并验证软件组件与设计说明的一致性。集成是将就绪的软件组件集成至更复杂的软件子系统或完整的软件系统,从而满足顾客的业务需求。 | 2.1 编写代码,实现设计 2.2 执行单元测试 2.3 制定并执行集成方案 | 3.1 依据设计方案、编码规范和项目计划编写代码 3.2 执行代码评审 3.3 管理接口 3.4 制定集成方案 3.5 根据集成方案执行软件集成 3.6 测试已集成的软件,确保其符合需求和设计 3.7 开发支持文档 | ||
测试 | 测试是验证软件部件或软件系统的需求得到满足,并确认软件在预定环境下达到其预期用途。 | 2.1 建立测试方案 2.2 测试准备 2.3 执行测试,记录结果 2.4 评审测试相关文档 | 3.1 使用组织测试过程资产 3.2 分析测试数据 | ||
部署 | 组织应策划适当的软件发布和部署阶段,并在发布和部署之前,证实其满足预期要求。 发布配置项宜包括软件包、用户手册、帮助文档、安装手册、培训材料等,并在发布前放行验证、封装。 应按照策划的部署阶段制定部署计划,确保软件在目标环境中运行,满足运行要求 | 2.1 发布准备与移交 2.2 制定部署计划 2.3 部署实施 | 3.1 使用组织发布与部署的过程资产 3.2 跟踪监控发布和部署过程 | ||
服务 | 服务是指在软件部署完成后阶段性进行或持续进行的、为满足和维持稳定有效运行而展开的工作。 服务的目的是通过一系列的活动,持续发挥软件的业务应用价值。 | 2.1 制定服务支持计划 2.2 提交服务 2.3 记录执行过程及其结果 | 3.1 定义服务支持策略 3.2 按照服务支持过程提供服务 3.3 提交运行数据和服务绩效报告 3.4 反馈软件问题和变更的相关信息,改进开发过程 | 4.1 采用统计分析方法,建立软件服务支持绩效目标,持续预测服务支持绩效,管理服务支持绩效 | |
开源应用 | 组织在软件交付过程中如使用开源技术,应在开源技术的选择、效果评估、使用规范、知识产 权等方面重点关注 | 2.1 在软件设计过程中,进行开源软件的选择、决策 2.2 确认开源软件知识产权 2.3 使用开源软件实现设计 | 3.1 根据组织的规范使用并维护开源软件 3.2 开源软件的个性化开发 3.3 开源软件的升级和替换 3.4 开源软件成果归档 3.5 开源软件使用效果评估 3.6 组织将开源软件成果回馈社区 | 4.1 持续推动开源软件优化提升 |