软件过程改进“法宝”
“三七”法则
在过程改进总体建议方面,应该从三个方面做准备,分七步走。
首先,在组织方面的准备上,除了要求高层经理出资支持CMM改善软件过程,委托具有管理职责的人员负责CMM实施之外,须成立软件工程过程组(SEPG),研究CMM、编写/修改必要的文档并推广文档;成立软件质量保证组(SQAG),研究软件质量保证技术及过程,编写/修改必要的SQA文档并推广已编写的文档,测量和分析项目进展情况,反馈项目过程状态,准备和评审过程、计划和标准,审计指定的软件工作产品以检验其遵从性,审计软件工作过程的符合性;成立软件配置管理组(SCMG),研究软件配置管理技术及过程,编写/修改必要的SCM文档并推广已编写的文档,建立必要的工具支持。
在知识准备方面,要加强培训工作,建立内部过程评估队伍和庞大的过程改善队伍。对各角色人员进行专项培训,普遍开展软件工程基础及CMM的培训,使每个岗位的人员都具备过程改进的意识,并掌握所必需的过程改进知识和技能。此外,要重视对软件工程的研究,包括方法、工具和过程,加速培养过程改进的骨干队伍。
在能力准备方面,建立有效的软件项目管理,文档化且遵循软件项目管理过程,在建立管理过程中,使用组织的方针来指导项目,建立基本软件工作产品完成准则和检查单,并迅速实施,然后根据反馈意见及时修改。坚持适当的监控机制,例如对项目进度进行跟踪而建立的例会制度,制度化的日报和周报活动。做好实际数据收集、测量与分析工作等。重复成功的以前项目的开发经验。
改进过程总体可以分为以下七个步骤。
.确定目标:确定在一段时间内达到的改进等级。
.状态诊断:把过程改进要达到的状态与目前的状态作比较,找出存在的差距。
.制定计划:“凡事有计划,按计划办”不仅是CMM强调的,也是软件开发过程中应该注意的。
.规程制定:过程改进的一个重要的地方就是“事事有规程,时时有记录”,这样,即使关键人走了,原来的事也能继续而不致产生过多的停顿。
.过程试点:制定了规程后,要对行动计划按执行过程的情况进行适当调整。其中,尤其要注重评审和验证,实现定期监控,注意采集度量数据。
.反馈修正:总结过程试点的经验,修订规程。
.过程推广:扩大应用范围。
软件过程改进实施步骤
公司的过程改进活动也是一个项目,并且是很大的项目,涉及的人员、技术和资源都很多,还要平衡现有产品或项目的进度等。同时,它也是一个不断往复,螺旋上升的一个过程。
第一个步骤为高级经理下定决心,提供足够的资源来主持并完成前期的准备工作,这个阶段核心是评价SEPG组长的资格和资质,还包括评估培训、购买工具的预算及相应资金能否及时到位。
无论是软件商业化的过程或CMM实施的过程之中,建立规范化的易于操作的软件开发行为规范都是首先要做的工作。但是,切记,编制规范的时间一定不能长,以10到12个工作日为宜,文档不宜过多,以5~6个规程为好(对应5个或6个关键过程域),这是第二个关键阶段。评价标准可以是SEPG组长能够顺利、流畅地讲解其制定的规程。在规程编制阶段必须有老板或常务副总直接领导CMM工作。但是一定要记住,制定的过程要遵从“从实践中来,到实践中去”,同项目经理、有经验的开发人员研究、讨论,从而使SEPG组长能够及时反映工作中的问题,并且问题能够得到及时解决。
第三个步骤是制定并发布公司的评估方针和方案,包括开发体系重组过程中的激励措施,中层在此阶段必须介入,这关系着过程改进的结果。SEPG和CMM实施的周例会,必须有高级经理参加,要有记录或录音作为证据,是考核的一个指标。
除此之外,对于还没有进行基于CMM改进的企业,还要重视设计复查、代码复查以及测试工作 。很多程序员习惯于“只做不想”这样一种工作方式,他们更关心每天可以写多少行代码,完成几个模块,在这种态度下,他们都很不愿意复查自己的工作,而习惯于在软件测试阶段把隐藏的错误改正过来。CMM实施过程,就是要通过各种复查,沟通信息,及早发现并更改问题。
在实施了初始的过程或技术部署后,培训成了主要问题。但人员变动时,附加培训的必要可能没被认识到,管理技能的培训尤为重要。而对于那些由于过硬的技术而被提升到管理职位的人员,需要接受一整套新技能的培训,包括人际关系技能。
项目经理在整个过程改进中(尤其是CMM二级)的工作量大约要占到整个总量的一半到四分之三,在评估访谈时也占有了举足轻重的地位。有些项目经理认为自己心里有一套计划,只要按计划进行就可以按时保质完成项目,但事实并非如此,在项目组之间的协调问题上,高层经理的作用是非常明显的。
试点或模拟项目可以很小,哪怕只有两个人,或者联合SEPG进行指导全部公司的模拟项目,这是缩短试验的最好途径。先组织配置管理活动的培训或学习,配置管理活动和质量保证活动在此期间可以得到很好的练习。
CMM为软件企业的过程能力提供了一个阶梯式的改进框架,它基于过去所有软件工程过程改进的成果,吸取了以往软件工程的经验教训,提供了一个基于过程改进的框架; 它指明了一个软件组织在软件开发方面需要管理哪些主要工作、这些工作之间的关系、以及以怎样的先后次序,一步一步地做好这些工作而使软件组织走向成熟。
但是由于CMM中不研究所有软件过程和质量改进问题,也未提供有关实现子过程域所需要的具体知识和技能,因此要进行个体软件过程PSP的实践活动,以填补这一空白,并优化过程改进途径。