`

软件质量基本概念

阅读更多

如何理解软件的质量

什么是质量?
词典的定义是:① 典型的或本质的特征;② 事物固有的或区别于其他事物的特征或本质;③ 优良或出色的程度。
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语言》

林锐,韩永泉编著
电子工业出版社出版
分享到:
评论

相关推荐

    软件测试的基本概念(介绍软件测试理论)

    ### 软件测试的基本概念 #### 一、软件测试的目的和重要性 软件测试是IT行业中至关重要的一环,其核心目标在于确保软件产品的质量。根据IEEE(电气和电子工程师协会)1983年的标准定义,软件测试是指通过执行一...

    软件质量保证基本概念与方法(ppt-25页).ppt

    "软件质量保证基本概念与方法" 软件质量保证是软件工程中非常重要的一个方面,它涵盖了软件质量的定义、质量管理与控制的三个层次、传统软件工程中质量管理的弱点、软件质量保证方法等方面的内容。 软件质量的定义...

    本章讲述高质量软件开发的道理

    首先,软件质量基本概念是理解和追求高质量软件的基础。它涉及对软件质量的深刻认识,软件质量不仅仅是程序没有错误或缺陷,它还包括软件的功能性、性能、可靠性、易用性等多个方面。理解质量意味着要从用户的角度...

    软件工程的知识体系SWEBOK.ppt

    * 软件质量基本概念:理解软件质量的作用和范围的基础,包括软件质量的一般概念、软件质量的内容、质量评估和改进等。 * 软件质量策略和方法:包括软件质量模型、软件质量评估、软件质量改进等策略和方法。 软件...

    软件质量保证基本概念与方法.pptx

    本章将深入探讨软件质量保证的基本概念和多种方法,包括软件质量的定义、质量管理的层次、传统软件工程的弱点以及改进软件质量的策略。 首先,我们来理解软件质量的定义。根据【定义12-1】,软件质量是软件产品满足...

    软件质量保证与测试.pdf

    "软件质量保证与测试" 本资源主要介绍了软件质量保证和测试的相关概念和方法。共分为四章,分别介绍了质量管理、软件测试、软件开发和质量成本。 第一章主要介绍了质量管理的基本概念,包括质量的定义、分类、特征...

    C++开发提升(1)

    C++开发提升系列教程的第一个部分,主要集中于高质量软件开发之道,讲解软件质量基本概念、提高软件质量的基本方法、“零缺陷”理念等内容,并细说软件质量属性,包括正确性、健壮性、可靠性等。 软件质量基本概念 ...

    软件工程基本概念.pptx

    软件危机的主要表现包括对软件开发成本和进度的估计不准确、用户不满意、软件质量不高、可靠性差、软件常常不可维护、错误难以改正、缺乏适当的文档资料、软件成本占系统总成本的比例逐年上升等。 软件危机的产生...

    测试的基本概念软件测试 基本概念 软件测试必备

    ### 测试基本概念详解 #### 一、软件质量保证与软件测试的区别 **软件质量保证(Software Quality Assurance, SQA)** 是一个贯穿整个软件开发生命周期的过程,旨在确保软件开发过程中所采用的方法、标准和流程得到...

    2-软件测试基本概念.pptx

    软件测试基本概念 软件测试是软件开发过程中的一个重要环节,它的主要目的是为了确保软件产品满足客户的需求和期望。软件测试的基本概念是软件测试的基础,它们是软件测试的理论基础。 Error、Defect、Fault 和 ...

    软件工程基本概念.ppt

    "软件工程基本概念" 软件工程是指导计算机软件开发和维护的工程学科,它采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来。软件工程...

    软件工程基本概念及软件过程主要步骤和活动

    "软件工程基本概念及软件过程主要步骤和活动" 软件工程是一门工程学科,旨在研究和应用科学原则和方法来设计、开发、测试和维护软件产品。软件工程的目标是开发高质量、可靠、可维护、可扩展的软件产品,以满足用户...

Global site tag (gtag.js) - Google Analytics