从第一台计算机出现至今,计算机的发展速度令人瞠目。在应用方面,计算机从由少数科学家从事数学计算到今天遍及社会生活的各个领域,人们可以通过它对弈,也可以通过它预测天气。在技术方面,计算机硬件的发展是日新月异,例如中央处理器(CPU)的速度是每隔6个月翻一倍,而成本则是每隔6个月减少一倍。但在计算机软件方面,其发展却是差强人意,虽然也有很多新的软件开发方法和技术不断提出,但软件无论在生产率还是在质量方面总是达不到预期效果。
计算机软件开发的问题一直是困扰软件企业的关键问题。随着时代的发展人们开始意识到这些企业的基本问题不在于新技术是否使用,而在于软件过程的管理问题。软件过程包括两个方面,其一是软件开发的管理过程(Software Management Process),其二则是软件开发的工程过程(Software Engineering Process)。软件企业的开发机构在形成一套完整而成熟的软件过程后,软件的开发才能够步入正轨,才能保证在约定的期限内以固定的成本生产出客户满意的产品。
软件机构形成一套完整而成熟的软件过程不是一蹴而就的,它需要一个从无序到有序,从特殊到一般,从定性到定量,最后再从静态到动态的历程,或者说软件机构在形成成熟的软件过程之前必须经历一系列的成熟阶段(Maturity Level)。软件机构首先要判断自己属于哪一个成熟阶段,然后再根据自身的实际情况决定应该重点采取哪一些活动(Activity)来更有效地改进自己的软件过程。其他企业在同软件企业订立软件开发合同时也可以根据该企业机构所处的成熟阶段判断其软件开发能力,进而判断相关的软件风险。所有这些都需要一个理论指导来作出相关判断,能力成熟度模型(CMM)就是这样一个理论模型,它规定了机构成熟阶段的框架,以及如何据之判断软件机构所处的成熟阶段和机构为改进自己的软件过程应该采取的办法。
CMM产生背景
主要问题
在过去的二十年里,新的软件开发方法和技术的使用并未使软件生产率和生产质量得到有效的提高。软件生产商开始意识到他们的基本问题在于对软件的生产过程管理不力,主要体现在:软件产品不能按时完成、超出预算的成本、以及采用新的技术和工具后其好处难以体现。
主要作用
CMM可以指导软件机构如何控制软件产品的开发和维护过程,以及如何向成熟的软件工程体系演化,并形成一套良性循环的管理文化。具体说来,一个企业要想改进其生产过程,应该采取如下策略和步骤:
- 确定软件企业当前所处的过程成熟级别;
- 了解对改进软件生产质量和加强生产过程控制起关键作用的因素;
- 将工作重点集中在有限几个关键目标上,有效达到改进机构软件生产过程的效果,进而可持续地改进其软件生产能力。
CMM的基本概念
人们在开发和维护软件及其相关产品时所涉及的各种活动、方法、实践和改革等。其中软件相关产品包括软件项目计划、设计文档、程序代码、测试用例和用户手册等。
当遵循某个软件过程时所能达到的期望效果,它可以有效预测企业接收新的软件项目时可能得到的结果。
当遵循某个软件过程时所达到的实际效果。它可以用于验证软件过程能力。
指一个特定的软件过程被显式定义、管理、度量、控制和能行的程度。成熟度可以用于指示企业加强其软件过程能力的潜力。 当一个企业达到了一定的软件过程成熟级别后,它将通过制定策略、建立标准和确立机构结构使它的软件过程制度化。而制度化又促使企业通过建立基础设施和公司文化来支持相关的方法、实践和过程。从而使之可以持续并维持一个良性循环。
企业要通过选择最关键的目标来进行过程改进,应该搞清成熟的软件过程和不成熟的过程之间的差异。
不成熟的企业有如下标志:
- 缺乏确定的软件过程和相应的管理和控制;
- 即使给出了软件过程,也不严格的遵循和强制执行;
- 管理是完全被动的,管理者采用的策略是救火式的,即出了事才去解决,解决的时候也难以纵观全局,往往只顾眼前;
- 由于缺乏有依据的估算,制订软件预算和生产计划时往往跟着感觉走,实际生产时则常常超标;
- 如果强制在预定期限内完成,那么软件的功能和质量肯定是得不到保证;
- 缺乏评价软件产品质量和解决产品缺陷和过程问题的客观基础。
成熟的企业则有如下标志:
- 具有在企业范围内管理、控制软件开发和维护过程的能力;
- 现有人员和新进人员均了解所遵循的软件过程,且工作活动均按照事先的计划完成;
- 在定义好的软件过程中,所有项目和机构中的角色和责任分明;
- 制定的计划是有效的且与实际的工作进展一致;
- 软件过程在必要时可按照一定规则和程序加以修改;
- 软件产品和过程的具有一定的可控性。这主要体现在:
- 管理者能够监督软件产品的质量和生产过程;
- 具有客观的和定量化的措施来判断产品质量并分析产品与生产过程中的问题;
- 计划和预算有章可循,它是基于历史数据的,从而是实际可行的;
- 预算的结果,包括成本、时间表、产品功能和质量等,通常能够达到;
- 有关的参与者完全理解遵循软件过程的价值并认真地遵循之;
- 具有支撑软件过程的基础设施,如标准过程库、历史数据库等。
CMM的五级成熟度
基本前提
- 软件质量在很大程度上取决于产生软件的软件过程的质量和能力;
- 软件过程是一个可管理、可度量并不断改进的过程;
- 软件过程的质量受到用以支撑它的技术和设施的影响;
- 企业在软件过程中所采用的技术层次应适应于软件过程的成熟度。
基本原理
- CMM强调连续的软件过程改进。该连续的改进基于多个演化步骤。CMM将这些演化步骤划分成五个级别。这种分级结构的理论依据是软件质量原理。
- 每一级别都包括若干目标。当满足某一目标后,软件过程的相应部分便确定下来。
- 五级成熟度定义了一个标准,用以度量机构的软件过程成熟度和评价其软件过程能力。
基本内容
CMM的成熟度理论目前主要涉及如下内容:
- 机构和资源的管理: 涉及机构本身的责任,人员和其它资源设施。
- 软件工程过程及其管理: 涉及软件工程过程,即软件过程的深度、范围和完整性以及如何度量、管理和改进这样的过程。
- 工具和技术: 软件工程过程中使用的开发工具和技术。
五个成熟度级别
- 初始级
- 可重复级:有规章的过程
- 定义级:标准化、一致的过程
- 管理级:可预测过程
- 优化级:可持续改进的过程
成熟度的行为刻划
第一级:初始级
- 成功来源于个人英雄主义而非机构行为,因此它不可重复,更换人员后成功便难以维持。
第二级:可重复级
- 针对特定软件项目建立管理该项目的策略和实现这些策略的过程。
- 新项目的计划和管理基于类似项目的经验。
- 软件过程能力主要通过管理单个项目的软件生产过程来得到提高和增强。
- 不同的项目可有不同的软件过程,机构应当建立一定的方针和策略以针对具体的项目选择合适的软件生产过程并进行管理。
可重复级的主要特点在于确定了基本的软件生产管理和控制,具体来讲,有:
- 结合已有项目的经验和新项目的特点来确定本项目的责任和承诺;
- 软件生产成本、时间表和实现的功能被有效跟踪;
- 识别实现承诺所需解决的关键问题;
- 定义软件项目过程标准,机构要确保其被遵守。
概括来说,第二级的主要特点是项目计划和跟踪是确定且有效的,项目的软件过程是可控的,以及已有的成功经验是可重复的。
第三级:定义级
- 有一个机构范围内标准的软件过程,软件工程活动和管理活动被集成为一个有机的整体。标准化的目的是使高层管理者和软件技术人员能够有效合作。
- 有一个组例如软件工程组(SEPG)专门负责订立机构的标准软件过程,并且在机构中制定培训计划来确保相关人员和管理者有足够的知识和技能完成标准过程所赋予的角色。
- 标准的软件过程结合具体项目的特点经过裁剪即形成项目定义软件过程,它是一组集成的完善定义的软件工程和管理过程。
- 一个完善定义的软件过程应包括就绪准则、输入、工作过程、验证机制、输出和完成准则。
- 对于已建立的产品生产线,其成本、时间表和实现功能均可跟踪和控制,软件产品的质量可以得到保证。
- 软件过程能力的实现主要基于在机构范围内对一个定义软件过程的活动、角色和责任的共同理解。
概括来说,第三级的主要特征在于软件过程已被提升成标准化过程,从而更加具有稳定性、重复性和可控性。
第四级:管理级
- 软件的过程和产品有定量的质量指标。
- 重要的软件过程活动均配有生产率和质量方面的度量指标;
- 应用数据库来收集和分析定义软件过程中涉及的各种数据;
- 对项目软件过程和软件质量的评价有定量的基准。
- 软件项目的产品和生产过程的控制具有可预测性。
- 将软件过程性能可能出现的偏差控制在可接受的量化界限内;
- 具体区分影响过程性能发生偏差的有效因素和偶然因素;
- 向新领域拓展的风险是可预知的并被仔细管理和权衡。
概括来说,第四级的主要特征是定量化、可预测、异常控制和高质量。
第五级:优化级
- 机构集中于持续的过程改进
- 具有标识过程缺陷和增强过程能力的有效手段。
- 利用试验数据分析使用新技术所需的代价和带来的效益,然后再有选择地采用。
- 当出现偏差时,软件项目人员能够分析出错原因并采取有效手段防止其再次出现。
- 防止不必要的浪费是第五级的重点。
- 改进的途径有两个,一个是对已有过程的渐进式改进;另一个则是有选择地使用新技术和新方法所带来的革新。
概括来说,第五级的主要特征是新技术的采用和软件过程的改进被作为日常的业务活动来加以计划和管理。