被发现的错误到底有多少?关于林肯指数

Python 有一个简单的统计称为林肯指数,让您可以估算出一些错误的总数。我来解释一下林肯指数,为什么它会奏效,给它打一些代码,并讨论如何适用于软件测试。

林肯指数是什么?

假设你发现了一个测试程序中的 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 0

def 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)

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。