上文和大家一起讨论了人工智能样本的评价参数:准确度、精准度、召回率和F1分数。这篇文章,我们结合这些参数来讨论基于Bug的软件测试质量分析。
软件测试质量分析是软件测试工作中非常重要的管理工作,其实在没有了解准确度、精准度、召回率这些概念之前,我们其实已经多多少少使用了这些概念。现在假设讨论的周期为一次正式的版本发布,版本经过研发,并且在客户现场运行了一段时间,目前基本上发现不了Bug了。在这期间发现了m个Bug,其中研发人员发现的Bug数量为a个(a1个为有效缺陷、a2个为无效缺陷,a1+a2=a),研发人员发现的Bug数量为b个(b1个为有效缺陷、b2个为无效缺陷,b1+b2=b)。这样我们就可以定义真阳性Bug为a1个,假阳性Bug为a2,真阴性Bug为b1个,假阴性Bug为b2。接下来我们将缺陷乘以严重等级(严重×5,一般×3 轻微×1),就可以获得混淆矩阵。
假设Bug情况如下表1:
研发发现的 |
客户发现的 |
||||||||||||||
有效 |
无效 |
有效 |
无效 |
||||||||||||
严重 |
一般 |
轻微 |
合计 |
严重 |
一般 |
轻微 |
合计 |
严重 |
一般 |
轻微 |
合计 |
严重 |
一般 |
轻微 |
合计 |
50 |
104 |
198 |
10 |
24 |
46 |
5 |
14 |
25 |
2 |
7 |
12 |
||||
250 |
312 |
198 |
760 |
50 |
72 |
46 |
168 |
25 |
42 |
25 |
92 |
10 |
21 |
12 |
43 |
站在研发角度,我们可以得到:
- 真阳——研发发现的有效缺陷(加权后):760;
- 真阴——客户发现的无效缺陷(加权后):43;
- 假阴——客户发现的有效缺陷(加权后):92;
- 假阳——研发发现的无效缺陷(加权后):168。
所以混淆矩阵为表2:
P |
N |
|
T |
760 |
168 |
F |
92 |
43 |
所以可以得到:
- 准确率:(760+43)/(760+168+43+82)=803/1063=76%;
- 精确度:760/(760+168)=760/928=82%;
- 召回率:760/(760+92)=760/852=89%;
- F1分数:82%×89%×2 /(82%+89%)=1.4596/1.71=85%。
可以看见准确率反应整体发现缺陷的水平,准确度反应研发发现缺陷的质量,召回率反应研发发现缺陷的水平。作为测试工作,我们的目标是在准确率、精确度和召回率上都要加强。准确率的提高主要目标是减少整体误报率,精确度的提高主要目标是减少研发人员的误报率,召回率的提高是保证在出厂之前产品的质量的指标,召回率越高,漏报率越低。如果精确度与召回率比较低,而准确率高,说明研发人员的测试水平存在一定问题,许多缺陷都是用户测试出来的,研发人员漏报了不少Bug;反之,如果召回率比较高,而精确度或准确率低,说明发现了大量无效缺陷,需要对产品业务进行有效地理解。
当然,我们也可以按照Release的时间,把这个时间之前发现的有效缺陷标记为真阳性;这个时间之前发现的无效缺陷标记为假阳性;把这个时间之后发现的有效缺陷(不管是研发还是客户发现的)标记为假阴性,这个时间之前发现的无效缺陷(不管是研发还是客户发现的)标记为真阴性。假设在上表中客户发现的有效缺陷中严重50中4个是事后发现的;一般104中23个是事后发现的;轻微198中43个是事后发现的。上表中客户发现的有效缺陷中严重10中2个是事后发现的;一般24中5个是事后发现的;轻微46中15个是事后发现的。所以上表变为表3:
Release之前发现的 |
Release之后发现的 |
||||||||||||||
有效 |
无效 |
有效 |
无效 |
||||||||||||
严重 |
一般 |
轻微 |
合计 |
严重 |
一般 |
轻微 |
合计 |
严重 |
一般 |
轻微 |
合计 |
严重 |
一般 |
轻微 |
合计 |
46 |
81 |
155 |
8 |
19 |
31 |
9 |
37 |
68 |
4 |
12 |
27 |
||||
230 |
243 |
155 |
628 |
40 |
57 |
31 |
128 |
45 |
111 |
68 |
224 |
20 |
36 |
27 |
83 |
于是得到混淆矩阵为表4:
P |
N |
|
T |
628 |
128 |
F |
224 |
83 |
所以可以得到:
- 准确率:(628+83)/(628+128+224+83)=741/1063=70%;
- 精确度:628/(628+128)=628/756=83%;
- 召回率:628/(628+224)= 628/842=75%;
- F1分数:83%×78%×2 /(83%+78%)=1.2948/1.61=80%。
这里的度量指标反映了版本发布之前的质量效率。
现在假设有一个测试机器人来进行软件测试,我们如何来评估这个测试机器人的测试质量呢?测试机器人发现的正确的缺陷为真阳性,发现的错误的缺陷为假阳性,同时配合人工测试,人工测试发现的正确的缺陷去除与测试机器人发现的重复的正确的缺陷为假阴性,人工测试发现的错误的缺陷去除与测试机器人发现的重复的错误的缺陷(测试机器人与人发现的判定为错误的缺陷应该仔细判断,理论上应该为0)为真阴性。表5为测试机器人发现的缺陷数据。
测试机器人发现的缺陷数据 |
|||||||
有效 |
无效 |
||||||
严重 |
一般 |
轻微 |
合计 |
严重 |
一般 |
轻微 |
合计 |
30 |
76 |
186 |
10 |
32 |
32 |
||
150 |
228 |
186 |
564 |
50 |
96 |
32 |
178 |
表6为人工测试发现的缺陷数据,括号内为与机器人发现重复的。
人工测试发现的缺陷数据 |
|||||
严重 |
一般 |
轻微 |
严重 |
一般 |
轻微 |
45(25) |
135(46) |
212(109) |
4(0) |
15(0) |
3(0) |
这样人工测试发现的去除测试机器人发现的缺陷数据为表7:
人工测试发现的缺陷数据 |
|||||
严重 |
一般 |
轻微 |
严重 |
一般 |
轻微 |
20 |
189 |
103 |
4 |
15 |
3 |
合并表5和表7,得到表8:
测试机器人发现的缺陷数据 |
人工测试发现的缺陷数据 |
||||||||||||||
有效 |
无效 |
有效 |
无效 |
||||||||||||
严重 |
一般 |
轻微 |
合计 |
严重 |
一般 |
轻微 |
合计 |
严重 |
一般 |
轻微 |
合计 |
严重 |
一般 |
轻微 |
合计 |
30 |
76 |
186 |
10 |
32 |
32 |
20 |
189 |
103 |
4 |
15 |
3 |
||||
150 |
228 |
186 |
564 |
50 |
96 |
32 |
178 |
100 |
567 |
103 |
770 |
20 |
45 |
3 |
68 |
得到混淆矩阵为表9:
P |
N |
|
T |
564 |
178 |
F |
770 |
68 |
所以:
- 准确率:(564+68)/(564+178+770+68)=632/1580=40%
- 精确度:564/(564+178)=564/742=76%;
- 召回率:564/(564+770)=564/1334=42%;
- F1分数:76%×42%×2 /(76%+42%)=0.6384/1.18=54%。
由此可见,测试机器人的测试精确度还可以,也就是说误报率比较低。但是准确度和召回率就比较低了,也就是漏报率比较高。并且F1分数仅有54%,一般系统如果F1分数低于50%为不合格产品,由此可见这款测试机器人刚刚合格。
————————————————————
软件安全测试
https://study.163.com/course/courseMain.htm?courseId=1209779852&share=2&shareId=480000002205486
接口自动化测试
https://study.163.com/course/courseMain.htm?courseId=1209794815&share=2&shareId=480000002205486
DevOps 和Jenkins之DevOps
https://study.163.com/course/courseMain.htm?courseId=1209817844&share=2&shareId=480000002205486
DevOps与Jenkins 2.0之Jenkins
https://study.163.com/course/courseMain.htm?courseId=1209819843&share=2&shareId=480000002205486
Selenium自动化测试
https://study.163.com/course/courseMain.htm?courseId=1209835807&share=2&shareId=480000002205486
性能测试第1季:性能测试基础知识
https://study.163.com/course/courseMain.htm?courseId=1209852815&share=2&shareId=480000002205486
性能测试第2季:LoadRunner12使用
https://study.163.com/course/courseMain.htm?courseId=1209980013&share=2&shareId=480000002205486
性能测试第3季:JMeter工具使用
https://study.163.com/course/courseMain.htm?courseId=1209903814&share=2&shareId=480000002205486
性能测试第4季:监控与调优
https://study.163.com/course/courseMain.htm?courseId=1209959801&share=2&shareId=480000002205486
Django入门
https://study.163.com/course/courseMain.htm?courseId=1210020806&share=2&shareId=480000002205486
啄木鸟顾老师漫谈软件测试
https://study.163.com/course/courseMain.htm?courseId=1209958326&share=2&shareId=480000002205486