关于CMM在项目中的实施
随着CMM理念的引入,国内软件公司激起了实施CMM的热潮。虽然CMM的主要思想很清楚,标准的条例也很明确,但如何达到这种标准的可操作性比较差。在缺乏基础和经验的情况下,许多企业在实施CMM的过程中,往往感到迷茫,不知从何处下手。而CMM实施的难点在项目的具体实施。本文将结合我公司CMM3实施经验,简单论述如何在项目中实施CMM。
首先看看CMM标准中相关的定义:
★ 机构
公司或其他实体中的一个单位,它从整体上管理许多项目。机构内的所有项目由一个共同的顶层负责人管理,并采用共同的策略。
★ 机构标准软件过程
可在机构内使用的基本过程定义,用它来引导建立项目的一般软件过程。它描述每个软件项目打算并入自己的项目定义的软件过程中的基本软件过程要素,还描述这些软件过程要素之间的关系(如排序和接口)。
★ 项目定义的软件过程
由某项目使用的软件过程的操作定义。利用软件标准、规程、工具和方法对项目定义的软件过程进行恰当的表征和描述,使其易于理解。项目定义的软件过程是根据项目特点通过剪裁机构标准软件过程而获得的。
★ 剪裁
修改一个过程、标准或规程,以更好地匹配过程或产品需求。
★ SEPG(Software Engineering Process Group)
协组对机构使用的软件过程进行定义、维护和改进的一个专家组。在关键实践中,这个小组通常称为“负责机构的软件过程活动的小组”。
项目实施CMM一般包括三个部分:定义项目软件过程、制定软件开发计划、软件开发及管理。
1. 定义项目软件过程
项目经理在SQA人员(软件质量保证人员)、SEPG成员的帮助下,针对项目的实际情况,选择或剪裁机构标准软件过程,形成项目定义的软件过程。
CMM实施初期,机构标准软件过程不完善的情况下,需要对机构标准软件过程进行剪裁,以适应项目的实际需要。机构标准软件过程较完善时,一般只需要从机构标准软件过程中选择模板、方法等形成项目软件过程,建议不再采用剪裁的方式。
项目软件过程的内容为:项目采用的软件生命周期模型(如:瀑布模型、V模型等);项目软件开发及管理(如:软件开发计划、需求分析、概要设计、详细设计、编码、测试、发布、项目跟踪等)应遵循的方法与模板。
项目软件过程由一到多个文档构成。至少应有一个文档详细描述项目的软件生命周期模型、软件开发及管理应遵循的标准、项目软件过程与机构标准软件过程的偏差(即进行了剪裁的内容)。如果进行了剪裁,还将存在项目定义的方法和模板文档。
项目软件过程定义完成后,需要经过SQA人员、SEPG成员的评审,并得到上级主管领导的批准认可。主要是评审项目软件过程与机构标准软件过程的偏差,看看发生的偏差是否符合机构的标准,并满足CMM标准的要求。
2. 制定软件开发计划
项目经理参照项目软件过程中的生命周期模型、方法与模板,结合客户需求制定软件开发计划。软件开发计划是软件开发活动的依据,也是软件开发管理的基础。
软件开发计划的内容有:软件规模估计、工作量估计、成本估计、制定工作进度、识别风险、风险管理计划、跟踪管理、配置管理等。其中软件估计、风险识别与管理、制定工作进度是软件开发计划的重点与难点。
软件估计主要为规模估计、工作量估计、成本估计。软件规模估计是工作量估计的基础,而工作量估计的结果是成本估计的基础。软件规模估计的方法有很多,最常用的功能点估计、代码行估计、界面数估计。各种估计方法有其优缺点,需要根据公司或项目的实际情况来选择估计方法。软件规模估计选定估计方法后,还必须结合以往项目的开发经验或收集的历史数据。开发经验或历史数据的丰富程度,决定了规模估计结果与实际情况的接近程度。软件工作量除了依赖软件规模的估计,同时与公司的软件开发生产率密切相关(什么是软件开发生产率?以界面数估计方法为例。3个界面,需要花费的工作量为1人月。那么软件开发生产率为3界面/人月)。因此规模相同的软件,不同公司开发软件所花费的工作量不同。估计了工作量以后,软件成本的估计就相对比较容易。我们一般将软件成本简单分为:软件开发成本、其他成本。软件开发成本等于工作量与人员平均花费之积。其他成本包括管理成本、差旅费等各种费用。这些需要根据公司的实际情况来确定。
软件风险是指软件开发过程中及软件产品本身可能造成的伤害或损失。我们需要关注以下的问题:什么样的风险会导致软件项目的彻底失败?用户需求、开发技术、目标计算机、以及所有其它与项目有关的因素的改变将会对按时交付和总体成功产生什么影响?对于采用什么方法和工具,需要多少人员参与工作的问题,我们如何选择和决策?对软件质量要达到什么程度才是“足够的”?
风险识别与管理的目的,就是识别出软件开发过程中可能产生的问题,制定预防问题的措施,及问题发生时的解决方法。公司内不同项目的风险不同,不同公司开发相同软件的风险不同。识别风险需要采用科学的风险识别方法,同时也需要经验与历史数据的积累。根据风险发生的可能性与发生时产生的影响,可以对风险进行分级。在风险识别的基础上,制定详细的预防措施和解决方法。用以避免风险的发生,当风险发生时将损失减小到最低程度。随着软件开发活动的进行,风险在不断的变化。计划时预测的部分风险可能消失,同时可能产生一些新的风险。因此在制定预防和解决的方法同时,还需要制定风险监控计划。在风险监控点上,监控风险的变化情况,并制定新的措施和方法。
工作进度的制定主要基于工作量估计的结果、采用的软件生命周期模型。制定工作进度主要需要详细描述,“什么人?什么时候?做什么事情?产生什么软件工作产品?”。制定工作进度使用的工具可以根据个人习惯来选择,比较好的有MS Project。制定工作进度的过程中需要综合考虑软件开发过程中可能遇到的困难,必须将时间安排得比较合理。时间太紧,将造成计划不能按时完成,不能起到指导软件开发的作用。而太松,又将降低工作效率。工作进度的时间把握存在很大的难度,和软件规模估计一样,需要经验和历史数据的积累。
软件开发计划制定完成后,需要得到项目组成员的认可,并获得承诺。最后需要项目上级主管领导的签字批准。
3. 软件开发及管理
软件开发将按软件开发计划进行,所有开发活动必须遵从项目定义的软件过程。软件开发过程中,SQA人员将按照SQA计划(软件质量保证计划)对软件开发活动和产生的软件工作产品进行审核。以保证软件开发活动和产生的软件工作产品符合项目软件过程定义的标准。
软件开发是一个复杂的过程,其间存在着各种不确定因素。软件计划无法做到与实际情况完全吻合,好的计划也只能尽量接近实际情况。因此,软件开发过程需要进行管理,以保证软件开发能按客户的要求按时按质完成。软件开发的管理主要包括:跟踪软件开发活动、测量花费的工作量、实时调整计划。
跟踪软件开发活动,主要是跟踪软件规模、工作量、成本、进度、风险等。跟踪的方式很多,主要分为定期与非定期。定期方式常见的有:周例会、里程碑会议。项目组每周或里程碑处召开会议,以便项目经理、项目上级主管领导能够实时地掌握项目的进展与存在的问题。非定期一般为,项目出现问题时,项目经理、项目上级主管领导对产生的问题进行了解分析,并帮助解决问题。
测量花费的工作量,是测量前一阶段软件开发活动实际所花费的工作量。并将实际的工作量与计划估计的工作量进行对比分析,为后一阶段计划的改进提供依据。
在跟踪、测量的基础上,看看是否有必要调整计划。对计划的调整表现为:重新估计规模、工作量、成本,重新识别风险并管理风险,调整工作进度的时间人员安排等。 CMM在项目中的实施还有很多工作要做,以上只是描述了其中的一部分。从印度软件成功的经验,让我们认识到实施CMM将提高我们的软件产品质量,帮助我们打开国际市场,振兴我国的软件产业。但CMM的实施也存在很大的难度,特别在CMM实施初期,我们将遇到很多困难。例如:增加了软件开发的工作量,降低了软件开发效率等。克服这些困难,通过实施CMM持续地改进软件开发过程,我们一定能从中受益。