基本比率谬误与精准测试有效性

70 阅读6分钟

本文存在相当的先射箭再画靶子的行为,  文中的结论仅用于抛砖引玉

可以先了解一下这个概念 基本比率谬误

 

1、一个问题

预设条件:

1、假设下面提出来的需求中, 精准测试能够100%的梳理出改动的影响面

2、题目中说到的漏测指变动的代码链路没有经过测试覆盖到. 在实际生产中, 统计的漏测一般指有故障没有被测试覆盖到而透出到了线上

 

问题题干

在测试需求时, 有10%的概率会漏测部分场景, 现在用精准测试对其进行验收。 实际使用中, 精准测试是有误差的, 已知没出现漏测的需求精准测试报告不通过的概率为10%, 出现漏测的需求其精准测试报告不通过的概率为95%。 现在有一个需求的精准测试报告展示不通过, 问这个需求出现漏测的概率是多少。

 

1.1、为什么将问题的题干设置为这样

提问背景: 测试需求的时候会出现漏测,   我们希望通过精准测试去确认测试是否覆盖全面, 但是有不少同学反馈精准测试不够准确,  

 

问题为什么这么设置:

1、由于「精准测试报告通过与否与用试纸判断检测者是否有某项疾病有相似处」, 我们可以直接联想到下面的检测问题

2、精准测试从原理上来说是白盒的. 但是实际应用上因为目前尚不明确精准测试的能力边界, 做简化处理当作黑盒. 这里就和抗原检测药剂类似, 原理是明确的, 但是准确率不是100%, 存在误判的可能

 

免责声明: 由于我没有真实的漏测数据(变动的代码链路没有经过测试覆盖到),  也没有精准测试报告对于真正的漏测的检出概率, 当然这两种数据也几乎无法统计出来 , 所以题目中的数据均为编造

 

 

检测问题

王宏去医院作验血实验,检查他患上了X疾病的可能性,其结果居然为阳性,把他吓了一大跳,赶忙到网上查询。网上的资料说,实验总是有误差的,这种实验有“百分之一的假阳性率和百分之一的假阴性率”。这句话的意思是说,在得病的人中做实验,有1%的人是假阳性,99%的人是真阳性。而在未得病的人中做实验,有1%的人是假阴性,99%的人是真阴性。于是,王宏根据这种解释,估计他自己得了X疾病的可能性(即概率)为99%。王宏想,既然只有百分之一的假阳性率,那么,百分之九十九都是真阳性,那我已被感染X病的概率便应该是99%。

可是,医生却告诉他,他被感染的概率只有0.09左右

 

 

1.2、需求出现漏测的概率的计算

 

设A={需求出现漏测},B={需求的精准测试报告展示不通过}

我们需要计算的是在B的前提条件下, 事件A出现的概率, 也就是P(A|B)

 

 

由贝叶斯定理

其中A**C是A的补集(即非A)

 

P(A)=0.1

P(B|A) 代表是漏测的前提下,检测呈不通过的概率。我们已经知道了是 0.95

P(B|A****C ) 代表不是漏测的前提下,检测不通过的概率。我们已经知道了是 0.1

 

P(A|B) = 0.51

也就是说精准测试展示不通过实际漏测的概率为51%, 这个数字比任意一个需求漏测的概率要大(10%), 但不足以证明这个需求本身是漏测的

 

如果我们调整一下需求漏测出现的概率, 结果将会大不相同

但是如果A={需求出现漏测},  P(A) 的概率为0.05, 
P(A|B) 为多少呢, 计算得出为33.33%

所以一个推论就是, 漏测次数越多的业务域, 其精准报告的可靠性就越高

 

 

1.3、怎么去提升检测的准确性

 

做复查

在医院做检查的时候, 如果初次检查结果呈阳性, 一般会安排多次复查. 做复查可以显著提升检测的准确性. 精准报告同理. 

 

在工作中, 为了提升自动化覆盖率, 我曾与研发一起阅读覆盖率报告. 曾经发现这么一个现象: 在运行相同的自动化用例的时候, 第一次运行时, 部分代码(已有自动化覆盖)被标记为未覆盖, 但是第二次运行后, 代码被标记为了覆盖. 也就是说覆盖率的准确性可能也不高, 而覆盖率的准确性会影响精准报告的准确性. 

 

在前面的未覆盖场景上, 如果是因为环境原因, 导致自动化或者手工测试走到了非预期的泳道, 那么精准测试肯定是不通过, 这也是我们希望精准测试发现的. 如果是精准测试准确性导致的不通过, 那么可能会给我们的工作带来额外的困扰

 

做复查有个问题就是成本太高,  做复查的前提条件是在PRT和STAGING环境都需要走完完整的测试用例

我们在做需求的时候, 对于一些比较难以验证的/数据难以构造的case,  一般不会在两个环境都测试到, 那这样的话检测的准确度是不会提升的

 

提升检测手段的准确性

也就是提升精准报告的检测准确性

 

2、实际情况

上面的题目讨论的是一个相对理想的情况下, 仅根据精准测试报告的通过与否来判断测试是否全面的可行性, 但实际上我们精准测试报告的应用是做的比较贴近生产应用的. 精准测试能够产出受影响的函数调用链路, 这个对于测试有着比较好的指导意义

那我们应该如何借助精准测试更好的评估测试是否全面呢, 下面举几个例子

  • 比如说我们观察到一个代码库, 历史上涉及到它的需求, 精准测试覆盖度一直都不够高, 是否意味着这个代码库需求漏测的发生频率更高?
  • 比如说我们观察到一个代码库, 它的精准测试覆盖度一直维持在一个水平线波动, 比如说70~100%,  但是最近某个需求, 它的精准测试覆盖率大幅下降, 是否意味着这个需求发生漏测的可能性更大?

 

这些目前可能需要更多的数据或者更多的经验才能对其作出猜测

 

3、如何建立一个比较好的测试评估模型

当前QA已经运用了相当多的手段去进行辅助测试, 评估测试是否有效, 评估变更是否存在风险. 个人认为这个更多的是统计学问题, 数据很容易欺骗人, 如何做到比较好的评估是一个系统性的工程