转载

测试数据精准对比的思考

一.前提

现在流行敏捷开发,版本迭代也会更快,由于每次版本迭代都是一些小更改,因此对性能上的测试灵敏度要求也会更高,而性能在版本间迭代时总是在动态变化的,因此很难有一个基准值作为判断的参考,如果老大需要一些版本时性能迭代的变化数据,比如,版本之间启动速度变化,以及浏览器加载的性能提升范围等,由于概率事件,很难说性能真的上升或者下降了,因为一切都可以解释成这只是正态分布中的某一次可能值。

然而,还是可以引入一些数学上的方法的。不过需要用到大学学过的概率论。

一.抽象模型

1.其实很多场景能抽象为以下模型来坐量化: 随机抽取100组数据,其中n1组数据通过检验,100-n1组不通过检验,计算一个99%的置信区间,其中均值测试结果为通过的概率。

已知这个模型,那我们需要什么呢,

(1)判断数据通过或者不通过的标准是什么。

  • 因为我们其实是对比测试,我们不关心这个数据的具体值是多少,而是要知道他的一个变化,因此,我们可以引入两组测试各100组,假设叫A组(旧版本)跟B组(新版本)

那么我们可以把A组的均值mean_a跟方差var_a求出来,当作总体的均值跟方差。然后判断标准是B组的100个值里,每一个值如果在(mean_a-3*sqrt(var_a),mean_a+3*sqrt(var_a))内,则判断数据为通过检验,如果在区间外,则判断不通过检验。

(2)针对这100组数据做计算。

  • 由1,我们得到了一个伯努利分布(n,p)作为判断标准,这个标准可以用来判断B组的100个数据。
  • 因此由B组的伯努利分布的一些已知可以计算:

样本均值:mean=(n1*p+(100-n1)*(1-p))/100,

样本方差:var =(n1*(1-mean)^2+(100-n1)*(0-mean)^2)/(100-1) ,

样本标准差:s=sqrt(var)

根据中心极限定理,任何分布的均值都服从正态分布,因此

抽样分布均值:mean_1=mean

抽样分布标准差: s_1 = s/sqrt(100)

因此样本均值服从(mean_1,s_1)的正态分布,通过查询正态分布z值表,可以知道样本在某个标准误(x)范围内(mean_1-x,mean_1+x)可以达到99%的可信度,证明:

(1)测试是通过的,证明此项测试指标在迭代过程中有99%的可能没变化

(2)测试不通过,代表此项测试指标在迭代过程中有变化。(具体如何变化,可以用t检验或者z检验)

二.代码实现

先挖坑,日后填。

原文  http://www.cnblogs.com/alexkn/p/5174100.html
正文到此结束
Loading...