CMM理念观感

CMM 被人们淡忘了目的。 CMM 的目的就是实现软件过程的改进。但是实现软件过程的改进并非只有一个 CMM 。文章综述了一下改进历经的几个阶段:
僵化、固化、优化。不光要达到 CMM 规定的目标,最重要的是重视过程。好的过程有好的结果。然而文章同时指出这句话并不是肯定语气。在后记中总结了全文:本文
介绍了无所不在的过程,并试图探讨一些过程以及过程改进的共性问题。并认为这个改进过程如同“奥林匹克”那样不断超越,没有尽头。然后给出 3
则比喻道出制度和灵活之间的关系。最后在一连串的发人深思的疑问中结束。

CMM 的目的就是实现软件过程的改进。 凡是活动都存在过程;凡是过程都需要改进;凡是改进都没有终点。但是 CMM 还是有最高级第 5
级。如果几家公司都达到了第五级,怎么来比较这两家软件公司呢?肯定有评价的标准。这就说明即使软件公司达到了第五级,也并不意味就能拿到项目的订单。这显然已经超过
CMM 的职能范围。同时也表明, CMM 并非医治软件工程弊端的万能药剂。如果把 SPI (软件过程改进)当作一剂药方的话, CMM
仅仅是其中的一味药。 CMM 只是说目标如何,并没有说出使用什么技术和手段去达到那个目标。

对于 CMM 这样的分级模型,如果没有足够长的实施期,即使快速达到了比较高的级别,也并不意味着有真正意义上的改进。它需要固化在软件企业的文化之中,否则外
来的和尚就没有本土的和尚念经念得好听。 按照 CMM 的思想进行管理与通过 CMM 认证并不能划等号。拿到了证书,并不代表公司有了 CMM
的理念。记得有家公司自己声称已经达到了 CMM5 级。但是招聘人员说好 10 : 00 ,却整整迟到了 1
个小时。下午进行的面试也完全没有流程。谁抢到座位,谁就先面试。明显感觉到这家公司的招聘仍旧处于混乱级。难以想象一个达到 CMM5
级的企业,其企业招聘人员竟然没有什么标准化的招聘实习生的规程。虽然 CMM
并没有任何对人员招聘的规定。但我觉得一个公司如果没有类似这样的规定,肯定不是通过 CMM
评审的公司。感觉公司里虚假的成分很多似的。如果软件公司只是快速地求得一个评审证明。那就与 CMM 的本质(重视过程)背道而驰。 CMM
就是为了过程的改进。文章中也提到: “目标之外,还需过程”,是因为目标其实是由过程决定的。一般来说,好的过程倾向于得到好的结果,而不良的过程多半会导致失败
。请注意,这里用的都是不肯定的语气。因为没有人能肯定说好的过程一定得到好的结果;或者说坏的过程一定导致了失败。软件工程是个很神奇的领域,任何神话都有可能发生
。“ 好的过程=好的软件?”这个经典的问题一直困扰着人们。 CMM 只是尽可能的使过程变得完美,但依旧不能确保产生好的软件。这不只是 CMM
的缺陷所在,也是软件工程领域里尚未解决的疑难问题。 有些人反对使用 CMM 框架,这是原因之一。还有一个原因是因为害怕 CMM
过程改进的框架束缚了他们的手脚,的确 CMM 目标很多,关键实践也很多,条条框框更是多。他们认为应该对 CMM
进行活学活用,而不要局限于它现有的条条框框。然而此文的笔者认为其实活学活用这几个字是有次序的,即先学、后用、再活。也就是说要真正的实施 CMM ,在达到
CMM 的各项目标后再寻求改进。而非在实施开始阶段就将 CMM 大卸八块,只使用对自己有用的部分。但我认为这对项目管理来说或许是对的。

