一、CMM的基本框架
1.CMM的设计思想
任何软件开发和软件企业的发展都离不开软件过程,而软件过程必然要经历一个从不成熟到成熟,从不完善到完善的发展过程。它不是一朝一夕就能成功的,需要持续不断的对软件过程进行改进,才能取得最终的成效。CMM就是根据这一指导思想设计出来的。为此,模型必需满足如下四点对企业的指导作用:
1)为了正确和有序地引导软件过程活动的开展,要建立一个能够有效地描述和表示的软件过程的改进框架,使其能够对各阶段软件过程的任务和管理起指导作用。
2)以产品质量的概念和软件工程的经验教训为基础,指导企业控制开发、维护软件的生产过程和如何制定一套与之相适应的软件工程及管理体系。
3)指导软件企业通过判断自身当前的过程成熟度,针对软件质量和软件过程提高中最为关键的问题,来选择过程的提高策略。
4)引导企业将注意力放在具体的和经过努力可实现的目标上,并努力通过模型中提供的措施和手段去实现这些目标。
2.CMM的分级标准
1) 建立分级标准的作用
CMM模型描述和分析了软件过程能力的发展程度,确立了一个软件过程成熟程度的分级标准,如图2.1示。其作用:
①一方面软件组织利用它可以评估自己当前所处的位置——过程成熟程度,并以此提出严格的软件质量标准和改进过程的方法和策略,通过不断的努力达到更高的成熟度。
②另一方面该标准也可作为用户对软件企业的一种评价标准,使之在先择软件开发商时不再是盲目的和无把握的。
图2.1 软件过程成熟度的分级标准
2)CMM的分级结构及其过程描述
①初始级:软件过程的特点是无秩序或说无定规的,有时甚至是混乱的。软件过程定义几乎处于无章法、无步骤可循的状态,软件产品所取得的成功往往依赖于极个别人的努力和机遇。
②可重复级:已建立了基本的项目管理过程,可用于对成本、进度和功能特性进行跟踪。对类似的应用项目,有章可循并能重复以往所取得的成功。
③已定义级:用于管理的和工程的软件过程均已文档化、标准化,并形成了整个软件组织的标准软件过程。全部项目均采用与实际情况相吻合的、适当修改后的标准软件过程来进行操作。
④已管理级:软件过程和产品质量有详细的度量标准。软件过程和产品质量得到了定量的认识和控制。
⑤优化级:通过对来自过程、新概念和新技术等方面的各种有用信息的定量分析,能够不断地、持续地对促进过程进行改进。
除第一级外,每一级都设定了一组目标,如果达到了这组目标,则表明达到了这个成熟级别,自然可以向上一更为成熟的高一级别迈进。CMM体系不主张跨级别的进化,因为从第二级开始,每一个低级别的实现均是更高级别实现的基础。
3.CMM各级的主要特性
前面已经反复提到,CMM标准共分五个等级,从第一级到第五级分别为:初始级、可重复级、定义级、管理级和优化级,从低到高,软件开发生产的计划精度越来越高,每单位工程的生产周期越来越短,每单位工程的成本也越来越低。这五个级别具体内容包括:
在初始级中,过程无序,进度、预算、功能、质量不可预测,企业一般不具备稳定的软件开发环境,开发计划由实际工作人员和管理人员临时制定,而且常常在遇到问题的时候,就放弃原定的计划而只专注于编程与测试。
在可重复级中,建立了管理软件项目的政策以及为贯彻执行这些政策而确定的措施。基于以往项目的经验来计划与管理新的项目。达到此级别的企业过程已制度化,有纪律,可重复。
定义级,即过程实现标准化。在这一级,有关软件工程和管理工程的一个特定的、面对整个企业的软件开发与维护的过程的文件将被制订出来。同时,这些过程是集成到一个协调的整体。
管理级,企业对产品与过程建立起定量的质量目标,同时在过程中加入规定得很清楚的连续的度量。作为企业的度量方案,要对所有项目的重要过程活动进行生产率和质量的度量。软件产品因此具有可预期的高质量。达到该级的企业已实现过程定量化。
优化级,整个企业将会把重点放在对过程进行不断的优化,企业会采取主动去找出过程的弱点与长处,以达到预防缺陷的目标。同时分析有关过程的有效性的资料,作出对新技术的成本与收益的分析,以及提出对过程进行修改的建议。达到该级的公司过程可自发地不断改进,防止同类缺陷二次出现。
下面是各个成熟度级别特性的归纳简表:
4.CMM内部结构和特性简述
上面提到了CMM把软件开发组织的能力成熟度分为五个等级。除了第1级外,其他每一级均由若干关键过程域组成,每个关键过程域中规定了5种公共特性:执行约定、执行能力、实施活动、度量和验证的标准。换句话说,每一个关键过程域由若干关键实践活动所描绘,这些实践活动以5个公共特性进行归类,这些公共特性是关键实践描述的对象、也是基础和依据。CMM给每个关键过程规定了一些具体目标,按5个公共特性归类的关键惯例是按该关键过程的具体目标选择和确定的。如果恰当地处理了某个关键过程涉及的全部关键惯例,这个关键过程的各项目标就达到了,也就表明该关键过程实现了。这种成熟度分级的优点在于,这些级别明确而清楚地反映了过程改进活动的轻重缓急和先后次序。(关于关键过程域、关键实践、公共特性等概念后面会有详细解释)
二、CMM与软件过程可视性
1.软件过程的概念
软件过程是人们用于开发和维护软件及其相关产品的一系列活动、方法、实践和革新。其外部视图如P23页图2.2所示。
2.软件过程可视性的重要性与级别
软件工程和CMM都强调软件过程可视性的极为重要性,软件工程强调用软件开发方法来解决软件生产中的质量与效率的问题,而CMM则追求软件组织成熟度的不断提高,组织管理的不断进化来使软件质量、生产效率和生产周期得到明显的改善,二者不仅目标相同,而且都强调开发的可视性来支持开发管理。因此,软件过程可视性的提高,就成为提高软件开发组织成熟级别的关键。
软件过程的成熟度是可视的,在CMM中分成五级,反映了其不断改进和逐步完善的过程。P23页图2.3反映了这一变化情况。
在初始级中,整个软件过程形同一团黑云,对管理人员和用户而言,只能看到项目的要求和结果,不能看到项目的进展状况和项目的软件过程,是否满足要求要到交付时刻才能知晓。
过度到可重复级,软件过程的可视性有所好转,开发分阶段进行,用一系列的黑盒表示。用户需求和阶段产品在一定程度上可以控制。管理人员可在若干关键点设置管理活动和检查质量并作出反应,用户也可通过关键点了解项目进展情况。
发展到已定义级,黑盒的内部结构逐步显示出来,组织拥有标准软件过程并用于各软件项目中。因此,各管理人员明确自己在过程中的管理责任和任务,并能预见可能的风险,为此作出一定的准备。由于已定义级的过程提供了很好的可视性,项目外的用户也能快速地得到较为准确的情况。
在管理级,管理者可以根据客观的度量,预见过程的经费支出和其他情况,定量地、有目标地做出决定。用户也能定量地理解过程的能力和所存在的风险。整个软件过程可以定量地指导和控制。
进化到优化级,人们可以很清楚地看到软件过程的内部结构。为了提高生产率和质量,组织上已经形成了有效地、不断地、系统地改进方法,并且制度化。对现有过程的认识,不仅仅考虑到过程的可能变化所产生的影响,而是能自觉地识别那些不够有效和可能出错的活动,加以改进与替换,达到更进一步的效果。管理人员有能力评估和定量跟踪变化的影响和效果,用户与开发组织关系良好。
三、CMM的阶梯式进化框架
1.进化框架
CMM为软件企业的过程能力提供了一个阶梯式进化框架,它采用分层的方式来解释它的组成部分,以适应不同成熟度企业的需要,如图2.4示。在第二至第五个成熟等级中,每个等级包含一个内部结构的概念,关于内部结构详细描述将在下面CMM内部结构的一栏中进行。
图2.4 CMM的五个成熟等级
1)初始级 初始级的软件过程是混乱无序的,对过程几乎没有定义,项目的执行是随意的甚至是混乱的,项目的成功完全依赖个人的才能和经验,没有组织、标准、规程的保证,质量评判没有客观基准,管理方式属于反应式的。也许,有些企业制定了一些软件工程规范,但往往也是执行得不彻底。纵使有较好的执行,但若这些规范未能覆盖基本的关键过程要求,且执行没有政策和资源等方面的保证时,那么它仍然被视为初始级。初始级是混沌的过程。
2)可重复级 根据多年的经验和教训,人们总结出软件开发的首要问题不是技术问题而是管理问题。因此,第二级的焦点集中在软件管理过程上。一个可管理的过程则是一个可重复的过程,一个可重复的过程则能逐渐进化和成熟。第二级的管理过程包括了需求管理、项目管理、质量管理、配置管理和子合同管理五个方面。其中项目管理分为计划过程和跟踪与监控过程两个过程。通过实施这些过程,从管理角度可以看到一个按计划执行的且阶段可控的软件开发过程。
实现二级(可重复级)已经不简单了。对一个软件企业来说,达到二级的要求就基本上进入了规模开发,开始跳出作坊式的开发模式,能把一个项目的经验或好的方法重现在下一个项目中,基本具备了一个现代化软件企业的基本架构和方法,具备了承接外包项目的能力。可重复级是经过训练的软件过程,其等级标志是分工合同化,主要工作内容为管理各种开发文档。可重复级的软件过程能力可归结为:规则化的或说定规的。
从二级一直往上走,是不间断的改进过程。效率不断在提高,时间控制更严格,品质更有保证,管理更有序。可以逐渐具备承接跨地区、跨部门的大型项目的实力。
3)已定义级 已定义级建立了组织的标准软件过程且已文档化,它包括了软件工程和管理过程的所有方面,集成为一个标准一致的有机整体,提供给各个项目剪裁使用。
在第二级仅定义了管理的基本过程,而没有定义执行的步骤标准。在第三级则要求制定企业范围的工程化标准,而且无论是管理还是工程开发都需要一套文档化的标准,并将这些标准集成到企业软件开发标准过程中去。所有开发的项目均需依据这个标准过程,剪裁出项目适宜的过程,并执行这些过程。过程的剪裁不是随意的,在使用前需经过企业有关人员的批准。定义级是标准一致的软件过程,等级标志是流程程序化,主要工作内容是管理软件开发过程。
4)已管理级 在已管理级,软件产品和软件过程均建立了量化的指标和质量的指标,评价软件过程的产品(最终产品和中间产品)和质量,是企业评价计划的一部分。
第四级的管理是量化的管理,是可量化级,其软件过程具有精确的定义、连贯的评价方法。所有过程需建立相应的度量方式,所有产品的质量(包括工作产品和提交给用户的产品)需有明确的度量指标。这些度量应是详尽的,且可用于理解和控制软件过程和产品,量化控制将使软件开发真正变成为一种工业生产活动。管理级是可预测的软件过程,等级标志是记录表格化,主要工作内容是度量软件开发过程和产品质量。第四级软件产品是高质量的。
5)优化级 第五级的目标是达到一个持续改善的境界。所谓持续改善是指可根据过程执行的反馈信息来改善下一步的执行过程,即优化执行步骤。软件过程的不断改进成为整个企业的主要着眼点和前进的动力。如果一个企业达到了这一级,那么表明该企业能够根据实际的项目性质、技术等因素,不断调整软件生产过程以求达到最佳。优化级是可持续改进的软件过程,等级标志是资源最优化,主要工作内容是提高软件企业资源的利用水平。
从效果而言,在上述不同阶段,软件开发 生产的成熟程度给软件企业带来了完全不同的效果。第一阶段到第五个阶段,软件开发生产的计划精度越来越高,每单位工程的生产周期越来越短,每单位工程的成本越来越低。
2.成熟度级别进化
每一级向上一级迈进的过程中都有其特定的改进计划,具体情况如下。(各级的过程特征及其改进方向详见P27~P31相关表)
1)初始级的改进方向是:①建立项目过程管理,实施规范化管理,保障项目的承诺;②进行需求管理方面的工作,建立用户与软件项目之间的沟通,使项目真正反映用户的要求;③建立各种软件项目计划,如软件开发计划、软件质量保证计划、软件配置管理计划、软件测试计划、风险管理计划和过程改进计划等;④积极开展软件质量保证活动(SQA)。
2)可重复级的改进方向是:①不再按项目制定软件过程,而是总结各种项目的成功经验,使之规则化,把具体经验归纳为全组织的标准软件过程。把改进组织的整体软件过程能力的软件过程活动,作为软件开发组织的责任;②确定全组织的标准软件过程,把软件工程及管理活动集成到一个稳固确定的软件过程中,从而可以跨项目改进软件过程效果,也可以作为软件过程剪裁的基础;③建立软件工程过程小组(SPEG)长期承担评估与调整软件过程的任务,以适应未来软件项目的要求;④积累数据,建立组织的软件过程库及软件过程相关的文档;⑤加强培训。
3)已定义级的改进方向是:①着手软件过程的定量分析,以达到定量地控制软件项目过程的效果;②通过软件的质量管理达到软件的质量目标。
4)已管理级的改进方向是:①防范缺陷,不仅在发现了问题时能及时改进,而且应采取特定行动防止将来出现这类缺陷;②主动进行技术改革管理、标识、选择和评价新技术,使有效的新技术能在开发组织中实施;③进行过程变更管理,定义过程改进的目的,经常不断地进行过程改进。
5)优化级的改进目方向是:①保持持续不断的软件过程改进。CMM5级是优化级,之所以称之为优化级不是因为它比第4级更高,它强调的是一个持续不断的优化过程。如果你在某一个阶段停顿下来,那么不进则退,你就有可能会掉下去。
3.成熟度举例——软件成熟度企业与不成熟企业的一个侧影
大家都见过或听说过某些软件企业人才跳槽后的故事吧。的确存在这样的事情,这些软件企业当出现一些关键的开发人员跳槽离开后,进行中的项目便瘫痪了下来,甚至前功尽弃,已运行中的项目也难以继续维护,给企业造成很大的损失。这就是不成熟企业的一个特征。
而在CMM框架中,运用2级中的一个基本软件工程(KPA)就可以使员工自觉而规范地管理软件生产过程中所有的资源、阶段性产品、产品源代码、文件以及最终生成的产品。严格遵循这套管理方法,程序员写完一段代码,经过一定测试之后,一旦提交到某个公共地方时,这个东西就不是你的了,已经成为项目小组或者是整个企业的了,而且跟随着完善的文档控制。如果你想对它进行任何修改,都要按照规范的程序把它从公共区域提取出来。规范的过程控制,将软件企业由于人员流动带来的风险降到了最低,同时还促使他们养成良好的职业素养。
四、CMM的内部结构
1.内部结构组成
CMM为软件过程能力的提高提供了一条改进的途径。CMM由5个成熟度等级组成,每个成熟度等级有着各自的功能。除第一级外,CMM的每一级按完全相同的内部结构构成的,如图2.6所示。图中成熟度等级是指第2~5级,不同的成熟度等级反映了软件组织的软件过程能力和该组织可能实现预期结果的程度。
图2.6 CMM的内部结构图
在CMM中,从图2.6可以看出,除第1级外,每个成熟度等级都标志了该级别的软件组织所具有的过程能力。每个成熟度等级(第1级除外)规定了若干不同的关键过程域,一个软件组织如果希望达到某一个成熟度级别,就必须完全满足关键过程域所规定的要求,即满足关键过程域的目标。每一个关键过程域都含有属于5种类别(公共特性)中的若干关键实践,通过实现这些关键实践来达到关键过程域的目标。
2.各构成要素描述
1)关键过程域(KPA):是指在有关基础设施的保证支撑下的一系列相互关联的操作活动,这些活动反映了一个软件组织改进软件过程时必须集中力量改进的几个方面。可以简单地说,关键过程域是互相关联的若干软件实践活动和有关基础设施的一个集合。换句话说,关键过程区域标识了达到某个成熟度等级时所必须满足的条件。在CMM中一共有18个关键过程域,分布在第二至五级中,每个关键过程域规定了一个(组)必须满足的目标,并由五个公共特性归类的若干关键实践活动描述实现之。图2.7列出了各个级别的关键过程域,它们的简介见P34~P36。
2)目标:是指某个关键过程域中的关键实践,它表示每一个关键过程域的范围、边界和意图。目标被用来判断一个组织或项目是否有效地实现了某个特定的关键过程区域所规定的内容,即目标确定了关键过程区域的界限、范围、内容和关键实践。
每一个KPA都规定了一组目标,若这组目标在每一个项目都能实现,则说明企业满足了该KPA的要求。若满足了一个级别的所有KPA要求,则表明达到了这个级别所要求的能力。例如,可重复级中需求管理关键过程域的目标是:在软件需求上建立、维护同用户的协议;软件项目计划关键过程域的目标则为:建立一个为开展和管理软件工程的合理设计;又如,软件项目跟踪和监控KPA的目标是:提供对实际进程的可见和监督,以便及时采取纠正措施。(参见P117页“可重复级(第2级)的关键过程域工作流程图”)
3)公共特性:表征各种实践活动的分类,一共分为五类。这些特性(有时又称属性)有效地指出了一个关键过程域的实现范围、结构要求和实施内容。具体是:
①执行约定(commitment to perform):又称实施保证,实施保证是企业为了建立和实施相应KPA所必须采取的活动,这些活动主要包括制定企业范围的政策和高层管理的责任。
②执行能力(ability to perform):执行能力是企业实施KPA的前提条件。企业必须采取措施,在满足了这些条件后,才有可能执行KPA的执行活动。实施能力一般包括资源保证、人员培训等内容。
③实施活动(actives performed):实施活动也叫执行活动,执行过程描述了执行KPA所需求的必要角色、任务和步骤。在五个公共属性中,执行活动是唯一一项由项目来执行相关的属性,其余四个属性则涉及企业CMM能力基础设施的建立。执行活动一般包括计划、执行的任务、任务执行的跟踪以及改进措施等。
④度量和分析(measurement and analysis):度量分析描述了过程的度量和度量分析要求。典型的度量和度量分析的要求是确定执行活动的状态和执行活动的有效性。
⑤验证实施(verifying implementation):验证实施是验证执行活动是否与所建立的过程一致。实施验证涉及到管理的评审和审计以及质量保证活动。实施验证活动可通过管理和软件质量保证进行核查。
4)关键实践(KP):是指关键过程域中的一些主要实践活动。具体就是指为达到关键过程目标,建立起那些对软件过程活动起关键作用的方针、规程、措施、标准、活动以及相关基础设施的实践。每个关键过程域由若干关键实践组成,通过这些关键实践来达到关键过程域的目标。一般情况下,关键实践描述了应该“做什么”,但并不规定“如何做”去达到这些目标。有关关键实践的举例:
例如:可重复级需求管理关键过程域中,记录和管理系统需求的策略的实践活动,就是一个关键实践(执行约定);建立分析责任和分配系统需求这一实践活动,也是该过程域的一个关键实践(执行能力);还有,分配需求、提供资源和资金以及开展需求培训(执行能力),也都是该过程域的一些关键实践活动。当然,该过程域还有度量需求管理活动状态(度量与分析)……
在一些文献中使用了“关键惯例”、“优秀实践”等词。关键惯例与关键实践在概念上基本相同,只是“关键惯例”似乎更加突出了使用以往成功经验和成果之意。“优秀实践”也大概如此。
上面提到了CMM把软件开发组织的能力成熟度分为5个等级。除了第1级外,其他每一级由几个关键过程域组成。每一个关键过程域都由上述分为5种公共特性的实践活动予以描述。关键过程域的分类详见图2.7。它列出了四个成熟度等级的共18个关键过程域。
3.功能综述
从上面所示的结构模型可以看出,CMM包括两大部分“软件能力成熟度模型”和“能力成熟度模型的关键惯例”。“软件能力成熟度模型”主要是描述此模型的结构,并且给出该模型的基本构件的定义。“能力成熟度模型的关键惯例”详细描述了每个“关键过程方面”涉及的“关键惯例”。这里“关键过程方面”是指一组相关联的活动,也就是关键过程域;每个软件能力成熟度等级包含若干个对该成熟度等级至关重要的过程方面,它们的实施对达到该成熟度等级的目标起到保证作用。这些过程域就称为该成熟度等级的关键过程域。反之,非关键过程域是指对达到相应软件过程成熟度等级的目标不起关键作用。可以归纳为:关键过程域是互相关联的若干软件实践活动和有关基础设施的一个集合。而“关键惯例”是指使关键过程方面得以有效实现和制度化的作用最大的基础设施和活动,对关键过程的实践起关键作用的方针、规程、措施、标准、活动以及相关基础设施的建立。关键实践一般只描述“做什么”而不强制规定“如何做”。各个关键惯例按每个关键过程方面的五个“公共特性”【执行约定(对执行该过程的承诺),执行能力(执行该过程的能力),实施活动(该过程中要执行的活动),度量和分析(对该过程执行情况的度量和分析),验证实施(证实所执行的活动符合该过程)】归类,逐一详细描述。当作到了某个关键过程的全部关键惯例就认为实现了该关键过程,如果实现了某成熟度级别以及比其低级所含的全部关键过程就认为达到了该级。
图2.7 关键过程域的分类
五、软件过程评估和软件能力评价
1.软件过程评估
软件过程评估所针对的是软件组织自身内部软件过程的改进问题,目的在于发现缺陷,提出改进方向。评估组以CMM模型为指引,调查、鉴别软件过程中的问题,反过来将这些问题与CMM关键实践活动所提出的指导一起用于确定组织的软件过程改进策略。
2.软件能力评价
软件能力评价是对接受评价者在一定条件下、规定时间内能否完成特定项目的能力进行考核,即考察承担风险的系数的大小。评价包括承包者是否有能力按计划开发软件产品,是否能按预算完成等。通过利用CMM模型确定评价结果后,就可以利用这些结果确定选择某一承包商的风险。也可以用来判断承包者的工作进程,推动他们改进软件过程。
CMM为评估和评价提供了一个参考框架,指出了在评估和评价中通常采用的评判步骤,如图2.8示。
图2.8 软件过程评估和软件能力评价的步骤
3.评估与评价操作过程
具体来说,评估与评价过程是:选择一个工作组;完成问卷调查和取样工作;结果分析;现场访问;与CMM模型对照分析;依据关键过程域的基本情况列出评估提纲。以上步骤在软件过程评估和软件能力评价题勾选很有参考价值的方法,但在具体操作时以下这些特点也值得考虑:
①在现场访问和考察中,充分运用成熟度问卷和结果分析为依据。
②以CMM模型作为现场调查的路线图。
③利用CMM中的关键过程域定义软件过程中的优点和缺陷,从中发现差异。
④对关键过程域目标是否满足的实际情况出发,分析满意程度,写出书面报告。
尽管软件过程评估和软件能力评价有很多相似之处,但由于其目的和结果的不同,它们之间的差异也是必然存在的,如:
①软件过程评估和软件能力评价在出发点和目标上的不同,使得会谈目的、调查范围、收集的信息和输出的表示方式上有着本质的不同。尤其在一些细节规范方面,评估和评价的方法有很大差异。
②软件过程评估和软件能力评价的结果和结果所起的作用不同。因为两者的侧重点不一样,即使是对同一个应用项目,运用相同的方法,也不会得出相同的结果。
③被评估和评价单位的态度对评估和评价活动的影响。评估在某种意义上被评估单位的态度较积极,而评价在某种意义上被评价单位的态度可能比较慎重。软件过程评估是在一个开放的、互相协作的环境中进行的,而软件能力评价往往是在有较大的阻力的环境中进行的。
六、CMM的组织保证
1.组织的必要性
任何企业开发一个产品时都会组织一群人马建立若干小组,并给每个小组赋予一定功能责任和名称,共同努力,实现目标,这是任务得以完成的一项重要保证。
当人们面对CMM实施时,首先想到的就是人员的构成和各种小组的划分。它是实施CMM的组织保证,是一切活动的基础。CMM在制定软件过程实施中本着尽量不和具体的组织机构和组织形式相联系的原则,为的是提供一个独立于具体企业而又有广泛指导意义的模型框架。但在实施各种软件关键实践中,不可避免地要涉及到角色和组织机构。
2.角色映射
为了使CMM能够应用于各种级别和各种规模的企业,SEI提出了一个相对抽象的组织结构,它与组织、项目、人员(角色)相关联,具有自己特定的术语,而且可能不同于其他组织所用的名词。例如基本概念中提到很主要的“软件工程组”的概念。此外,还会接触到软件配置管理组、软件质量保证组、文档支持组等组织名称。
为实施项目建立相应的组织机构是必要的,但是至于企业确切要建立哪些组织、使用什么名字、其存在形式又如何、怎样运作,那是企业自己的事,CMM并没有规定。
七、如何实施CMM
CMM是一个组织软件能力的评价与改进指导体系。软件开发企业可以依据CMM的框架对项目管理和项目工程进行定量控制和能力评估,而软件应用单位也可依据CMM来衡量和预测项目承接方的实际软件生产能力。这样,软件开发方与产品用户方都基于一个同样的标准来对软件生产和管理进行评测与控制。大体来说,软件开发企业在以CMM为标准改进其软件过程中应采取如下步骤:
1.领会CMM要领并依据其框架确定企业目前所属的实际能力成熟度级别。
2.针对欲达到的成熟度级别的核心过程域的要求并参照自身的薄弱环节将重复重点集中在关键目标上,以此参照改进生产过程。
3.加强员工培训。实施员工培训是实践CMM、强化企业的一个带根本性问题。
4.有序地建立和完善过程检测体系与软件开发文档体系,及时分析、总结、积累项目开发过程中的经验与教训,力促这些经验客观化和定量化,使成功的开发模式可以得到规模化的拷贝。
八、CMM若干名词术语解释
◇过程(Process):为实现既定目标的一系列操作步骤[IEEE-STD-610].
◇软件过程(Software Process):指人们用于开发和维护软件及其相关产品的一系列活动、方法、时间和革新。其中相关产品是指项目计划、设计文档、编码、测试和用户手册等。当一个企业逐步走向成熟,软件过程的定义也会日趋完善,其企业内部的过程实施将更具有一致性。
直观地说,软件过程是指软件工程过程、软件管理过程和软件组织过程三者的有机结合。软件工程过程是我们理解的常规的软件的需求分析、设计、编码、测试等过程;软件管理过程是指为使软件工程过程顺利进行而进行的管理活动的集合。上述两个过程是以软件工程组为主、其他相关工程组参与的软件活动。软件组织过程是企业级的对软件的组织活动,是以企业为主的活动。
◇软件过程能力(Software Process Capability):描述了在遵循一个软件过程后能够得到的预期结果的界限范围。该指标是对能力的一种衡量,用它可以预测一个组织(企业)在承接下一个软件项目时,所能期望得到的最可能的结果。
◇软件过程性能(Software Process Performance):表示遵循一个软件过程后所得到的实际结果。(与软件过程能力有区别,软件过程能力关注的是实际得到的结果,而软件过程性能关注的是期望得到的结果。由于项目要求和客观环境的差异,软件过程性能不可能充分反应软件过程整体能力,即软件过程能力受限于它的环境。)
◇软件过程成熟度(Software Process Maturity):是指一个具体的软件过程被明确地定义、管理、评价、控制和产生实效的程度。所谓成熟度包含着能力的一种增长潜力,同时也表明了组织(企业)实施软件过程的实际水平。随着组织软件过程成熟度能力的不断提高,组织内部通过对过程的规范化和对成员的技术培训,软件过程也将会被他的使用者关注和不断修改完善,从而使软件的质量、生产率和生产周期得到改善。
◇CMM(Capacity Maturity Model)能力成熟度模型的简称,含意是软件过程能力成熟度模型,是美国卡内基梅隆大学软件工程研究所为了满足美国联邦政府评估软件供应商能力的要求,于1986年开始研究的模型,并于1991年正式推出了CMM 1.0 版。CMM自问世以来备受关注,在一些发达国家和地区得到了广泛应用,成为衡量软件公司软件开发管理水平的重要参考因素和软件过程改进事实上的工业标准。
◇CMMI(Capability Maturity Model Integration)即能力成熟度模型集成,这也是美国国防部的一个设想,他们想把现在所有的以及将被发展出来的各种能力成熟度模型,集成到一个框架中去。这个框架有两个功能,第一,软件获取方法的改革;第二,建立一种从集成产品与过程发展的角度出发、包含健全的系统开发原则的过程改进。
◇关键过程域(Key Process Area,KPA)是指在相关基础设施的保证支撑下的一系列相互关联的操作活动,这些活动反映了一个软件组织改进软件过程时所必须满足的条件。可以简单地说,关键过程域是互相关联的若干软件实践活动和有关基础设施的一个集合。也就是说,关键过程域标识了达到某个成熟程度级别时所必须满足的条件。在CMM中一共有18个关键过程域,分布在第二至五级中,每个关键过程域规定了一个(组)必须满足的目标,并由五个公共特性归类的若干关键实践活动描述实现之。
◇关键实践(Key Practices,KP):是指关键过程域中的一些主要实践活动。具体就是指为达到关键过程目标,建立起那些对软件过程活动起关键作用的方针、规程、措施、标准、活动以及相关基础设施的实践。每个关键过程域由若干关键实践组成,通过实现这些关键实践达到关键过程域的目标。一般情况下,关键实践描述了该“做什么”,但没有规定“如何”去达到这些目标。
◇软件过程评估(Software Process Assessment)是用来判断一个组织当前所涉及的软件过程的能力状态,判断一个组织所面对的更高层次上的与软件过程相关的课题,以及利用组织的鼎力支持来对该组织的软件过程进行有效的改进。
◇软件能力评价(Software Capability Appraisal)是用来判断有意承担某个软件项目的软件组织的软件过程能力,或是判断已进行的软件过程所处的状态是否正确或是否正常。
◇软件工程组(Software Engineering Group):负责一个项目的软件开发和维护活动的团体。活动包括需求分析、设计、编码和测试等。
◇软件相关组(Software Related Groups):代表一种软件工程科目的团体,它支持但不直接负责软件开发或维护工作,如软件质量保证组、软件配置管理组、软件工程过程组、系统测试组、文档支持组等。在CMM的关键实践中,软件相关组通常应该根据关键过程域和组织的上下文来理解。
◇软件工程过程组(Software Engineering Process Group):是由专家组成的组,他们推进组织采用的软件过程的定义、维护和改进工作。在关键实践中,这个组织通常指“负责组织软件过程活动的组”。
◇系统工程组(System Engineering Group):是负责下列工作的个人的团体:分析系统需求;将系统需求分配给硬件、软件和其他成分;规定硬件、软件和其他成分的界面;监控这些成分的设计和开发以保证它们符合其规格说明。
◇系统测试组(System Test Group):是一些负责策划和完成独立的软件系统测试的团体,测试的目的是为了确定软件产品是否满足对它的需求。
◇软件质量保证组(Software Quality Assurance Group):是一些计划和实施项目的质量保证的团体,其工作目的是保证软件过程的步骤和标准是否得到遵守。
◇软件配置管理组(Software Configuration Management Group):是一些负责策划、协调和实施软件项目的正式配置活动的团体。
◇培训组(Training Group):是一些负责协调和安排组织培训活动的团体。通常这个组织负责准备和讲授大多数培训课程并协调其他培训方式的使用。
◇个体软件过程(Personal Software Process,PSP):是由美国Carnegie Mellon大学软件工程研究所(CMU/SEI)的Watts s. Humphrey领导开发的,于1995年推出,在软件工程界引起了极大的轰动,可以说是由定向软件工程走向定量软件工程的一个标志。PSP是用于控制、管理和改进个人工作方式的自我改善过程,是一个包括软件开发表格、指南和规程的结构化框架。PSP为基于个体和小型群组软件过程的优化提供了具体而有效的途径,例如如何制订计划,如何控制质量,如何与其他人相互协作等等。在软件设计阶段, PSP的着眼点在于软件缺陷的预防,其具体办法是强化设计结束准则,而不是设计方法的选择。PSP保障软件产品质量的一个重要途径是提高设计质量。 总之,PSP是一个集成了过程描述、检测和方法的集合,能够帮助软件工程师改善其个人软件开发性能。
PSP能够说明个体软件过程的原则;帮助软件工程师作出准确的计划;确定软件工程师为改善产品质量要采取的步骤;建立度量个体软件过程改善的基准;确定过程的改变对软件工程师能力的影响。
◇群组软件过程 (Team Software Process,TSP):也是由CMU/SEI提出的属于团队软件开发过程,用于指导项目组中的成员如何有效地规划和管理所面临的项目开发任务,并且告诉管理人员如何指导软件开发队伍。始终以最佳状态来完成工作。TSP实施集体管理与自己管理自己相结合的原则,最终目的在于指导开发人员如何在最少的时间内,以预定的费用生产出高质量的软件产品,所采用的方法是对群组开发过程的定义、度量和改进。
TSP致力于开发高质量的产品,建立、管理和授权项目小组,并且指导他们如何在满足计划费用的前提下,在承诺的期限范围内,不断生产并交付高质量的产品。
九、实施CMM的思考
一个软件企业若切实实施了CMM,而不是为了装装门面的话,那么只使眼前没有获得多少好处,而从长远着眼必定会给企业带来巨大的效益,这是必然的。但是,我们不能设想和企盼企业能够在一夜之间有什么巨大的改变,实施CMM是一个长期的渐进的过程。
CMM是一种资质认证,它可以证明一个软件企业对整个软件开发过程的控制能力。按照CMM的思,进行管理与通过CMM认证并不能划等号。CMM认证并不仅仅是在评估软件企业的生产能力,整个评估过程同时还在帮助企业完善已经按照CMM建立的科学工作流程,发现企业在软件质量、生产进度以及成本控制等方面可能存在的问题,并且及时予以纠正。认证的过程是纠正企业偏差的过程,一定不能把CMM认证当作一种考试、一种文凭,而是要看成一项有利于企业今后发展的投资,借此来改变中国软件业长久以来形成的积弊。
实施CMM对软件企业的发展起着至关重要的作用,CMM过程本身就是对软件企业发展历程的一个完整而准确的描述,企业通过实施CMM,可以更好地规范软件生产和管理流程,使企业组织规范化。企业通过CMM不是为了满足其他公司的要求,而是为了让企业更好地发展,为企业进一步扩大规模打下坚实的基础。如果企业只是为了获得一纸证书而通过CMM,那么就已经本末倒置了,对企业的长久发展反而有害。试想如果企业的态度不够端正,即使通过CMM认证,企业又怎么能够保证它在以后的操作过程当中继续坚持CMM规范呢?CMM只是一个让企业更好发展的规范,不应该成为企业炒作自己的工具,企业需要的是优化自己的管理、提高产品的质量,而非一张CMM证书。
CMM不是万能的,它的成功与否,与一个组织内部有关人员的积极参与和创造性活动是密不可分的,而且CMM并未提供实现有关子过程域所需要的具体知识和技能。在国内要想取得过程改进成功,必须做好以下的几点:软件过程改进必须有高级主管的支持与委托,并积极地管理过程改进的进展;中层管理的积极支持;责任分明,过程改进小组的威望高;基层的支持与参与极端重要;利用定量的可观察数据,尽快使过程改进成果可见,从而激励参与者的兴趣;将实施CMM与实施PSP和TSP有机地结合起来;为企业的商业利益服务,并要求同时相符的企业文化变革。
应该看到,软件过程改善工作必然具有一切过程所具有的固有特征,即需要循序渐进,不能一蹴而就,需要持续改善,不能停滞不前;需要联系实际,不能照本宣科,需要适应变革,不能凝固不变。将CMM/PSP/TSP引人软件企业最有效的途径首先要对单位主管和主要开发人员进行系统的培训。另外一个有效的途径是自顶向下的课程培训,即从高层主管依次普及到下面的工程师。培训包括最基本的软件工程和CMM培训知识;专业领域知识等方面的培训;软件过程方面的培训。要强调的一点是,我们必须根据自身的实际制定可行的方案。不深入研究就照搬别的企业的模式是很难起到提高软件产品质量水平的真正目的的。
SEI的CMM并不是软件开发的方法学,也不是产品模板,更不是过程法律。CMM是过程改进的途径,是一套指南,帮助你通过持续的重复、测量和提炼,稳步创造与净化开发环境。CMM的假定是:如果你实施一个不断重复、测量和提炼的大纲,作为环境改进的副产物,质量便会自然的提高。不要把CMM设想为一套规则,而应将它理解为一个学科,做事的一般方法。在这套指南下运作,你会发现这里有着广阔的空间,让你剪裁和塑造自己的大纲,以适应组织的特定要求。
CMM对于一个软件企业逐步走向成熟是一套严格的规程,但它又不是教条,它要求企业在规程的指引下最大限度地发挥企业的潜能和创造力。如果把一个企业比喻成一辆汽车的话,那么CMM提供的就是让你驶上高速路的加速道,或说是让你到达江河彼岸的一座引桥。
CMM不采用“用这种方法做这类事”的风格,它也不对有问题的IT组织提供快速的纠正方案。CMM是一个指南针,指导你如何逃离暴风雪。CMM是一个大纲,要求你对整个IT组织的有关部分,从高层领导到软件蓝领,都做出坚定的、长期的实施承诺。成熟的过程不可能在一夜之间实现。
在如何解释CMM建议时,它允许极大的灵活性。CMM意识到,IT组织之间存在着很大的差别。他们的客户不同,使用的工具不同,人员智力和专业背景不同,从事的项目属性类型不同,规模大小不同,要求也各不相同。因而,他们应当以自己的方式走向成熟。在一处活用的东西,在另一处未必适用,这一点非常重要。中国部分软件公司的前车之鉴也从某种程度上给了我们建议和经验教训,那就是,要灵活应用CMM,不要幻想一夜就有成效。
CMM只告诉企业怎么做软件工程,有哪些要求,如何检验,每个阶段的重点是什么、应该做什么,以及做事的顺序,并为此提供了一个框架,但它并未告诉你具体怎么做。CMM的这个框架为软件工程化提供了一个循序渐进的模式,并不是将这个过程简化为一步——从0到1。
实际上CMM只定义了一些KPA,用面向对象的话说,就是只定义了接口,接口如何实现那是各个公司自己的事情。比如CMM二级中,定义了配置管理,实际上,配置管理用什么样的计划文档,使用什么样的工具,是CVS或是ClearCase还是……,在CMM中是没有定义的。他只是要求要遵循某个规程,要使用工具,要发布配置状态,至于怎么做,都是各个公司自己定义的。其实,只要能够完成CMM中KPA的映射,实际上是无所谓使用什么样的过程的, RUP、XP都没有问题。
作为一个企业,如果需要持续的发展,用一个网友的话说就是“要把‘牛人’的经验积累下来,即使‘牛人’走了,也可以模仿他的行为,把企业继续作下去,那么就会有各种各样的文档模版,计划模版,完成工作的经验数据作为积累,供后来人模仿。”CMM的一个自然产品正是要求企业要让“牛人”留下他的脚印,不能让企业因为一个“台柱子”走了,企业大厦就随之坍塌了。
CMM的实施是一个没有终点与止境的过程,即使通过了CMM5认证,仍需要长年将CMM体系的实践与软件开发融为一体。由于CMM只提供一个持续改善软件生产质量与过程的框架,并没有制定出具体的方法,因此,就要求实施CMM的企业要在实践中不断发现问题,定义文件与流程,在否定自我中持续优化自身。CMM并没有为实施者界定一个最好的境界,它将不断地追求更好定义为常态。