软件质量管理.docx
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《软件质量管理.docx》由会员分享,可在线阅读,更多相关《软件质量管理.docx(18页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第9章 软件质量管理29.1 软件的质量属性和质量要素29.2 商业目标决定质量目标39.3 质量保证能够保证质量吗49.4 质量人员的状况69.4.1 郁闷的质量人员69.4.2 路在何方79.4.3 赞美诗89.5 全面软件质量管理99.5.1 模型99.5.2 质量人员的职责109.5.3 制定质量计划119.5.4 技术评审139.5.5 软件测试169.5.6 过程检查169.5.7 缺陷跟踪工具179.6 小结19第9章 软件质量管理软件质量管理是充满争论的话题。被人们奉为软件质量管理圣经的CMM和ISO9001似乎并不奏效,现实和理想之间的差距太大。本章树立一个重要的理念:商业目
2、标决定质量目标。提高软件质量的最终目的是为了赢利,而不是创造完美无缺的产品。因此对于普通商业软件而言,并不是“质量越高越好”,而是恰好让广大用户满意,并且将提高质量所付出的代价控制在预算之内。经典软件工程教科书以及CMM和ISO9001总是抛开商业目标谈质量管理,本末倒置,纸上谈兵,误导了大量读者,所以质量管理才变得那么艰辛。本章给出了一套实用主义的“全面软件质量管理”方法。质量人员在全面软件质量管理中发挥重要作用,本章探讨了质量人员的工作状况,给他们一些声援,并提出了改善工作状况的建议。9.1 软件的质量属性和质量要素在讲述软件质量管理方法之前,我们首先要搞清楚什么是软件质量。词典对质量的定
3、义是: 典型的或本质的特征; 事物固有的或区别于其他事物的特征或本质; 优良或出色的程度。CMM对质量的定义是: 一个系统、组件或过程符合特定需求的程度; 一个系统、组件或过程符合客户或用户的要求或期望的程度。上述定义很抽象,人们看了准会一脸迷惘。就让我们用“人的健康”来类比解释软件质量吧。古时候人们以为长得结实、饭量大就是健康,这显然是不科学的。现代人总是通过考察多方面的生理因素来判断是否健康,如测量身高、体重、心跳、血压、血液、体温等。如果上述因素都合格,那么表明这人是健康的。如果某个因素不合格,则表明此人在某个方面不健康,医生会对症下药。通过类比,我们这样理解软件质量: 软件质量是许多质
4、量属性的综合体现,各种质量属性反映了软件质量的方方面面。人们通过改善软件的各种质量属性,从而提高软件的整体质量(否则无从下手)。软件的质量属性很多,如正确性、精确性,健壮性、可靠性、容错性、性能、易用性、安全性、可扩展性、可复用性、兼容性、可移植性、可测试性、可维护性、灵活性等。表9-1是常见质量属性的描述,先让读者对软件质量属性有个初步的了解。质量属性描述正确性正确性是指软件按照需求正确执行任务的能力。“正确性”的语义涵盖了“精确性”。正确性无疑是第一重要的软件质量属性。健壮性健壮性是指在异常情况下,软件能够正常运行的能力。正确性与健壮性的区别是:前者描述软件在需求范围之内的行为,而后者描述
5、软件在需求范围之外的行为。健壮性有两层含义:一是容错能力,二是恢复能力。可靠性可靠性是一个与时间相关的属性,指的是在一定环境下,在一定的时间段内,程序不出现故障的概率,因此是一个统计量,通常用平均无故障时间来衡量。软件可靠性问题通常是由于设计中没有料到的异常和测试中没有暴露的代码缺陷引起的。性能性能通常是指软件的“时间空间”效率,而不仅是指软件的运行速度。人们总希望软件的运行速度高些,并且占用资源少些。易用性易用性是指用户使用软件的容易程度。软件的易用性要让用户来评价。清晰性清晰意味着工作成果易读、易理解,开发人员只有在自己思路清晰的时候才可能写出让别人易读、易理解的程序和文档。安全性安全性是
6、指防止系统被非法入侵的能力,既属于技术问题又属于管理问题。一般地,如果黑客为非法入侵花费的代价(考虑时间、费用、风险等因素)高于得到的好处,那么这样的系统就可以认为是安全的。可扩展性可扩展性反映了软件适应“变化”的能力。在软件开发过程中,“变化”是司空见惯的事情,如需求、设计的变化,算法的改进、程序的变化等。可扩展性是系统设计阶段重点考虑的质量属性。兼容性兼容性是指两个或两个以上的软件相互交换信息的能力。兼容性的商业规则是:弱者设法与强者兼容,否则无容身之地;强者应当避免被兼容,否则市场将被瓜分。可移植性软件的可移植性指的是软件不经修改或稍加修改就可以运行于不同软硬件环境(CPU、OS和编译器
7、)的能力,主要体现为代码的可移植性。表9-1 常见质量属性的描述什么是软件质量要素?它是指:(1)从技术角度讲,对软件整体质量影响最大的那些质量属性才是质量要素;(2)从商业角度讲,客户最关心的、能成为卖点的质量属性才是质量要素。对于一个特定的软件而言,我们首先判断什么是质量要素,才能给出提高质量的具体措施,而不是一股脑地想把所有的质量属性都做好,否则不仅做不好,还可能得不偿失。如果某些质量属性并不能产生显著的经济效益,我们可以忽略它们,把精力用在对经济效益贡献最大的质量要素上。简而言之,只有质量要素才值得开发人员下功夫去改善。9.2 商业目标决定质量目标大凡软件工程教科书为了强调质量的重要性
8、,总是要举一些历史上发生过的重大软件质量事故,例如航天飞机爆炸、核电站失事、爱国者导弹发生故障等等。这些事故的确不是危言耸听,给人们敲响了质量的警钟。学术界总是喜欢宣扬质量至上的理念,而忽视企业的商业利益,将质量目标凌驾于商业目标之上。我不能评判这种现象是好还是坏,但是的确误导了大量读者。许多软件人员都有“质量越高越好”的观念,这是被教科书灌输的,而不是他自己领悟出来的。质量的最高境界是什么?是尽善尽美,即“零缺陷”。我曾在著作高质量程序设计指南C+/C语言中大肆宣扬了高质量程序设计的理念,力求使C+程序达到“零缺陷”的质量目标。尽管此书得到了许多程序员的赞同,但是我经过反思之后改变了质量观念
9、,我要着重指出的是:重视软件质量是应该的,但是“质量越高越好”并不是普适的真理。只有极少数软件应该追求“零缺陷”,对绝大多数软件而言,商业目标决定了质量目标,而不该把质量目标凌驾于商业目标之上。航空航天等系统对质量要求极高,任何缺陷都有可能导致机毁人亡,所以人们不惜一切代价去消除缺陷。在发射航天器之前,只要发现任何异常,就会立即取消发射指令,直到异常被消除为止。前苏联做得最过分,许多重大武器系统的负责人都签了生死状,系统研制成功则获得英雄勋章,失败则被枪毙。在这种压力下没有人敢对质量有一丝松懈。上述严格系统毕竟是少数,绝大多数普通软件的缺陷并不会造成机毁人亡这样的重大损失,否则没有人敢从事软件
10、开发了。在日常工作中,我们接触过的软件几乎都是有缺陷的,即便是软件业老大Microsoft,它的软件产品也经常出错甚至导致死机,人们骂几句后还会照样使用有缺陷的软件。企业的根本目标是为了获取尽可能多的利润,而不是生产完美无缺的产品。如果企业销售出去的软件的质量比较差,轻则挨骂,重则被退货甚至被索赔,因此为了提高用户对产品的满意度,企业必须提高产品的质量。但是企业不可能为了追求完美的质量而不惜一切代价,当企业为提高质量所付出的代价超过销售收益时,这个产品已经没有商业价值了,还不如不开发。企业必须权衡质量、效率和成本,产品质量太低了或者太高了,都不利于企业获取利润。企业理想的质量目标不是“零缺陷”
11、,而是恰好让广大用户满意,并且将提高质量所付出的代价控制在预算之内。9.3 质量保证能够保证质量吗质量保证(Quality Assurance, QA)是CMM和ISO9001最为推崇的改善软件质量的方法。基于我亲身实践和调查研究,我敢冒天下之大不讳说一句:质量保证并不能保证质量,它是个美丽的谎言。CMM对软件质量保证是这样描述的:软件质量保证的目的是为管理者提供有关软件过程和产品的适当的可视性。它包括评审和审核软件产品及其活动,以验证其是否遵守既定的规程和标准,并向有关负责人汇报评审和审核的结果。简而言之,质量保证活动就是检查软件项目的“工作过程和工作成果”是否符合既定的规范。如此简单的活动
12、为什么被冠以“质量保证”这等份量的术语呢?没有历史典故,经我考究,猜想是源于一个天真的假设:过程质量与产品质量存在某种程度的因果关系,通常“好的过程”产生“好的产品”,而“差的过程”将产生“差的产品”。假设企业已经制定了软件过程规范,如果质量保证人员发现某些项目的“工作过程以及工作成果”不符合既定的规范,那么马上可以断定产品存在缺陷。反之,如果质量保证人员没有发现不符合既定规范的东西,那么也可以断定产品是合格的。基于上述假设,质量保证人员即使不是技术专家,他也能够客观地检查和监控产品的质量。这是质量保证方法吸引人的一面。但是符合既定规范的东西并不意味着质量一定合格,仅靠规范无法识别出产品中可能
13、存在的大量缺陷。例如,即使程序员们都按照统一的编程规范来编写程序,但是编程新手的代码可能错误百出,而高手的代码则无可挑剔,可是质量保证这种方法根本无法识别新手和高手的差距。质量保证的技术含量太低了,只能检查出肤浅的缺陷,不能对付有技术难度的缺陷。所以单独的“质量保证”其实并不能“保证质量”。有个软件公司过了CMM3级,其质量保证人员给我发了一个email: 我很迷茫,很想找一个人聊聊,希望你能给我点主意,化解我心中的谜团。昨天我们公司拿到了CMM3的证书,但是我一点都高兴不起来。公司宣称,我们的软件质量大大提高了,但是我却没有信心。我们的过程执行得很好,但是我觉得并没有在很大程度上改善产品的质
14、量。今天还有一个项目经理跟我诉苦:前一阶段大家都忙于执行过程,但是他的产品质量令人很不满意,尤其是测试做的很不到位。我是这个项目的SQA,所以我很理解他,但是我帮不上他的忙。因为他们的过程执行得很好,这个项目可是通过CMM3级正式评估了的。当然,执行CMM有不少好处,比如文档全面完整了,项目管理的可视性提高了。但是对于我们公司而言,它并没有在根本上提高我们公司的软件能力。比如概要设计,开发人员根本就不知道用来干吗的,怎么能指望他们写出高质量的概要设计说明书出来。而在做技术评审的时候,他们很少能找出逻辑性的错误,只能发现一些诸如错别字之类的小错误。我们几乎每一个配置项都要经过评审,但是大部分评审
15、都只能发现一些无关痛痒的问题。公司已经通过CMM3级了,我认为过程执行得很好了,可是软件质量仍然比较差。这是怎么回事啊,你觉得原因在哪里?这个email很有代表性,它反映了一个共性问题:公司按照CMM3级的要求执行,而且质量人员也认为执行过程符合既定的规范,但是软件产品的质量仍然低下。所以我说“质量保证并不能保证质量”,这句话一点都不过分。质量保证对于保证质量而言只是必要的手段,而不是充分的手段。质量保证这个术语名不副实,含义模糊,我强烈建议将“质量保证”改名为“过程检查”,免得误导国内企业。那么怎么才能保证软件的质量呢?请阅读本章第5节“全面软件质量管理”。9.4 质量人员的状况9.4.1
16、郁闷的质量人员由于工作关系,我和不少软件机构的质量人员打过交道。我觉得有必要反映一下质量人员的状况,给他们一些声援。接上个email,那位质量人员继续向我诉说:我现在觉得很郁闷,CMM评估前还有目标,评估完了冷静下来却觉得效果很差,很没劲。项目经理向我诉苦,他们过程执行的很好,但是对产品质量很不满意,我却无能为力,我这个QA还有什么用处啊!所以我现在干活没有动力,因为不能产生效益,做再多的工作也觉得是白干。而且我现在手头有5个项目要跟踪,还不包括一些整理培训记录的杂活,我觉得自己连工人也不如。我有一些很好的想法却无处发挥,所以我很迷茫,很矛盾地考虑去留问题。类似的email我大概收到十来个。在
17、汉语字典里找不到“郁闷”这个词,它是现代人发明的。郁闷的滋味各色各样,只有正在郁闷的人感受最真切。我发现在软件职业里,质量人员是最郁闷的一族。郁闷的共同特征有:(1)在执行质量保证活动时,经常受别人的气,真是吃力不讨好。(2)如果项目取得成功,主要功劳都被项目主管霸占了,领导们至多会给质量人员一些口头上的感谢。领导们嘴上重视产品的质量,但是内心并不重视质量人员。(3)质量人员没有实质性的权力,没有成就感,但是却对质量负有最多的责任。(4)待遇一般,看不到升迁的机会,没有盼头,要么成为打杂的,要么另寻出路。在企业里,职位是有高低之分的,但是人人都是平等的。郁闷的滋味是很不好受的,为啥老是让质量人
18、员郁闷呢,这显然很不公平。我曾经做过伤害质量人员的事情,现在良心发现,在这里道个歉,并声援他们。两年前,我在一个软件事业部负责推广软件工程和CMM。公司领导比较重视,给我6个全职人员,有充足的资金,声势浩大,那时我比较自负,很少采用协商的方式解决纠纷。公司有专门的质量部门,定期到各事业部检查质量。由于我们事业部采用的是CMM,而质量部门采用的是ISO9000标准,我不懂他的,他不懂我的,所以产生了纠纷。事业部的各级领导都有销售压力,用他们的话说是:没有时间陪质量部门的人“玩”,大家都有“对付”而不是“配合”质量部门的心态。有一次质量部门要检查某个重点项目的文档,偏偏这个项目是保密的,一方要检查
19、一方要保密,双方弄僵了。在事业部内部开会的时候,这个重点项目的负责人大发脾气说:我最烦那些人,看么看不懂,还老是来检查,别说项目是保密的,就是不保密的我也不给看。大家火得很热烈,我就火上加油给质量部门发了email,大致意思是“你们搞ISO9000的人不懂软件工程,不懂CMM,不懂得软件开发却老是来检查软件项目,对本事业部只有干扰而没有帮助”,email言词激烈。我把email发给一位和我打交道比较多的质量部人员,并抄送给本事业部所有人员,给本部门大大地出了一口气。过了几天,我收到质量部同事的email,足足有两页纸。有几句话我记忆很深刻:收到你的email时我十分震惊。依你的身份,当着事业部
20、百余名员工的面,把工作上的怨气发在我这个无辜的人的头上,我实在难以接受。提高产品质量是我们的工作职责,我们并不想和任何人争吵。观念的差异可以通过交流、协商的方式来解决,我不强求你接受任何东西,但真心希望能对你有所触动,并欢迎你和我或我的同事继续探讨、交流。我非常后悔,因为我伤害了一个十分友善而且敬业的质量部同事。而更糟糕的是,我这个例子只不过是冰山一角而已。我所认识的公司内外的质量人员都是性格温和、细致耐心的人,他们的优点在于人格而不是技术。平心而论,他们比技术出色但是情商不高的技术人员更值得交朋友。质量检查是他们的工作职责,谁也不会有意干扰项目,所以任何人都不应该向他们发火。9.4.2 路在
21、何方我的一位同事在干了5年的质量保证工作后,终于厌倦了,到某大学软件学院当老师去了,目前看上去比较满意。有一位生物专业毕业的、做了多年ISO9000的同事和我谈心,她也说很想当大学老师,当然不教质量管理的课程,而是希望重拾她的生物专业。那位平白无故受我怨气的质量部同事正在读MBA,学得很好,我想她必定有更好的追求。上节email的作者一边上班一边读工程硕士,她的工作任务有一些变动:我已经转做测试了,主要原因有以下几个:1、我们的过程质量虽然很好,但是在提高产品质量方面没有达到期望的效果;2、测试是保证产品质量的一种重要手段,我要接触一下,从而对产品的质量有更好的理解;3、这段时间项目不多,我比
22、较空闲,而且只做SQA的工作,有点枯燥;4、我们公司的测试力量比较薄弱,我希望能帮忙做点什么;5、长期以来,没有深入项目的感觉,我希望自己能够亲身去执行我们的过程,看看能不能找出点问题;同时,我也没有放弃SQA的工作,以后在做测试的同时,我会至少兼做一个项目的SQA。我想这样是一个相辅相成的过程。我希望自己能对提高软件产品质量做点贡献。你看了email就知道她是一位积极上进的好员工,她靠自己的悟性在摸索解决问题的方法。她碰到的问题我看得很清楚,绝非个别现象。问题的根源是:她公司的领导不懂得真正有效的质量管理,使她无法发挥全职质量人员的价值。软件行业里的人嘴上都说质量很重要,可是大多数企业并没有
23、给质量人员提供良好的职业发展空间。质量人员通常仅给企业起到心里安慰的作用。这样下去,有能耐的质量人员会跑光的。在大多数的软件企业里,男性处于支配地位,女性职位相对比较低。而质量人员通常是女性,很多男性主管从未真正地把质量人员当成企业的宝贵人才看待,这种偏见是非常有害的。任何素质合格的员工都是宝贵的人才,很多默默无闻的人才其实是被不懂得管理的领导给荒废了。质量人员之所以没有发挥预期的效果,不是性别缘故,主要过失在于领导者。企业领导们要好好反省,你自己不懂质量管理,不是瞎指挥吗?我的建议如下:(1)无论是企业领导还是质量人员,都要好好学习全面软件质量管理方法,结合企业的特点给出真正有效的质量管理方
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 软件 质量管理
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内