CMM/CMMI 最原始的出发点是重过程管理而轻工程方法。对于机构的管理提出很多的建议。 CMM 的各种执行活动也是聚焦于机构的管理,而不是项目。难免
CMM 不能适用于一些项目。对于有些项目来说,有效的工程方法往往比有效的软件过程更能让企业获得即时的效果。比如快速短期的项目, CMM
就显得有些笨拙,成本也消耗太大。在这一领域与敏捷建模比起来就逊色些。值得一提的是从中长期来看敏捷建模,又和 CMM
有异曲同工之妙。不过完全否定项目实际情况而推广高屋建瓴的先进理论注定以失败告终。对于中国的部分公司来说,首先应该进行的并不是去运行什么基于
CMM/CMMI 的软件过程,而是扎实的完成软件过程的基础构建。没有坚实的基础,又在 CMM 的前期投入过大,极可能导致企业的入不敷出。

CMM 的确是权威的。但并不是权威的就一定是有效的。对于一个项目工程有效的才是最好的。 CMM 也不可能做到以不变应万变。最近做出的 CMM
版本改进,也正是因为这个原因。根据环境,根据具体的项目来实施 CMM ,确实是必要的。

我曾经做过几个项目,一直是 CMM1 级(混乱级),现在情况有些好转,可以认为部分过程已经达到了 2 , 3 级的标准。虽然总体看来仍旧是
CMM1 级。在学院中几乎没有环境来让你达到 CMM2 ,或者 CMM3
。实验课很少,实验的机器很少,我们学生还要用很多时间去学习英语,复习考研等等。怎么可能像公司那样每天工作 8 个小时,按部就班的实施 CMM2
级?更何况绝大部分公司采用的是加班制。部分学生也喜欢投机取巧, copy 代码的现象日益严重, copy
的代码可以和原作打相同的分数。这如同盗版了别的公司的产品,也能和那家公司获得相同的利益,而且还没有任何法律上的责任。学院机构管理的缺陷早已注定 CMM
难在学院里推广使用。由于大家急于上交成品,根本没有人去考虑后期的维护等等。由此看来, CMM
的实施要有一定的基础作保障,否则一切都是空谈。一直认为自己的项目过程等级停留在 CMM1 级。但是我在这样的等级依旧可以快速开发出符合老师要求的系统。或
许是每次都基于巧合吧。不过快速原型法和结对编程也发挥了巨大的作用。可惜的事这些系统的文档记录都不是很健全,自己也不认为这样做是好的软件工程过程。但是考虑到时
间、人力、技术等种种方面的原因,也只好勉强走上这条道路。我一直认为在我们技术还未成熟,时间有些紧张,人力资源有些匮乏的时候,做这些项目无疑是死亡之旅。按照现
在软件工程的观点,如果想走下去,必须做到人员,时间,资金能控制一个。但很可惜我一个都不能控制,只能从软件质量或者软件文档上下工夫,更不要说走 CMM
这条路。

再重申一下 CMM 的目的就是实现软件过程的改进。软件过程的改进意味着提高了出现好结果的概率。而我们个人、小组或是企业的目标是要一个好结果。 CMM
和其他的方法学的关系类似于武林正宗和旁门左道。武林正宗理应推崇,旁门左道也不应鄙视。毕竟有时旁门左道之术也可以一招克敌制胜。不过公司要持续发展,其规模要不断
扩大,再采用旁门左道这种小概率克敌制胜之路,未免有些风险。这正是 CMM 的好处。

我个人认为,企业到达了 CMM5
级并不意味着结束。这里应该是起点,而非终点。从优化级出发,对已有的软件过程进行革新,创造出一套更加行之有效的方法或者软件过程,才是 CMM 的本意。

** 引用: **

[1] 过程“奥林匹克”—— CMM 的目的 . 雅行、方圆、李怀璋、武占春 .2002 年 10 月 14 日 . 中国计算机报

[2] 神坛之上的 CMM ——解析 CMM 和中国软件出处 . 行者无疆 . 有效软件工程实践论坛