2000年夏天中关村电脑节上举办了CMM国际论坛,这次论坛把CMM这个软件项目管理的新概念推到了大家面前,而且迅即便有了"时髦"的光环。一些软件厂家开始从ISO转向CMM,一些评论文章把CMM当作国内软件产业振兴的又一次"指望",一些基于CMM的科研成果也逐渐为外人所知,关于CMM的研讨会也渐次增多。
CMM最初的提出,与阿帕网(Arp.net)一样,有着美国官方的背景。美国政府定制大型软件的投入历来占相当的比重,但是软件项目并不是单纯的计算机工程,可以简单地"外包"了事。软件系统的开发是原始系统的一次变革历程,是一个过程;而担当软件开发的企业,并不只是担当娴熟的工匠的角色,他们要从内部了解用户的需求,与用户一起走过这个变革的里程,伴随用户把手工作业的平台,迁移到以数字化和网络化为特征的新平台的完整过程。
有软件开发经验的人们都知道,许多在开发进程中存在的问题不是没有解决之道,不是没有恰当的工具,而是没有恰当的组织和恰当的协调。需求分析是否能够做得扎实,并不在于业务人员和技术人员能否提出整个问题的轮廓,并把它组织成描述性的文档,而在于这个需求的认定是否有足够的组织保障,使得技术开发人员可以说,"按照这个思路往下做,应该没有问题"。
然而问题往往就出在这里。试图解决这一问题其实就是卡内基梅隆大学的软件工程研究所SEI(Software Engineering Institute)提出的软件能力成熟度模型(Software Capability Maturity Model)追求的目标:软件开发组织如何提高自己的成熟度水平。这个成熟度水平的衡量标准的难点并不在体系内部,而是在体系的外部和边界处。
CMM的五个等级标志着企业的逐渐提高的软件开发能力的成熟度;更有价值的是,它列出了为达到每一个成熟度等级所必须要做的事。CMM的提出者希望企业通过使用这个模型,一个等级一个等级地去提高它们的软件开发及生产能力。
CMM提出的背景实际是为了解决政府大型软件项目的承包管理问题,因此其核心内容--关键实践(Key Practice)是针对承包开发这一特定的过程而建构的。值得注意的是,CMM对软件开发项目最大的贡献在于,它把组织和管理的精神明确地纳入到软件开发的过程中来,它不是基于目标和方法的管理,而是基于过程的管理。
1987年,软件研究所(SEI)展示了他们的软件能力成熟度模型,把软件过程的成熟度分为五级,目的是给软件开发从被动地解决碰到的难题的方式,转化到成熟的、规范化的方式提供一条途径。这五个等级分别是:
第一级:初始级在初始级,企业一般不具备稳定的软件开发与维护的环境。常常在遇到问题的时候,就放弃原定的计划而只专注于编程与测试。
第二级:可重复级在这一级,建立了管理软件项目的政策以及为贯彻执行这些政策而定的措施。基于过往的项目的经验来计划与管理新的项目。
第三级:定义级在这一级,有关软件工程与管理工程的一个特定的、面对整个企业的软件开发与维护的过程的文件将被制订出来。同时,这些过程被集成为一个协调的整体。这就称为企业的标准软件过程。
第四级:定量管理级在这一级,企业对产品与过程建立起定量的质量目标,同时在过程中加入规定得很清楚的连续的度量。作为企业的度量方案,要对所有项目的重要的过程活动进行生产率和质量的度量。软件产品因此具有可预期的高质量。
第五级:(不断)优化级在这个等级,整个企业将会把重点放在对过程进行不断的优化。企业会采取主动去找出过程的弱点与长处,以达到预防缺陷的目标。同时,分析有关过程的有效性的资料,作出对新技术的成本与收益的分析,以及提出对过程进行修改的建议。
从这样一个阶梯式演化的模型来看,最重要的一个标准就是软件开发的过程必须是开放的,以便不断地进行优化。