平衡质量与效率的天平

时间:2022-09-13 09:37:28

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

对软件质量的理解

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

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

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

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

企业对质量和效益的权衡

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

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

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

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

软件质量的责任人

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

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

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

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

全面软件质量管理模型

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

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

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

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

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

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

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

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

制定质量计划

质量计划是软件质量管理的行动纲领,通常由项目经理和质量人员共同协商制定质量计划。如果机构有独立的质量人员,那么由质量人员起草《质量计划》,递交给项目经理和质量经理审批。如果机构没有独立的质量人员,那么项目经理兼任质量人员。

缺陷跟踪

人们在执行技术评审、软件测试、过程检查工作时,可能发现不少缺陷(或者其它质量问题)。如果没有缺陷跟踪工具的话,人们只好用纸张或文件去记录缺陷,不仅变更缺陷信息很麻烦,而且难以共享信息。缺陷跟踪工具就是帮助项目成员记录和跟踪缺陷用的,一般都有数据库支持,可以在局域网内运行。

技术评审

技术评审的目的是通过同行专家对工作成果的评审讨论,尽早地发现工作成果中的缺陷,并帮助开发人员及时消除缺陷,从而有效地提高产品的质量。

理论上讲,为了确保产品的质量,产品的所有工作成果都应当接受技术评审。现实中,为了节约时间,允许人们有选择地对工作成果进行技术评审。在制定质量计划的时候,应该确定技术评审计划。

技术评审是临时的团体活动,一般地,机构没有专职的技术评审人员,当需要技术评审的时候临时组织人员就可以了。如果机构有独立的质量人员,他应当参与重要的技术评审会议,这样既监督了技术评审,又加深对工作成果的了解。

过程检查(质量保证)

过程检查(质量保证)实质就是检查项目的“工作过程和工作成果”是否符合既定的规范。

符合规范的工作成果不见得就是高质量的,但是明显不符合规范的工作成果十有八九是质量不合格的。例如开发人员没有使用配置管理工具,开发人员没有写需求文档就开始编程等,这些问题可以在过程检查中发现。

过程检查的要点是:找出明显不符合规范的工作过程和工作成果,及时指导开发人员纠正错误,切勿吹毛求疵或者在无关痛痒的地方查来查去。

质量人员在执行过程检查的时候,如果发现问题,应该立即记录下来。最好使用问题跟踪工具(或者缺陷跟踪工具),有助于提高工作效率。

质量人员首先设法在项目内部解决已经发现的质量问题,与项目成员们协商,给出解决措施。在项目内难以解决的质量问题,由上级领导给出解决措施。

软件质量的定义

实际词典对质量的定义是:①典型的或本质的特征;②事物固有的或区别于其他事物的特征或本质;③优良或出色的程度。

CMM对质量的定义是:①一个系统、组件或过程符合特定需求的程度;②一个系统、组件或过程符合客户或用户的要求或期望的程度。

软件质量要素

(1)从商业角度讲,客户最关心的、能成为卖点的质量属性才是质量要素。

(2)从技术角度讲,对软件整体质量影响最大的那些质量属性才是质量要素。

对于一个特定的软件而言,我们首先判断什么是质量要素,才能给出提高质量的具体措施,而不是一股脑地想把所有的质量属性都做好,否则不仅做不好,还可能得不偿失。如果某些质量属性并不能产生显著的经济效益,我们可以忽略它们,把精力用在对经济效益贡献最大的质量要素上。简而言之,只有质量要素才值得开发人员下功夫去改善。

上一篇:信息安全:向一体化迈进 下一篇:Web2.0“潮涌”新安全