软件质量管理
第第 9 9 章章 软件质量管理软件质量管理 2 2 9.19.1 软件的质量属性和质量要素软件的质量属性和质量要素 . .2 2 9.29.2 商业目标决定质量目标商业目标决定质量目标 . .3 3 9.39.3 质量保证能够保证质量吗质量保证能够保证质量吗 . .4 4 9.49.4 质量人员的状况质量人员的状况 . .6 6 9.4.1 郁闷的质量人员 .6 9.4.2 路在何方 .7 9.4.3 赞美诗 .8 9.59.5 全面软件质量管理全面软件质量管理 9 9 9.5.1 模型 .9 9.5.2 质量人员的职责 10 9.5.3 制定质量计划 11 9.5.4 技术评审 13 9.5.5 软件测试 16 9.5.6 过程检查 16 9.5.7 缺陷跟踪工具 17 9.69.6 小结小结 1919 1 / 19 第第 9 9 章章 软件质量管理软件质量管理 软件质量管理是充满争论的话题。被人们奉为软件质量管理圣经的CMM 和 ISO9001 本章树立一个重要的理念:商业目标决定质量目标。提高软件质量的最终目的是为 似乎并不奏效,现实和理想之间的差距太大。 了赢利,而不是创造完美无缺的产品。因此对于普通商业软件而言,并不是“质量越高 越好” ,而是恰好让广大用户满意,并且将提高质量所付出的代价控制在预算之内。 经典软件工程教科书以及CMM 和 ISO9001 总是抛开商业目标谈质量管理, 本末倒置, 纸上谈兵,误导了大量读者,所以质量管理才变得那么艰辛。本章给出了一套实用主义 的“全面软件质量管理”方法。 质量人员在全面软件质量管理中发挥重要作用,本章探讨了质量人员的工作状况, 给他们一些声援,并提出了改善工作状况的建议。 9.19.1 软件的质量属性和质量要素软件的质量属性和质量要素 在讲述软件质量管理方法之前,我们首先要搞清楚什么是软件质量。 词典对质量的定义是:①典型的或本质的特征;②事物固有的或区别于其他事物 的特征或本质;③优良或出色的程度。 CMM 对质量的定义是:①一个系统、组件或过程符合特定需求的程度;②一个系 统、组件或过程符合客户或用户的要求或期望的程度。 上述定义很抽象,人们看了准会一脸迷惘。就让我们用“人的健康”来类比解释软 件质量吧。 古时候人们以为长得结实、饭量大就是健康,这显然是不科学的。现代人总是通过 考察多方面的生理因素来判断是否健康,如测量身高、体重、心跳、血压、血液、体温 等。如果上述因素都合格,那么表明这人是健康的。如果某个因素不合格,则表明此人 在某个方面不健康,医生会对症下药。 通过类比,我们这样理解软件质量: 软件质量是许多质量属性的综合体现,各种质量属性反映了软件质量的方方面面。软件质量是许多质量属性的综合体现,各种质量属性反映了软件质量的方方面面。 软件的质量属性很多,如正确性、精确性,健壮性、可靠性、容错性、性能、易用 性、安全性、可扩展性、可复用性、兼容性、可移植性、可测试性、可维护性、灵活性 等。表 9-1 是常见质量属性的描述,先让读者对软件质量属性有个初步的了解。 质量属性 正确性 描述 正确性是指软件按照需求正确执行任务的能力。“正确性”的语义涵盖了“精确 性” 。正确性无疑是第一重要的软件质量属性。 人们通过改善软件的各种质量属性,从而提高软件的整体质量(否则无从下手)人们通过改善软件的各种质量属性,从而提高软件的整体质量(否则无从下手)。。 2 / 19 健壮性健壮性是指在异常情况下,软件能够正常运行的能力。正确性与健壮性的区别 是:前者描述软件在需求X 围之内的行为,而后者描述软件在需求X 围之外的 行为。健壮性有两层含义:一是容错能力,二是恢复能力。 可靠性可靠性是一个与时间相关的属性,指的是在一定环境下,在一定的时间段内, 程序不出现故障的概率,因此是一个统计量,通常用平均无故障时间来衡量。 软件可靠性问题通常是由于设计中没有料到的异常和测试中没有暴露的代码缺 陷引起的。 性能性能通常是指软件的“时间—空间”效率,而不仅是指软件的运行速度。人们 总希望软件的运行速度高些,并且占用资源少些。 易用性 清晰性 易用性是指用户使用软件的容易程度。软件的易用性要让用户来评价。 清晰意味着工作成果易读、易理解,开发人员只有在自己思路清晰的时候才可 能写出让别人易读、易理解的程序和文档。 安全性安全性是指防止系统被非法入侵的能力,既属于技术问题又属于管理问题。一 般地,如果黑客为非法入侵花费的代价(考虑时间、费用、风险等因素)高于 得到的好处,那么这样的系统就可以认为是安全的。 可扩展性可扩展性反映了软件适应“变化”的能力。在软件开发过程中,“变化”是司空 见惯的事情,如需求、设计的变化,算法的改进、程序的变化等。可扩展性是 系统设计阶段重点考虑的质量属性。 兼容性兼容性是指两个或两个以上的软件相互交换信息的能力。兼容性的商业规则是: 弱者设法与强者兼容,否则无容身之地;强者应当避免被兼容,否则市场将被 瓜分。 可移植性软件的可移植性指的是软件不经修改或稍加修改就可以运行于不同软硬件环境 (CPU、OS 和编译器)的能力,主要体现为代码的可移植性。 表 9-1 常见质量属性的描述 什么是软件质量要素?它是指: (1)从技术角度讲,对软件整体质量影响最大的那些质量属性才是质量要素; (2)从商业角度讲,客户最关心的、能成为卖点的质量属性才是质量要素。 对于一个特定的软件而言,我们首先判断什么是质量要素,才能给出提高质量的具 体措施,而不是一股脑地想把所有的质量属性都做好,否则不仅做不好,还可能得不偿 失。 如果某些质量属性并不能产生显著的经济效益,我们可以忽略它们,把精力用在对如果某些质量属性并不能产生显著的经济效益,我们可以忽略它们,把精力用在对 经济效益贡献最大的质量要素上。简而言之,只有质量要素才值得开发人员下功夫去改经济效益贡献最大的质量要素上。简而言之,只有质量要素才值得开发人员下功夫去改 善。善。 9.29.2 商业目标决定质量目标商业目标决定质量目标 大凡软件工程教科书为了强调质量的重要性,总是要举一些历史上发生过的重大软 件质量事故,例如航天飞机爆炸、核电站失事、爱国者导弹发生故障等等。这些事故的 3 / 19 确不是危言耸听,给人们敲响了质量的警钟。 学术界总是喜欢宣扬质量至上的理念,而忽视企业的商业利益,将质量目标凌驾于 商业目标之上。我不能评判这种现象是好还是坏,但是的确误导了大量读者。许多软件 人员都有“质量越高越好”的观念,这是被教科书灌输的,而不是他自己领悟出来的。 质量的最高境界是什么?是尽善尽美,即“零缺陷”。 我曾在著作《高质量程序设计指南——C++/C 语言》中大肆宣扬了高质量程序设计 的理念,力求使C++程序达到“零缺陷”的质量目标。尽管此书得到了许多程序员的赞 同,但是我经过反思之后改变了质量观念,我要着重指出的是: 重视软件质量是应该的,但是“质量越高越好”并不是普适的真理。只有极少数软重视软件质量是应该的,但是“质量越高越好”并不是普适的真理。只有极少数软 件应该追求“零缺陷”件应该追求“零缺陷”,对绝大多数软件而言,商业目标决定了质量目标,而不该把质,对绝大多数软件而言,商业目