如何评估软件质量

如题所述

第1个回答  2022-06-30
Q:最近我们组想自己审视一下软件质量,但是缺少相关的经验知识(组内没有qa)。 想向你了解一下,现在常用的软件质量评估方法? 你有关于软件质量相关的文章推荐吗? 或者有哪些书籍推荐?

A:软件质量评估,我暂时还一时想不起来。对于软件质量(测试)相关的书籍我这有基本,具体的可以参考我之前参加的播客: https://music.163.com/#/program?id=903513756http://codetimecn.com/episodes/test ,里面有书籍的介绍。

单纯的评估这块,我之前做过一个软件测试成熟度模型,可以用于评估团队的测试能力。

Q: 其实我有一个问题,软件质量该如何体现。感觉测试何软件质量有区别,但是我说不出来。特别是现在客户非常依赖手动测试,有专门的测试部门

A: 首先,质量是个很大的概念,本质是一种主观感受。我们通常所指的狭义质量为可靠性,软件的可靠性可以通过线上bug数来衡量(或者数量的变化趋势)。 更加准确的计算为线上bug数/开发中的bug数。
这个指标是量化可靠性的其中一种理论,由于业界本身对于软件质量的度量还没有统一的结论,我们可以采用这个值作为相对值进行对比。例如当比率很大时,可靠性质量很不好。
还有一个评估方法是工业界的的质量体系。也就是说,你的开发流程需要符合一定的标准,我就认为你的质量是有保证的。但是这个方式比较复杂而且不好量化
线上bug数属于简单粗暴型,用比例会准确一下是因为产品的规模不同,线上bug数是不同的。

在回答了上述问题后,我对自己的答安并不十分自信,因为我的观点是来源于自己的经验加上一些碎片话的知识。

为了更加准确的找寻关于“软件质量” 的概念,我再次查阅了维基百科: https://en.wikipedia.org/wiki/Software_quality

如上所示软件质量的定义与软件测试一样,并没有统一的定义。大的有三个维度的定义:

这段话的最后部分也指出了最早的质量定义是主观的感受。后面还提到了用户满意度。

总之,准确的定义软件质量依然是困难的,不过,我们还是有一些可以依据的定义,他们采用的是质量模型:

如 ISO/IEC 9126的定义的: https://en.wikipedia.org/wiki/ISO/IEC_9126
以及 CISQ's quality model

由于软件质量定义暂时难已统一,并且是主观的感受。那么评估它也就显得比较主观了。

当然,最简单的非软件测试莫属,那么Bug数毫无疑问的成为了一种可行的评估方式,因为软件测试最早的定义即是,“为了发现错误而执行程序的过程”,其中的错误,我们就可以狭义的理解为Bug。那这里又会存在一个问题,什么bug才有测量意义呢?
根据上述软件质量的定义,“用户”,“客户”,这些真正使用软件的人的感受才是最能反应质量的,所以说,“用户”, “客户”遇到的bug 才是更加符合质量的定义的可用于反应软件质量的Bug类型。(也就是我们所说的线上Bug)

另外,我们可以参考IT界的一些常用的定义来评估质量,例如:
ISO 9126-3
所提到的质量模型,我们可以通过检查软件开发过程中,以及软件自身是否具备某些特质,以及对应于该特质相关的用于评估的属性来评估软件的质量是好是坏。例如:
我们通过右侧的属性来评估左侧的质量特性:

从而得到一个综合的质量评估结果。

尽管上面给出了很多属性,但是相信大家读完了,依然疑惑,即便是有了这些属性,每个属性本身也并非都是标准化,且容易度量的,如coding practices即是典型的例子,里面提到了compliance with OO,可是这一点却是评估的人不同,显然量化的结果是不同,假如OO compliance的满分是10分,对于某OO设计,打6,还是7分,还是8,就仁者见仁,智者见智了。

假如我们狭义的理解质量为质量模型中的可靠性,需要check的点:

尽管已经有了这么多点,上面最后一句依然表明了可靠性的衡量需要考虑被评估软件本身的架构以及使用的第三方库,然后通过自定义的check点来做。也就是说,这个需要可靠性的评估标准,需要因地制宜,看情况而定。显然这种措辞依然表达出了主观标准的意思。

也正是如此,我们身边的日常用品的质量往往会打着IOS9001/IOS9002质量体系认证,来表明其质量是保证的,也就是说,我的产品是在质量保证的流程体系下生产出来的。这样以来,貌似这种评估定义,跟上述定义大体类似,实际上都是难以准确度量的,更大的意义也许是跟没有质量保证的产品去分开吧。

总之,度量软件质量是如此的复杂,且不一定真的能够准确量化质量。那倒不如就在开发过程中时刻按照这些check list约束开发过程,让开发过程是在有保证的情况下交付软件。让真正的质量交给时间,交给我们的线上去体现吧。这也想汽车界的著名质量杂志的JD Power的做法,用线上故障数来评估质量吧(对于汽车,准确的是每百辆故障数)。