如何理解软件的质量
什么是质量?
词典的定义是:① 典型的或本质的特征;② 事物固有的或区别于其他事物的特征或本质;③ 优良或出色的程度。
CMM对质量的定义是:① 一个系统、组件或过程符合特定需求的程度;② 一个系统、组件或过程符合客户或用户的要求或期望的程度。
上述定义很抽象,软件开发人员看了准会一脸迷惘。软件的质量不容易说清楚,但我们今天非得把它搞个水落石出不可。
就以健康做类比吧。早先人们以为长得结实、饭量大就是健康,这显然是不科学的。现代人总是通过考察多方面的生理因素来判断是否健康,如测量身高、体重、心跳、血压、血液、体温等。如果上述因素都合格,那么表明这人是健康的。如果某个因素不合格,则表明此人在某个方面不健康,医生会对症下药。同理,我们也可以通过考察软件的质量属性来评价软件的质量,并给出提高软件质量的方法。
一提起软件的质量属性,人们首先想到的是“正确性”。“正确性”的确很重要,但运行正确的软件就是高质量的软件吗?不见得,因为这个软件也许运行速度很低,并且浪费内存,甚至代码写得一塌糊涂,除了开发者本人谁也看不懂,也不会使用。可见正确性只是反映软件质量的一个因素而已。
软件的质量属性很多,如正确性、精确性,健壮性、可靠性、容错性、性能、易用性、安全性、可扩展性、可复用性、兼容性、可移植性、可测试性、可维护性、灵活性等。除此之外还可以列出十几个,新词可谓层出不穷。
上述这些质量属性“你中有我,我中有他”。如果开发人员每天都要面对那么多的质量属性咬文嚼字,不久就会迂腐得像孔乙己,因此我们有必要对质量属性做些分类和整合。质量属性可分为两大类:“功能性”与“非功能性”,后者有时也称为“能力”(Capability)。
从实用角度出发,本章将重点论述“10大”质量属性,如表1-1所示。
表1-1 “10大”软件质量属性
功 能 性
|
正确性(Correctness)
健壮性(Robustness)
可靠性(Reliability)
|
非 功 能 性
|
性能(Performance)
易用性(Usability)
清晰性(Clarity)
安全性(Security)
可扩展性(Extendibility)
兼容性(Compatibility)
可移植性(Portability)
|
其中,功能性质量属性有3个:正确性、健壮性和可靠性;非功能性质量属性有7个:性能、易用性、清晰性、安全性、可扩展性、兼容性和可移植性。
为什么碰巧是“10大”呢?
不为什么,只是方便记忆而已(如同国际、国内经常评“10大”那样)。
为什么“10大”里面不包括可测试性、可维护性、灵活性呢?它们不也是很重要的吗?
它们是很重要,但不是软件产品的卖点,所以挤不进“10大”行列。我认为如果做好了上述“10大”质量属性,软件将会自然而然地具备良好的可测试性、可维护性。人们很少纯粹地去提高可测试性和可维护性,勿要颠倒因果。至于灵活性,它有益处也有坏处,该灵活的地方已经被其他属性覆盖,而不该灵活的地方就不要刻意去追求。
根据经验,如果你想一股脑儿地把任何事情都做好,结果通常是什么都做不好,做事总是要分主次的。什么是重要的质量属性,应当视具体产品的特征和应用环境而定,请读者不要受本书观点的限制。最简单的判别方式就是考察该质量属性是否被用户关注(即卖点)。
质量的死对头是缺陷,缺陷是混在产品中的人们不喜欢、不想要的东西。缺陷越多质量越低,缺陷越少质量越高。
Bug是缺陷的形象比喻,人们喜欢说Bug是因为可以把Bug当作“替罪羊”。软件的缺陷明明是人造成的,有了Bug这个词后就可以把责任推给Bug——“都是Bug惹的祸”。唉,当一只Bug真是太冤枉了!
软件存在缺陷吗?是的,有以下典故为证。
错误是严重的缺陷。医生犯的错误最终会被埋葬在地下,从此一了百了。但软件的错误不会自动消失,它会一直骚扰用户。据统计,对于大多数的软件产品而言,用于测试与改错的工作量和成本将占整个软件开发周期的30%,这是巨大的浪费。如果不懂得如何有效地提高软件质量,项目会付出很高的代价,你(开发人员)不仅没有功劳,也没人欣赏你的苦劳,你拥有最多的将只是疲劳。
怎样才能提高软件的质量呢?
还是先来听一个中国郎中治病的故事吧!
提高软件质量的基本手段是消除软件缺陷。与上述三个郎中治病很相似,消除软件缺陷也有三种基本方式:
(1)在开发过程中有效地防止工作成果产生缺陷,将高质量内建于开发过程之中。这就是“预防胜于治疗”的道理,无疑是最佳方式,但是要求开发人员必须懂得正确地做事(门槛比较高)。我们学习“高质量编程”的目的就是要在干活的时候一次性编写出高质量的程序,而不是在程序出错后才去修补。
(2)当工作成果刚刚产生时马上进行质量检查,及时找出并消除工作成果中的缺陷—这种方式效果比较好,人们一般都能学会。最常用的方法是技术评审、测试和质量保证等(详见本章1.4节),已经被企业广泛采用并取得了成效。
(3)当软件交付给用户后,用着用着就出错了,赶紧请开发者来补救,这种方式的代价最高。可笑的是,当软件系统在用户那里出故障了,那些现场补救成功的人倒成了英雄,好心用户甚至还寄来感谢信。J
质量的最高境界是什么?是尽善尽美,即“零缺陷”。
“零缺陷”理念来源于国际上一些著名的硬件厂商。尽管软件的开发与硬件生产有很大的区别,但我们仍可以借鉴,从中得到启迪。
人在做一件事情时,由于存在很多不确定的因素,一般不可能100%地达到目标。假设平常人做事能完成目标的80%。如果某个人的目标是100分,那么他最终成绩可达80分;如果某个人的目标只是60分,那么他最终成绩只有48分。我们在考场上身经百战,很清楚那些只想混及格的学生通常都不会及格。即使学习好的学生也常有失误,因而捶胸顿足。
做一个项目通常需要多人协作。假设某系统的总质量是10个开发人员的工作质量之积,即最高值为1.0,最低值为0。如果每个人的质量目标是0.95,那么10个人的累积质量不会超过0.598。如果每个人的质量目标是0.9,那么10个人的累积质量不会超过0.35。只有每个人都做到1.0,系统总质量才会是1.0。只要其中一人的工作质量是0,那么系统总质量也就成了0。因系统之中的一个缺陷而导致机毁人亡的事件已不罕见。
上述比喻虽然严厉了一些,但从严要求只有好处没有坏处。如果不严以律己,人的堕落就会很快。如果没有“零缺陷”的质量理念,也许缺陷就会成堆。
从理念到行动还是有一定距离的,企业在开发产品时应当根据自身实力和用户的期望值来设定可以实现的质量目标。过低的质量目标会毁坏企业的声誉,而过高的质量目标则有可能导致成本过高而拖累企业(请参见本章1.3节)。
本文节选自《高质量程序设计指南:C++/C语言》
电子工业出版社出版
分享到:
相关推荐
1.1软件质量基本概念 2 1.1.1 如何理解软件的质量 2 1.2.2 提高软件质量的基本方法 4 1.2.3 “零缺陷”理念 5 1.2 细说软件质量属性 5 1.2.1 正确性 5 1.2.2 健壮性 6 1.2.3 可靠性 6 1.2.4 性能 7 1.2.5 易用性 7 ...
软件质量保证基本概念与方法.pptx
软件质量保证基本概念与方法(ppt-25页).ppt
软件测试入门PPT,软件测试的基本概念,对于从事软件测试的人员是一个很好的入门和提升的PPT。 内容目标: 正确理解软件测试的背景、软件缺陷和故障的概念 正确理解软件测试的意义 正确理解软件开发过程与软件测试...
7.1 质量管理基本概念 7.2 IT软件质量管理基本知识 7.3 软件项目质量计划 7.4 软件项目评审 7.5 软件质量体系 7.6 软件过程能力成熟度模型(CMM) 7.7 思考题
软件测试的基本概念,初学者必看。 软件质量保证同软件测试的区别 软件中存在错误的来源.... 等等...
软件测试背景 软件测试的基本概念 软件工程与开发过程 软件开发与软件测试的关系 软件测试职业与素质 软件质量管理与评价
软件质量保证同软件测试的区别 测试种类 软件测试来源 开发和执行软件测试的步骤
本教程旨在为读者提供软件测试的详细指南,从基本概念到实践方法,帮助大家全面了解并掌握软件测试的核心内容。 软件测试是通过一系列的验证和确认活动,旨在评估软件产品是否满足特定的要求。这些要求可能源自用户...
软件质量管理的基本概念 软件质量控制 缺陷预防 质量体系 软件项目质量管理计划(案例) 缺陷跟踪工具Bugzilla
软件质量保证与测试 软件测试的基本概念 测试的分类与基本概念ppt
本文对软件工程和软件质量以及软件危机的基本概念进行了论述 ,并就在软件的研发和维护过程中如何利用软件工程进行软件质量管理给出了自己的见 解 【关键词】软件工程 软件危机 质量管理 质量认证 21世纪以来,...
软件工程的概念 教学目的: 让学生明确软件和程序的区别、软件危机等概念 让学生理解软件开发的基本步骤 理解软件生命周期模型 讲解: 通过本课程,引导学生由程序员向项目经理的过渡 程序设计语言(程序员) 面向...
如果不了解其内部的结构原理及关系,就不可能设计和编写出高质量的应用软件系统,也不可能管理好一个复杂的应用系统。为了给以后章节的打好基础,本章简要给出 ORACLE 8 /ORACLE8i数据库系统结构的描述。
软件质量保证与测试 第2章 软件测试的基本概念_01软件质量及缺陷PPT
软件质量的基本概念和模型 软件质量管理过程 软件质量体系 质量的度量 提高软件质量的途径
软件质量与测试第一章, 1.1 软件缺陷 1.2 软件质量 1.3 软件测试基本概念 1.4 软件测试原则与测试思想
软件开发之道描述,为了深入理解软件质量的概念,阐述了十个重要的软件质量因素,即正确性、健壮性、可靠性、性能、易用性、清晰性、安全性、可扩展性、兼容性和可移植性。并介绍了消除软件缺陷的基本方法。
软件项目质量管理 软件质量管理的基本概念 软件质量控制 缺陷预防 质量体系 软件项目质量管理计划(案例) 缺陷跟踪工具Bugzilla
测试的基本概念: 一、软件质量保证同软件测试的区别 二、软件中存在错误的来源 三、有哪些测试 四、开发和执行软件测试需要哪些步骤