CMM对中国软件产业的重要性是什么?
CMM对中国软件产业是非常有价值的,它的重要性是它的那个笔者在“软件工程与软件能力成熟度模型SW-CMM”一文中提到的“合成的菜单与菜谱”的特性。
中国软件产业较年轻,专业人员也年轻,企业的数量也是近年来才增长起来的,没有大量通过长期实践积累起来的经验。不象外国公司能做到以老带新。大概许多企业还未能建立起一套健全的软件工程过程。在这种近乎一张白纸的情况下,充分地利用CMM和其他的软件工程过程管理与改进的方案,可以帮助企业迅速地学习与建立起一个软件工程过程,从而开始实施管理与改进。
利用别人已有的经验,取其对自己有用的部分,或作修改后采用,以此作为一个起点。然后,在实践中继续改进,加以创新。这应该是我们赶超世界水平的一种办法。
然而,在国内,许多人一谈到ISO9000,就必讲“质量认证”;一提到SW-CMM,就必讲“评级”。这是一个预示危险的信号,处理不好的话,引进国外软件工程过程技术的工作很有可能在一开始就走上弯路,严重损害中国软件产业的发展。花力气讨论清楚这个问题,比讨论具体的技术问题更为重要。
论“质量认证”
首先,必须讨论“质量认证”这个问题。(可能这个错误的术语原来指的是与ISO9000有关的“质量管理体系认证”,但是,讲成“质量认证”,会有误导性的影响。)
笔者认为,有人提出要以“质量体系认证”作为提高软件质量的突破口,把软件业推广ISO9000认证作为促进软件业发展的一个战略方向,是一种不妥的做法。把企业追求的目标定为“质量体系认证”,取代了实际的产品质量。在追求“质量体系认证”的时候,华而不实,甚至弄虚作假的“豆腐渣认证”、“两张皮”现象必然发生。结果将会是劳民伤财,损害了国家和企业的利益,也误导了用户。中国必须停止再吃这类的亏!
我们并不是完全不需要“质量体系认证”(对于CMM来说,是“能力等级评鉴”或“评级”),但那只适用于合同承包企业的选择或其他一些特殊的场合。搞一场“认证、评级运动”,弄不好会为软件产业带来一场灾难,因为我们错失了真正的目标。同时,中国的软件企业并不富裕,不一定能担负得起咨询与认证费用。或者,他们也还未有足够的人力与财力去全面推行CMM。一定要让他们有自由去选择与制定一种最适合各自具体情况的发展方案与时间表。
国内有学者指出,有些企业搞“质量体系认证”只是为了做个广告,作为一种市场竞争的手段。但是,为什么企业会有这种错误的认识呢?为什么通过了“质量体系认证”,就可以用作广告和竞争手段呢?追根寻源,这种错误的认识是来自广布于媒体的一些错误的提法,出现于各种形式的文章、讲话、报道、甚至是一些政策性的文件中。实际上是这些宣传误导了企业。如果没有把“质量体系认证”捧到不切实际的地位,与实际的产品质量混同起来,就没有人可以利用它大作广告。客户使用的是产品,而不是“认证证书”。我们的客户和市场还很年轻,辨识力还不是很强,因此,有机会在媒体上发表言论的人,千万不要忘记自己的责任。技术上的问题,是绝不能搞“炒作”的。
许多企业是有口难言,同行业的竞争对手都搞了“质量体系认证”,并且大作宣传,因此自己也被迫要搞。我们自己要问一问,为什么会形成这么一种风气呢?我们必须立即纠正任何误导与误解,明确指出,通过“质量体系认证”或达到CMM“等级评鉴”的某一级,只表明该企业有某一程度的潜在能力去开发和制造出高质量的软件产品。但并不等于它真正能做出好产品,或它的任何一个产品都是质量好的。
让我们看看几个质量方面的著名学者对质量所下的定义:
丹明(Deming):“质量由满足需求的能力组成。”
左兰(Juran):“质量就是适于使用。”
克罗斯比(Ceosby):“质量意味着符合基于用户需要而制定出来的要求。”
可见,“质量体系认证”完全不同于真正的产品质量,称之为“质量认证”,更是一种误导。
我们应当建立一种健康的标准:“在质量面前人人平等”。鼓励企业在开发和制造出高质量的产品,提供高质量的客户服务方面进行竞争。媒体要宣传这两种质量。在报道软件企业的过程管理与改进的成效时,谈的还应该是这两种质量,而绝不是把通过了“认证”或“评鉴”作为一种终极的成果来宣传。
这里必须注意到,一些从事咨询业务的公司有意夸大“认证”的作用。有些甚至严重到明知被评鉴的对象并未符合条件去开展“评级”,或是在评鉴过程中有意放水,以满足客户的要求。这种现象,一切有关的方面都要有清醒的头脑。这种咨询公司只求收入,他们是不管客户是否真正提高了软件能力的。通过这种手段获取“认证”或通过“评级”的企业,实际是在自欺欺人。以为是拿到了什么“通行证”,但没意识到,缺乏真正的质量,最终是要被“驱逐出境”的。
让我们仔细地考虑一下两个问题:
1、“质量体系认证”的结果可靠吗?
2、通过了“质量体系认证”之后,企业就一定能开发生产出高质量的软件产品了吗?没做“质量体系认证”,就不能开发生产出高质量的软件产品了吗?
答案都是:“不”。因为关键并不是“认证”不“认证”。
国内与国外都有有关的文章论述这些问题并且举出了具体的实例。因此,关键是企业内部的实际运作,“质量体系认证”保证不了什么。
这可以说是一个常识性的问题。在现实的生活中,同样是在学校中所有科目都考满分的学生,在工作中的表现会大不相同;有高学位的人不一定能出好成果;具有同样专业级别的人,工作实绩会有天壤之别。因此,片面地强调和依赖考核评鉴是非常危险的。
轻视与迷信SW-CMM都是错误的态度。应当把它作为参考资料,就象一本某间名饭店编的“菜谱大全”、一本某美术学院编的“油画技法”、或某出版社编的一本“写作教程”。如何理解参考资料的内容的灵魂,学到其中的基本原则与目标,并结合自己的实际加以灵活运用,才是我们应取的态度。
关键是什么?关键是企业实行过程管理与改进,真正达到按时、按预算地开发生产出高质量的软件产品。给用户拿出高质量的产品来!在这里,“认证”与“评鉴”都不是必须的。
“用友”、“金蝶”等企业在软件过程管理方面所取得的成绩,关键是由于领导层的重视和参与,致力于实质的内部过程改进。没有“认证”,他们同样会成功。
软件企业都希望能够生存与发展,都希望能建立过程管理与改进,以提高自身的能力,并不需要别人去迫。有人说,软件业推广ISO9000认证,应是以企业自愿为前提。但是,当相关的政策上有这么一些条文:“通过ISO9000体系认证的企业,优先...,优先...;政府优先采购通过ISO9000体系认证的企业的产品。”、“优先支持和推广通过质量认证企业的软件产品。”的时候,哪一个企业还可以“自愿”呢?从这么一些条文中,人们无法不得出这么一个结论:ISO9000体系认证,比实际的产品质量更重要!
笔者认为,要适当控制“认证”与“评级”的使用。只有在无法对最终产品的质量进行鉴定(例如,发出软件合同)的时候,才应用这类方法。
笔者建议,有关部门是否可以考虑成立一个软件产品质量鉴定系统,对上市的同类软件进行测试比较,评定分数,公布结果。测试人员可分为两类:专业工程师与产品用户。测试的项目可以各方预先商定。可从最简单的两点做起:1.说明书是否清晰。2.产品是否如实执行说明书中的各种功能。
举一个例子,硅谷这里有一间公司,专门作电路仿真器的评比。他们设计出了一系列的测试项目,用以比较各产品在不同平台上运行,对不同类型的电路进行仿真时的功能表现。他们的评比结果是很有权威的,成了用户选购产品的依据。而仿真器的制作厂家则不断努力改进产品,以期在下一次评比中有更好的表现。这间评比公司是附属于一个电子专业刊物的。他们向参加评比的厂家收取评比费用。我们可以用各种灵活的方式进行官办或民办的评比。
笔者使用的一个国产软件,在功能的实现上错误很多,自认为领先的核心技术竟带有违背一般常识的结果,甚至产品说明书与实际产品完全对不上号。借用一位国内同行的话:“简直不能相信这样的产品竞能够通过他们自己的质检关!”但我相信,这类公司是满有可能会花力气去通过“质量认证”的。
我们应该做的是,帮助企业认识实行过程管理与改进的重要性,向他们提供有关的知识与讯息,与他们一道解决遇到的困难,协助企业间交流经验,大力宣传企业由于实行过程管理与改进而取得的最终产品与用户服务质量及企业业绩的成果,以这些成果来进行竞争。有关的从业人员、专家学者与媒体在这些活动中可以大有作为,作出应有的贡献。
对在中国软件产业中应用CMM的一些建议
现在,让我们看看SW—CMM的如下三项用途:
1、用于软件过程的改进。(SPI,Software
Process Improvement)
帮助软件企业对其软件过程的改变进行计划、发展以及实施。
2、用于软件过程评估。(SPA,Software
Process Assessment)
在评估中,一组经过培训的软件专业人员确定出一个企业软件过程的状况,确定出该企业所面对的与软件过程有关的最迫切的所有问题,以及取得企业一级对软件过程改进的支持。(这项是为了实施上一项而进行的。)
3、软件能力评鉴。(SCE,Software
Capabili Evaluation)
在能力评价中,一组经过培训的专业人员鉴别出合格的软件合同承包者;或者是检查监视正用于软件制作的软件过程的状况。
上述的第三项,“软件能力评鉴”本来并不是软件工程研究所创造出SW—CMM时的用途目标之一。在SW—CMM用于帮助一些商业公司成功地改进他们的软件过程之后,美国空军电子系统指挥部要求软件工程研究所开发出一个办法来用于评鉴软件合同承包者;因此,在软件过程改进(SPI)这个用途之外,SW—CMM增加了软件能力评鉴(SCE)这个新用途。
这里必须要注意区分“软件过程评估”与“软件能力评鉴”本质上的不同。“过程评估”是企业内部在进行“软件过程改进”时用于摸清目前情况和确定需改进的目标而进行的。而“能力评鉴”则由软件合同的发出者用于鉴别和挑选出合格的合同承包者。很自然地,企业的有关人员会采取截然不同(!)的态度与对策去进行这两种评审。我国软件产业还很薄弱,没有可能提供很多有能力的“能力评鉴员”去承担这种挑战性很强的“能力评鉴”工作。若企图要一下子推行大量的“能力评鉴”活动,评鉴结果的可靠性必然低。
在CMM的“软件过程评估”与“软件能力评鉴”活动中,都会用到一份称为“软件过程成熟度提问单”的问卷。评审人员首先用这个问卷了解一个企业的软件工程过程的基本情况,然后以此为根据作出如何进行一步的调查(对于“软件能力评鉴”来说,是作进一步的“取证”),例如,与不同岗位的工作人员作面谈,查阅文件,或抽检实际过程中的数据资料记录等。
然而,如果对这份“软件过程成熟度提问单”作出如实的回答的话,我们就可以取得一个企业的软件过程成熟度的轮廓。回答这份提问单,大约只须花一个小时,有兴趣的同行们不仿试一试,来一个非正式的“软件过程评估”。尝试回答“软件过程成熟度提问单”的一个更大的得益是,问卷以一种最自然的方法把你引入CMM的世界,消除了CMM的神秘感。你会想:“啊,大概就是这么一回事。”
同行们,CMM只不过是我们手中可选用和可加以改造的一件工具,它并不是一只要来控制我们的怪物,让我们发挥各自的聪明才智,充分地利用好它,并加以创新。(当然,如果我们自己不能很好地控制这件工具的话,如果使用的方法不正确的话,CMM确实可以变成一只要来控制我们的怪物。)
对于在中国软件产业中应用CMM,笔者初步有如下建议:
a.专注于软件工程过程改进(借助于“软件过程评估”),除非需要,不要搞软件能力评鉴,不要去追求什么“认证”,“评级”,“登记”与“注册”。
b.软件过程管理与改进的唯一目的是:按时,按预算地开发制造高质量的软件产品。(质量的其中一点是:产品要适应市场的需要。若不能做到这个,一切都是徒劳。)
c.把CMM和其他的模型与标准作为参考,而不是生搬硬套。运用自己的专业判断力。
d.按照企业自身的特点、要求与条件去制订软件过程和选择实行改进的部分。
e.软件过程的建立与改进要有短、中、长期的目标,有缓急之分。不要一下子什么都想达到。不要一下子动大手术。不要作赌博式的全盘投入。在选择先做什么的时候,可有两方面的考虑:“最薄弱的环节”、“最易做到而又有显著收效”。
f.千万不要一开始就把目标定得过高。不必一下子去满足某一能力成熟度等级的所有目标,可以试行某些关键过程领域的一部分关键实践活动。要逐步取得经验。
g.企业上层领导要首先理解建立软件过程管理和改进的重要,并亲自领导这件工作。要保证过程管理的人员配备。企业上层领导的持之以恒的参与是成功的先决条件。
h.专业开发人员要全力支持与参与过程管理和改进。
i.国家政府的政策制订者要听取对于“认证”的正反两面的意见。不要以为可以简单地用推行“认证”、“评级”的方法去提高软件工业的能力。尽量只进行必要的、有限的“认证”与“评级”去选择合同承包企业。并且,发出合同之后一定要进行工程监督。
j.国家在财政上协助企业进行软件过程改进。比如,付给外部咨询机构的费用可以考虑给予部分或全部抵税等。
k.企业外的咨询机构一定要对受咨询企业的“过程评估”结果(商业机密)对外保密。只有这样做,才能使企业在内部的“过程评估”中,坦诚地暴露软件过程中存在的各种问题。从而制定出真正对症下药的过程改进的对策。
l.一个
企业或组织远远不能单凭一点点对SW—CMM的认识就作出是否“全面”引进应用SW—CMM的决定。那是一个非常重要的决定。全面引进应用SW—CMM所涉及的范围非常广,并且要求人力、财力与设备资源的投入。企业必须在对SW—CMM及有关的一切知识有透彻的理解之后,才考虑是否全面引进应用SW—CMM和如何引进应用SW—CMM的问题。