技术开发 频道

平衡质量与效率的天平

【IT168 技术文章】

     软件质量是被人“经常挂在嘴上”而不是“放在心上”的东西,人们往往在不了解什么是软件质量,没有搞清商业目标和质量目标之间关系的情况下,照搬CMM/CMMI或者ISO9001之类的标准,结果通常令人失望:软件质量没有明显提升,反而进度更加延误,人员更加劳累。

    对软件质量的理解

    在讲述软件质量管理方法之前,我们首先要搞清楚什么是软件质量。

    官方的定义很抽象,人们看了准会一脸迷惘。就让我们用“人的健康”来类比解释软件质量:古时候人们以为长得结实、饭量大就是健康,这显然是不科学的。

    现代人总是通过考察多方面的生理因素来判断是否健康,如测量身高、体重、心跳、血压、血液、体温等。如果上述因素都合格,那么表明这人是健康的。如果某个因素不合格,则表明此人在某个方面不健康,医生会对症下药。

    通过类比,我们这样理解软件质量:软件质量是许多质量属性的综合体现,各种质量属性反映了软件质量的方方面面。人们通过改善软件的各种质量属性,从而提高软件的整体质量(否则无从下手)。

    企业对质量和效益的权衡

    大凡软件工程教科书为了强调质量的重要性,总是要举一些历史上发生过的重大软件质量事故,例如航天飞机爆炸、核电站失事、爱国者导弹发生故障等等。这些事故的确不是危言耸听,而是给人们敲响了质量问题的警钟。

    学术界总是喜欢宣扬质量至上的理念,而忽视企业的商业利益,将质量目标凌驾于商业目标之上。我不能评判这种现象是好还是坏,但是的确误导了大量读者。企业的根本目标是为了获取尽可能多的利润,而不是生产完美无缺的产品。如果企业销售出去的软件的质量比较差,轻则挨骂,重则被退货甚至被索赔。

    因此为提高用户对产品的满意度,企业必须提高产品的质量。但是企业不可能为了追求完美的质量而不惜一切代价,当企业为提高质量所付出的代价超过销售收益时,这个产品已经没有商业价值了,还不如不开发。

    企业必须权衡质量、效率和成本,产品质量过低或者过高,都不利于企业获取利润。企业理想的质量目标不是“零缺陷”,而是恰好让广大用户满意,并且将提高质量所付出的代价控制在预算之内。

    软件质量的责任人

    当产品出现比较多的质量问题时,很多企业的领导人会责备测试人员或者质量保证人员没有把工作做好。真是冤枉他们了。

    谁对质量产生最大的影响?每个干活的人对他自己的工作成果产生最大的影响。

    谁对质量负最大的责任?谁的权力越大,他所负的质量责任就越大。

    质量管理人员和测试人员只是成天与质量打交道的人,但他们并不对产品质量产生最大的影响,也不该负最大的责任。

    全面软件质量管理模型

    质量的死对头是缺陷,缺陷是混在产品中人们不喜欢、不想要的东西,它对产品没有好处只有坏处。人们常说的Bug就是缺陷的形象比喻。显然,缺陷越多质量越低,缺陷越少质量越高,提高软件质量的基本手段是消除软件缺陷。让我们看看中国郎中治病的故事,能带给我们什么启发。

    在中国古代,有一家三兄弟全是郎中。其中有一人是名医,人们问他:“你们兄弟三人谁的医术最高?”

    他回答说:“我常用猛药给病危者医治,偶尔有些病危者被我救活,于是我的医术远近闻名并成了名医。我二哥通常在人们刚刚生病的时候马上就治愈他们,临近村庄的人说他是好郎中。我大哥不外出治病,他深知人们生病的原因,所以能够预防家里人生病,他的医术只有我们家里才知道。”

    上述故事里,郎中三兄弟是三种治病方式的代言人。与此类似,提高软件质量也有三种方式。

    老大治病的方式最高明,如果人们能够预防生病的话,那么没病就用不着看医生了。提高软件质量最好的办法是:在开发过程中有效地防止工作成果产生缺陷,将高质量内建于开发过程之中。主要措施是“不断地提高技术水平,不断地提高规范化水平”,其实就是练内功,通常称为“软件过程改进”。

    老二治病的方式是医院的模式,病人越早看病,就越早治好,治病的代价就越低。同理,在开发软件的时候,即使人们的技术水平很高,并且严格遵守规范,但是人非机器,总是会犯错误的,因此无法完全避免软件中的缺陷。企业广泛采用的方法是技术评审、软件测试和过程检查,能够及时找出并消除工作成果中的缺陷。

    老三治病的方式代价最高,只能是不得已而为之。可在现实之中,大多数软件企业都采用老三的方式来对付质量问题。典型现象是:在软件交付之前,没有及时消除缺陷。当软件交付给用户后,用着用着就出错了,赶紧请开发者来补救。可笑的是,当软件系统在用户那里出故障了,那些现场补救成功的人倒成了英雄,好心用户甚至还寄来感谢信。

    由此,我们提炼出全面软件质量管理的模型。软件质量管理的目的是通过分析质量要素和质量目标,制定合适的质量计划,整合技术评审、测试与纠错、质量保证、缺陷跟踪等手段,在开发过程之中内建高质量。项目中的所有人员几乎都参与了质量活动,只是介入的程度和时间不同而已。

0
相关文章