被发现的错误到底有多少?关于林肯指数
林肯指数是什么?
假设你发现了一个测试程序中的 20 个错误。你估计有多少错误是在程序真正出错的?你知道至少有 20 个错误,如果你有信心,你可以假设有大约20个漏洞。但是,也许你的测试软件不是很好,也许有数百个的错误。你怎么能知道到底有多少有错误?有没有办法通过一个测试软件之类。但是,如果你有两个测试人员,你可以得到不错的成效,即使你不知道熟练的测试人员是何方神圣。
假设有两个独立的测试错误的测试员。让 E1 的是一些错误的第一个测试人员发现的错误和 E2 测试发现的第二个相同。设 S 是两个测试人员发现的错误数量。林肯指数估计为 E1 E2 的错误总数/ S。
该指数是如何工作的?
假设有n个错误和两个测试人员发现的概率分别是 P1 和 P2 。你可以想象两个测试人员发现 NP1 和 NP2 错误情景。如果假定每一个测试人员发现错误的概率是独立的,那么测试人员找到共同错误总是围绕 NP P2。于是就有了 E1*E2/S 围绕在下列公式。
(n2 p1 p2) / (n p1 p2) = n.
换而言之,在错误的总数中,每个测试人员发现错误的概率只有n。
下面是一些使用模拟估计林肯指数Python代码。
from random import random
def find_error(p):
"Find an error with probability p"
if random() < p:
return 1
return 0def simulate(true_error_count, p1, p2, reps=10000):
"""Simulate Lincoln's method for estimating errors
given the true number of errors, each person's probability
of finding an error, and the number of simulations to run."""
estimation_error_sum = 0
for rep in xrange(reps):
caught1 = 0
caught2 = 0
caught_both = 0
for error in xrange(true_error_count):
found1 = find_error(p1)
found2 = find_error(p2)
caught1 += found1
caught2 += found2
caught_both += found1*found2
estimate = caught1*caught2 / float(caught_both)
estimation_error_sum += abs(estimate - true_error_count)
return estimation_error_sum / float(reps)
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。