要过程改善,不要CMMI模型

来源:互联网 发布:凯美瑞双擎怎么样知乎 编辑:程序博客网 时间:2024/05/22 04:56
       v/:* {behavior:url(#default#VML);}o/:* {behavior:url(#default#VML);}w/:* {behavior:url(#default#VML);}.shape {behavior:url(#default#VML);}

CMMI相关的成熟度阶段

全世界通过CMMI5级的公司很多,但并不是每个通过的企业都能提供优秀的产品,都是市场的领先者。相反,全世界优秀的软件公司很多,几乎没有几家是通过CMMI5的。中国的软件企业缺的不是知识,缺的是实践。什么CMMI模型,什么CMMI级别,让我们开始真正的软件过程改善吧。

通过改善过程的品质,来改善过程产物的品质,是二战之后的戴明主义理论和实践的基本经验,得到了工业和服务业实践的佐证。从汽车工业和麦当劳的经验看,传统行业和服务业的过程和品质已经非常成熟,并且形成了工业工程的方法论体系。无论是麦当劳还是汽车制造,都可以达到一致的和可预测的品质。

相对而言,软件工业是非常年轻的行业,还远远没有成熟。

从1968年到1969年,在NATO(北大西洋公约组织)的会议上,学者提出了软件危机和软件工程的概念,标志着软件进入工业化时代,同时也意味着软件工业到现在只有不到50年的历史。在短短50年的历史中,可以说,软件自身技术和方法的发展是爆炸式的,软件的应用范围的扩张也是爆炸性的,社会大众对软件的期待也是爆炸性的。正因为如此,开发软件的方法论到今天都还没有稳定:Best practice不断出现,还无法达成广泛的共识;State of art不断更新,不断有新内容充实进来;IEEE和ACM联合制定的软件工程的知识体系还无法获得一致的认可。

软件行业还远远没有进入稳定和成熟的阶段。正如同CMM模型是TQM模型在软件行业上的映射,软件行业必须通过过程的改善来建立一致的和可预测的软件生产过程,提高软件品质,尽快使软件行业进入稳定和成熟阶段。

但软件工业与制造业和服务业又存在明显的区别,软件行业的过程改善具有与传统行业显著不同的特征。软件工业与传统工业相比最大的差异是:传统工业是围绕机器的,人处于辅助位置;软件工业是围绕人的,机器处于辅助位置。在制造业中,只要建立起机器系统,那么在必备的能源、润滑、温度控制的维护下,机器就可24小时连续运转,甚至可以达到无人值守的状态。简单地说,机器是可靠的,不受时间、空间和外界环境的影响。而在软件工业中,不同人的差别是很大的。即使同样的人在不同的时间、空间和外在环境的影响下,也会表现出完全不同的能力。同时,人不能长时间连续工作,需要休息和恢复,否则工作效率会降低。简单地说,人是不可靠的。因为人是不可靠的,必须通过团队的力量,借助流程的控制,来及时发现和弥补个人工作中的失误和错误。

Humphrey

形式上通过CMMI对于复杂而且须持续进行的过程改善没有什么实质性意义。

笔者觉得最须澄清的是:软件过程改善只是软件方法学的一个领域。除过程改善之外,软件方法学还有很多其他重要领域,比如系统工程、质量工程等。在过程改善领域,CMMI模型只是众多模型中的一个,除了CMMI模型之外,软件过程改善还有很多其他模型,比如Basili教授的GQM模型、SPICE模型、EFQMTickIT等。

软件方法学包含很多领域,在每个领域中都包含大量的经验、Knowhow以及为之奋斗的专家:比如在估算领域中最先提出COCOMO模型的Barry,在同行评审领域最先提出实证数据的Fagan,在度量领域的实践者Capers Jones,活跃在思想界的Weinberg,最先提出螺旋式开发过程模式的Boehm,永远热情洋溢的真正的咨询师Tom Glib。

这些依然活跃在世界各地的明星在不同领域奠定了软件方法学的基础,为软件方法学的完善而分享和贡献自己的思想和实践。

但很不幸的是,很多企业现在都倾向于将软件方法学等价于过程改善,将过程改善等价于CMMI,将CMMI等价于Humphrey

实际上HumphreyCMMI毫无关系。CMMI只是众多模型中的一个而已。CMMI是Humphrey的知识汇集,主要是IBM的知识汇集。全世界通过CMMI5的公司很多,并不是每个企业都能提供优秀产品,都是市场领先者。相反,全世界优秀的公司很多,几乎没有几家是通过CMMI5的。

CMMI

而在实际的竞争环境中,这些都是不得不考虑的问题。很多时候,用户需要的不是最高品质的产品,而是最快交付的、有吸引力的、质量尚可的产品。

CMMI

软件企业与其刻板地按照CMMI的要求来改善,不如秉承拿来主义,挑选自己认为有价值的内容进行改善。这就涉及到人员能力的培养,要培养优秀的过程改进人员,要培养过程改进人员的软件方法学的理论和知识,要培养软件过程改进人员的分析和判断能力。

形式上通过CMMI不难,因为CMMI提供了很多案例,照猫画虎,再加上咨询公司提供的模板集合,就可以在纸面上通过各级评估。但是企业要想理解CMMI中的Knowhow和根植这些Knowhow是需要时间的。

印度公司早在20世纪90年代就开始了比美国更早、更加积极地为软件企业导入CMMI模型的历程,通过CMM5的公司比美国还要多。可是,印度的软件实力超过美国了吗?当然没有。中国现在通过CMMI5的企业的数量很快就要超过印度了,那么中印之间的差距很快就消除了吗?当然不是。

同样,笔者觉得大家在谈论中国软件产业的时候往往有两个误区:谈软件必然涉及软件外包;中国软件不如印度,原因是我们没有“国际通行”的CMMI级别。

大家谈软件必谈软件外包,接着就是中国软件不如印度。那我们就来仔细对比一下中印的软件差距。首先,中国的软件产业并不比印度差。中国国内的软件市场要远远大于印度市场,唯一差的是软件外包出口。可是,软件外包出口差的首要原因不是品质和过程不行,而是起步晚,语言有障碍,经验少。

首先,印度软件起步早。印度的软件起步是在20世纪90年代初解决千年虫问题时。千年虫问题的解决现在想想其实很简单,就是Reverse Engineering,阅读代码,寻找出与时间定义相关的代码,并修改定义,然后进行全面的回归测试。所谓的Reverse Engineering很多时候也就是靠直接看代码来找Bug。这可是无聊的活,美国人不愿干,全交给印度人了。印度人兢兢业业地看代码,修改,测试,也就开始了印度和美国软件业合作的起源。

而当时中国正进行世界历史上最大规模的纺织业等初级制造业的外包转移。

因此,印度软件产业起步领先中国10年,并因此积累了经验和市场。随着经验的积累,品质和过程的改善和标准化会自然成为内在的动力。经验是要靠时间积累的,品质改善是靠内在需求,而不是靠CMMI。

其次,印度人有语言优势。我们在说软件外包的时候,通常都以为是在说软件开发,实际上软件外包涵盖的概念太广泛了,远远不局限于软件开发,包括整个IT软件和服务的各个环节。

我们来看看印度面向北美的IT软件和服务业外包。比如,呼叫中心是负责解决客户投诉和技术支持的。美国有一些大公司为了节省成本,将呼叫中心转移到印度,培训一下当地技术人员的口音,尽量像北美的通用口音,就可以接电话了,而北美消费者完全不知道接电话的人实际上在遥远的印度。

再比如BPOBusiness Process Outsourcing),将业务流程的某个环节外包。如印度某著名IT公司帮助美国高盛公司进行数据维护,将美国每天交易的数据在后台进行统计、分类、计算、备份等处理,这样美国人就不需要每天晚上紧张地处理数据,并在天亮之前提供报表给第二天的交易员了。最近的例子是,英国中小学期末考试,英国人居然也外包给印度人去批改、统计、排序、汇总,实在是将外包做到了极至。

这里面很多是语言方面的原因,是与CMMI级别无关的。中国人后天再努力,英语水平也很难达到能为北美人解决售后问题的程度;同样英国人也不会放心地把中小学生的作文题交给中国人批改的。

10

最后,因为经验积累多了,为了进一步提高竞争力,印度人在经历了上述价值链低端的工作后,开始向高端前进,比如直接为最终客户开发大型的应用系统,构建自己独立的软件产品和解决方案等。就如同,中国的纺织业从单纯代工开始过渡到面料设计、样式设计、品牌经营的阶段一样。

中国的华为等公司已经是在价值链高端占据了一席之地的优秀企业了,又为何一定要将中国的软件前途等同于印度的IT服务呢?华为的5万员工创造的销售额要好几倍于Infosys的5万员工。我们为何对此视而不见呢?与其用我们的弱点去和别人的强项竞争,不如换一条道路,多多发挥我们的强项。比如,我们可以着力于产品开发,这个是对语言依赖最低的工作内容。

软件外包不是软件行业的唯一领域,软件外包也无法支撑起中国信息业发展的脊梁。研发外包是分享不到商业利润的,就如同中国的制造业外包一样,与其多一个Infosys,还不如多一个华为。

过于强调过程,会使过程刻板化,将创造性的软件开发工程庸俗化为机械性的事务性工作。理论上,建筑工人对建筑规则和过程的遵守似乎远远高于软件行业的软件工程师。如果过程真的那么神奇的话,何不让建筑工人来从事软件开发,或许更能胜任呢。

与过程相比,优秀的人才是更加重要的要素。二级的过程加上五级的人才肯定会战胜五级的过程和二级的人才。Humphrey搞了CMM之后,发现人的重要性,又搞起了People CMM,后来自己一个人搞PSP和TSP。

10

所谓历史都是相似的。印度在20世纪90年代同样产生了CMM的热潮,大家纷纷将CMM作为竞争手段。2000年中国开始CMM和CMMI的第一轮热潮。第一轮热潮并不会真正带来软件过程的改善和软件品质的提高,而是普及了软件方法学的知识,让人们普遍达成共识:品质很重要并且是可以通过过程来改善的。

如果没有实际问题发生,通常人们是不会重视品质问题的。由于品质问题的产生,中国制造行业开始进入品质竞争的时代。那么,中国的软件产业真正进入了需要以品质为前提进行竞争的时代了吗?在某些关键行业,比如电信、电力、银行、证券等,由于软件系统支撑着人们日常生活的每个环节,品质成为不可忽视的要素。但在其他行业,比如在线服务、在线游戏等,或许还要再等等。

大家意识到品质确实很重要之后,开始挽起袖子,真正开始改善品质。大家会重新翻开CMMI的书籍,审视软件工程方法学的各个具体领域,摒弃那些表面无用的模板和规章,制定真正适合自己的开发流程和控制手段。品质就像走钢丝,要时刻小心。可是,有时即使很小心,也会掉下来。按照Cusumano的结论,日本企业的品质是世界级别的,是美国的10倍。可是在2006年,东京证券交易系统还是意外地死机了。

中国的软件企业缺的不是知识,缺的是实践。什么CMMI模型,什么CMMI级别,让我们开始真正的软件过程改善吧。

CMMI认证要因地制宜

有一句非常有名的话:所有模型都是错误的,只有部分是正确的(All models are wrong some models are right)。也就是说,我们不能100%地将自己企业的未来和命运托付给某个咨询公司和某个模型,然后就安心地等待着奇迹的发生。

对于软件企业来说,由于软件方法学还没有完善,对于众多缺乏经验的软件企业而言,它们面对软件工程领域的理论和实践往往无所适从,不知道该如何把这些理论和实践应用到企业的过程改善中去。CMM/CMMI模型便应运而生。

事实上,CMMI模型及相关的框架是对软件工程知识的整理。CMMI模型的价值在于根据大量业界的经验,特别是以IBM为代表的传统公司的经验,向缺乏经验的软件公司提供一个分阶段导入软件方法学理论和实践的过程改进的统一的路线图,即从一级到五级的改善路线图。

CMMI模型期待软件企业首先建立基本的项目管理过程(CMMI二级),然后统一化为组织范围的标准过程(CMMI三级),再进行定量化的记录和控制(CMMI四级),并在此基础上进行持续和长期的改善(CMMI五级)。这样的Story对于众多迷茫的软件企业来说当然是非常有效的,并且为它们指明了努力的方向。

但是如果软件企业教条地听信CMMI模型而完全放弃了自身对软件生产过程改善的理解和辨别的话,同样也是非常危险的事情。因为CMMI模型并没有考虑到各个企业的实际情况,而是提供了一个统一的路线图。事实上,我们无法想象全世界的所有软件企业在改善自身流程时都遵循同样的过程,而试图成为一个模子出来的企业。

可见,软件企业不能为了通过CMMI认证而去认证,要从自身情况出发,以改善过程为终极目的。