技术开发 频道

要过程改善,不要CMMI模型

    3.CMMI不是中印软件差距的根源;抓住自身优势,进行开发实践积累和内在的全面改善是企业的致胜之策

    印度导入了CMM模型,并且在世界上占据了最多的CMM5的企业。随即在国务院的首先倡导下,中国各级开始了大力支持企业导入CMM/CMMI模型进行过程改善,并提供高额的资金补助。

    可是,按照CMMI模型的设想,导入CMMI进行过程改善,是可以提高品质降低成本的,是有受益的。既然有受益,为什么企业还需要政府的资助?这几年看来,基本上,市场的敲门砖成为一些中等以上公司的需求,赚政府补贴是一些小公司的需求,追求品质是很少一部分公司的需求。

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

    首先,印度软件起步早。印度的软件起步是在90年代初期,特别是在解决“千年虫问题”上,印度人为全世界做出了贡献。千年虫问题的解决方法现在想想其实很简单,相当于是reverse Engineering,阅读代码,寻找出与时间定义相关的代码,并修改定义;然后进行全面的回归测试。软件业的一个不可思议但是很普遍的现象是:软件开发的文档实际上是不完备或者与实际代码不一致。因此很多时候所谓的reverse engineering就是靠直接看代码来找bug。这可是无聊的活,美国人不愿意干,全部交给印度人干了。印度人兢兢业业地看代码,修改,测试,也就开始了印度和美国软件业合作的起源。

    而当时中国在干什么?我记得非常清楚的是,中国的媒体一方面在使用非常浅显的词汇来让大家理解千年虫的含义,一方面在展开各种奇妙的想象,万一发生千年虫问题,世界会变成什么样。可是,没有一个媒体在问:我们该怎么办。当然在同时,中国开始了世界历史上最大规模的纺织业等初级制造业的外包转移,成为世界工厂。

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

    就如同人的成长需要时间,拔苗助长,贴成人标签是没有用的。中国现在的CMMI已经是世界第二多,但是软件行业和印度的差距仍然是那么多。我们需要的是时间和经验,不是CMMI资格。

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

    我们来看看印度面向北美的IT软件和服务产业。

    比如呼叫中心(Call Center)负责解决客户投诉和技术支持的。美国有一些大公司为了节省成本,将呼叫中心转移到印度,培训一下当地技术人员的英语口音,尽量像一些北美的通用口音,就可以接电话了,而北美的消费者完全不知道接电话的人实际上人在遥远的印度。

    在上海的微软全球技术支持中心,在某种意义上就是这样的呼叫中心,却因为高薪(相对于美国就成了毫无趣味的低薪工作)戏剧化地吸引了中国很多很有天分的软件工程师。

    再比如BPO(Business Process Outsourcing),将业务流程的某个环节外包。比如印度某著名IT公司帮助美国高盛公司进行数据维护,将每天美国交易的数据在后台进行统计,分类,计算,备份等处理,这样美国人就需要每天晚上紧张地处理数据,并在天亮之前提供报表给第二天的交易员了。

    最近的例子是,英国中小学期末考试,英国人居然也外包给印度人去批改,统计,排序,汇总,实在是做到了极至。

    这里面很多工作是存在语言的壁垒的,是和CMMI的级别没有关系的。中国无论怎么努力,无论过程多么完美,都无法赶上印度的。中国人的英语后天再努力,我估计也很难达到为能北美人解决售后问题的程度;同样英国人也不会放心把中小学生的作文题交给中国人批改的。

    相反,由于东亚语言的相近,现在中国出现了很多面向日本的呼叫中心和BPO业务,因为同样的理由,中日的语言太相近,文化也太相近了。

    印度的公司说他们很多的工作实际上是“Body Shopping”,即基本上是代替了美国的一些低薪的IT服务业工作。由于互联网的存在,使得全世界成为一个平坦的村落(The World Is Flat),使得很多工作可以通过互联网传递到世界的任何角落去完成。

    十年的不同道路的发展,印度人占据了IT软件和服务业的领先地位,中国人占据了服装和鞋帽等初级制造业的领先地位。中国到今天也没有产生世界级的服装设计和品牌一样,印度到今天也没有产生世界级的独立软件产品(Packaged Software)。

    印度公司在90年代为了“吹嘘”自己的实力,比美国更早更积极地导入CMM模型,使得通过CMM5的公司比美国还多。可是,这意味这印度的软件实力超过了美国了么?当然不是。中国现在大干快上,浑水摸鱼地搞CMMI,很快CMMI5的数量就要超过印度了,可是我们之间的差距很快就没有了么?当然不是。

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

    中国的华为等公司已经是在价值链高端占据了一席之地的优秀企业了,又为何一定要将中国的软件前途等同于印度的IT服务呢?华为的5万员工创造的销售额要好几倍于Infosys的5万员工。我们为何对此视而不见呢?

    与其用我们的弱点去和别人的强项竞争,不如换一条道路,多多发挥我们的强项。比如,我们可以着力于产品开发,这个是对语言依赖最低的工作内容。

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

    对于面向市场进行真刀真枪竞争的技术型公司而言,基本的项目管理(二级)是最重要的,其次是三级,四级和五级依次递减。这也是非常符合通常的边界效益递减的原则。

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

    与过程相比,优秀的人才是更加重要的要素。二级的过程加上五级的人才肯定会战胜五级的过程和二级的人才。Humphrey搞了CMM之后,发现人的重要性,又搞起了People CMM,后来自己一个人搞PSP和TSP,也就是说如果不把执行过程的人训练好,再好的过程也是无法实施的。

    有些人说中国的工程师喜欢用指针等技术高但是容易错的功能,印度的工程师用数组这样技术低不容易错的功能。很可惜,在我的工作经历中,没有发现这样的差别。即使有一些使用方法的差别,与其说是CMM的结果,不如说是经验和习惯的结果。而这是所有行业都面临的。

    十年前中国和印度在不同的方向上开始起步。到了今天,中国可以有一万人的纺织工场,印度无法有这样的工场;同样,印度可以有一万人的软件工场,而中国无法有这样的软件工场。

    中国和印度的软件出口差距不是能力而是经验和时间。再过十年,印度会有一万人的纺织工场,中国也会有一万人的软件工场。在十年前中国遍地都是几十个人的软件工场,中国数千人的软件工场已经开始出现了。这不是主要因为CMM,而是因为经验的积累。CMM作为一个外在因素,起到了一定的促进作用,但不是决定因素。

    4,第一轮的热潮之后

    所谓历史都是相似的。印度在90年代同样产生了CMM的热潮,大家纷纷将CMM作为竞争手段。很快大家都是CMM5级了,竞争什么呢?于是再找模型,比如People-CMM,ITIL,six sigma等等。

    从2000年开始的CMM和CMMI热潮,在政府补助金的推波助澜之下,第一轮的CMMI热潮迅速沸腾起来。

    第一轮的热潮的价值并不会真正带来软件过程的改善和软件品质的提高,而是普及了软件方法学的知识,让人们普遍达成共识:品质很重要,并且品质是可以通过过程来改善的。

    改善品质的动力来自何处?

    商品短缺的时代,商家和市场首先考虑的是商品是否充足,不是品质;只有进入商品过剩时代,品质才可能成为商家和市场首先考虑的课题之一。

    没有实际问题的发生,人们是不会重视品质的。

    Crosby说Quality Is Free,这是说由于低质导致的损失超过了强化品质的成本,因此要“第一次就把事情做对”(Do Things Right The First Time)。可是,如果低质并没有损失呢?如果客户不关心品质,而关心交付日期,功能创新呢?

    因为食品问题死了人,毒害死了世界人民的猫狗,在地球村里丢了人,没人买我们的食品了,所以我们才会真正重视食品的品质。因为饺子吃了发现有毒,却找不到下毒的环节,人们才开始重视过程。

    由于品质问题的产生,中国很多制造行业开始进入了品质竞争的时代。

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

    大家意识到品质确实很重要之后,然后开始挽起袖子,真正地开始改善品质。大家会重新翻开CMMI的书籍,审视软件工程方法学的各个具体领域,摒弃那些表面无用的模板和规章,制定真正适合自己的开发流程和控制手段。

    品质就像走钢丝,要时刻小心;可是,有时即使很小心了,也会掉下来。按照Cusumano的结论,日本企业的品质是世界级别的,是美国的十倍。可是即使这么小心,在2006年的时候,东京证券交易系统还是意外死机了。

    CMMI是软件工程知识的整理。软件工程课程是大学计算机系的主要课程,大学没有认真学,现在再来重新学习一遍,就认真了么?郑人杰老师在80年代就翻译了Myers的《软件测试技术》,每本只卖2角钱。可是那个时候我们连什么是软件都不知道,更不要说在实际工作中进行软件测试了。

    我们缺的不是知识,缺的是实践。

    去他的,什么CMMI模型,什么CMMI级别。

    让我们开始真正的软件过程改善吧。

0
相关文章