📜  软件工程 | Mills 错误播种模型

📅  最后修改于: 2022-05-13 01:57:00.420000             🧑  作者: Mango

软件工程 | Mills 错误播种模型

Mills的错误种子模型提出了一种错误种子方法,通过在程序中引入种子错误来估计程序中的错误数量。从包含固有错误和诱发错误的调试数据中,可以估计未知数量的固有错误。如果固有误差和诱发误差同样可能被检测到,则在 r 个已消除误差中出现 k 个诱发误差的概率遵循由下式给出的超几何分布

    $$ P(k;N, n_1, r)=\frac{\binom{n_1}{k}\binom{N}{r-k}}{\binom{N+n_1}{r}}, \; k=1, 2, ...., r$$

在哪里
N = 固有错误总数
n1 = 引发错误的总数
r = 调试期间删除的错误总数
k = r 移除错误中的诱导错误总数
r – k = r 移除错误中的固有错误总数

由于 n1、r 和 k 已知,N 的 MLE 可以表示为

    $$\hat{N} = [N_0]+1$$

在哪里

    $$N_0=\frac{n_1(r-k)}{k}-1$$

如果$N_0$是一个整数,那么$N_0$$N_0 + I$都是 N 的 MLE。

缺点:

  1. 进行软件测试的成本很高,同时也增加了测试工作量。
  2. 这种方法也因无法确定诱发错误的类型、位置和难度级别而受到批评,因此它们与固有错误同样可能被检测到。

另一种估计程序中残差的实际方法是基于两组独立的程序员使用独立的测试用例集来测试程序的错误。假设在总共 N 个初始错误中,第一个程序员检测到 n1 个错误(并且根本不删除它们),第二个独立地检测来自同一程序的 r 个错误。

假设两个程序员都发现了 k 个常见错误。如果所有错误被检测到的机会相同,那么第一个程序员(k)在随机选择的错误子集(例如,r)中检测到的分数应该等于第一个程序员检测到的分数(n1)在总数中初始误差 N。换句话说,

    $$\frac{k}{r}=\frac{n_1}{N}$$

因此初始误差总数 N 的估计值为

    $$\hat{N}=\frac{n_1r}{k}$$

第二个程序员在 r 个检测到的错误中恰好有 N 个初始错误和 k 个常见错误的概率可以使用如下超几何分布获得:

    $$  P(k;N, n_1, r)=\frac{\binom{n_1}{k}\binom{N-m}{r-k}}{\binom{N}{r}} $$

N 的 MLE 是

    $$\hat{N}=\frac{n_1r}{k}$$

这与上述相同。