如何理解软件的质量

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

林锐,韩永泉编著
电子工业出版社出版

http://chatgpt.dhexx.cn/article/gGU9f11n.shtml

相关文章

【软件质量】软件质量分析总结报告

软件质量-----“软件与明确地和隐含地定义的需求相一致的程度” 一、质量的概念 Ⅰ、传统的质量概念:产品性能是否符合技术规范 Ⅱ、质量是一组固有特性满足要求的程度 Ⅲ、适用性质量 Ⅳ、质量不仅指产品质量,也指过程和体系的质量 二、软件质量 Ⅰ、产品质…

软件质量有什么特性?

软件质量有什么特性? 《软件工程—产品质量》(GB/T 16260-2006)中规定对软件的每个质量特性与子特性都有定义: 一、功能性:是指当软件在指定条件下使用,软件产品满足明确和隐含要求功能的能力。 适合性&a…

1.软件质量

一、软件质量 什么是质量 定义:影响产品或服务满足给定需求的能力的特性和特性的总和。 质量来自: 客户的观点是否适合使用或其他客户需求生产者观点满足要求 软件质量 定义:软件符合质量标准的程度。 Prevention is better than cure…

软件质量的定义及其六大特性(质量模型)

1、软件质量的定义 软件质量是软件特性的综合,指软件满足规定或潜在用户需求的能力,其主要从内部质量、外部质量、使用质量和过程质量这四个方面来衡量。 2、软件质量模型 测度与度量:在软件质量中用于测量的一种量化的标度和方法即为测度…

软件缺陷与软件质量

** 一、 软件缺陷 ** 1、软件缺陷 BUG Bug这 个词在计算机世界表示计算机程序中的错误或者 疏漏,它们会使程序计算出莫名其妙的结果,甚 至引起程序的崩溃。 缺陷的识别 什么是缺陷 不符合设计要求 • 不满足用户确定需求 注意 两个观点 • 有些问题…

软件质量概述篇

软件产品与其他产品一样,都是有质量要求的,软件质量关系着软件使用程度与使用寿命,一款高质量的软件更受用户欢迎,它除了满足客户的显式需求之外,往往还满足了客户隐式需求。下面分别从软件质量的概念、软件质量模型、…

软件测试学习中的一些有用网站

作为小白,在学习软件测试过程中遇到的一些比较有用的公众号、网站,做一总结分享出来,后面也会及时更新里面的内容。 1.公众号:搜狗测试、软件测试资源分享 2.博客/论坛:51testing论坛,CSDN一些博客 3.小…

软件测试该怎么自学?

众所周知,软件测试是IT技术岗位中技术入门门槛最低的,因此许多计算机零基础的小白会选择测试行业。虽然,大家都说测试很简单,但是对于完全没有基础的初学者来讲,想要学好测试也并不简单。下面我们就来看看,…

刚入行的软件测试工程师如何自学软件测试?

从题干上看,你是已经进入了软件测试行业,有了一份软件测试的工作,那表示你看好这个行业,有意愿在这个行业持续发展。 软件测试相对一些开发的专业来说,需要了解的东西特别多,拿一些招聘简章中的要求来看&am…

软件测试自学好还是培训好?软件测试自学与培训的优劣势对比

随着移动互联网行业的火爆,软件测试行业成了香饽饽。一大批想要学习软件测试的新手都经历过这样的迷茫期,软件测试自学好还是报培训班好? 首先,如果你对软件测试行业真的感兴趣,从此工具为乐,代码为生。我…

自学软件测试,该读些什么书籍?

大家好,我是谭叔。 最近,有不少准备转行软件测试的网友询问我应当阅读些什么书籍。这一问让我想起几年前,我准备转行时的场景——那时,迷茫的我真的好期待有一位老师能带带我,告诉我该怎么学习,该阅读哪些…

软件测试技能图谱|自学测试路线图

很多新手,不知道软件测试学习该如何开始,软件测试需要掌握哪些知识。下面是根据本人的理解,粗略整理的一个学习大纲,希望对刚入行或者准备学习测试的朋友提供一点指引。 — 1 — 测试基础理论 软件测试基础理论是软件测试的重要…

自学软件测试怎么样,有前景吗?

做测试有没有前景呢?这是大家最关心的一个问题,但其实测试岗和任何岗位一样,都有其天花板、有其挑战也有其发展前途。 一、天花板和挑战 随着人工智能的发展,测试也越来越实现半自动化操作了。所以,很多大公司将测试岗位外包&a…

自学软件测试需要多久?能掌握吗?

自学软件测试需要多久?如果参加培训班学软件测试需要5-6个月,自学软件测试时间长短因人而异,与学习资料及个人的毅力有关,排除资料问题假设能够弄到靠谱的资料然后开始自学,按照制定好的学习计划走至少需要5个月。 自…

软件测试培训分享:软件测试自学能找到工作吗

软件测试技术虽然不是很难,但对于零基础的同学来说,想要自学软件测试难度还是很大的,而且会在后面找工作的时候比较困难,下面小编就为大家具体的介绍一下软件测试自学能找到工作吗? 软件测试自学能找到工作吗?软件测试的工作本质…

软件测试自学网站推荐_四大适合年轻人自学的网站!知乎超100万人推荐,自学改变人生...

在这个互联网时代,想要学点什么东西,上网搜一搜就有,但网上的资源五花八门,看得人眼花缭乱,想要找到高质量又免费的自学资源还真不是见容易的事!不过别着急,今天就来跟大家分享几个质量杠杠的自…

零基础怎么自学软件测试?分享五个宝藏网站,自学简直不要太轻松了

虽说入行门槛低,但软件测试涉及的技术知识可不少,求学之路不是容易的事,因此很多朋友纷纷吐槽——​​​​​​​ .没有导师,不知道从哪里开始学起;.学习过程中遇到困难,自己无法解决,最终放弃…

自学软件测试最常用的七个网站!建议收藏

前言 不知道大家有没有发现一个现象,技术行业更新换代的速度,远远快于我们追赶的脚步,两三年前,只需要掌握基础的软件测试技术,会一些功能测试,就可以找到一份不错的工作,但是从2021年来看&…

机器学习模型——回归模型

目录 线性回归特点最小二乘法代码实现 多项式回归特点 岭回归特点:共线性collinearity优化函数代码实现 套索回归Lasso岭回归和套索回归对比代码实现 弹性回归网络特点: 线性回归 线性回归指的是全部由线性变量组成的回归模型特点 建模速度快、对每个变…

机器学习基础:模型评估(上)

目录 1. 什么是一个优秀的分类器 2. 选择测试数据集 2.1 切分训练测试集 2.1.1 简单随机划分(random handout) 2.1.2 留一法(leave-one-out) 2.1.3 留一法交叉验证(leave-one-out cross validation) …