2

onjava上的文章似乎暗示基本路径覆盖是完整路径覆盖的充分替代品,因为一些线性独立/圈复杂性魔术。

使用与文章类似的示例:

public int returnInput(int x, boolean one, boolean two)
{
    int y = x;
    if(one)
    {
        y = x-1;
    }
    if(two)
    {
        x = y;
    }
    return x;
}

使用基组 {FF,TF,FT},错误不会暴露。只有未经测试的 TT 路径会暴露它。

那么,基路径覆盖有什么用呢?它似乎并不比分支覆盖好多少。

4

3 回答 3

5

[免责声明:我以前从未听说过这种技术,它看起来很有趣,所以我做了一些搜索,这就是我认为我发现的。希望知道他们在说什么的人也会做出贡献......]

我认为它应该是生成分支覆盖测试的更好方法,而不是完全替代路径覆盖。这里有一个更长的文件,重申了目标:http ://www.westfallteam.com/sites/default/files/papers/Basis_Path_Testing_Paper.pdf

onjava 文章说“基础路径测试的目标是独立地测试所有决策结果。测试四个基础路径实现了这一目标,使其他路径无关”

我认为这里的“无关”是指“对基础路径测试的目标来说是不必要的”,而不是人们可能认为的“完全浪费每个人的时间”。

我认为独立测试分支的目的是打破有效路径与您测试的路径之间的意外关联,当我自己编写代码和任意一组分支覆盖测试时,这些关联以可怕的频率发生。线性独立没有什么神奇之处,它只是一种生成分支覆盖率的系统方式,它阻止了测试人员对分支选择之间的相关性做出与程序员相同的假设。

所以你是对的,基础路径测试错过了你的错误,通常会错过 2^(N-1)-N 个错误,其中 N 是圈复杂度。它只是为了不要错过最有可能出现错误的 2^(N-1)-N 路径,因为让编码人员选择 N 路径进行测试通常会这样做;-)

于 2009-04-01T01:11:27.353 回答
1

路径覆盖率并不比任何其他覆盖率指标好——只是这些指标显示了有多少“代码”已经过测试。您可以使用 (TF,FT) 组 TC 以及 (TT,FF) 实现 100% 分支覆盖率这一事实意味着,如果您的退出标准告诉您在 100% 覆盖率完成后退出,这完全取决于您的运气。
覆盖率不应该是测试人员关注的焦点 - 发现错误应该是并且 TC 只是一种显示错误的方式,就像覆盖率代理显示有多少显示错误活动已经完成。与所有其他白盒方法一样 - 以最小的成本争取最大的覆盖范围需要实际了解代码,以便您可以实际编写带有 TC 的缺陷。TC 仅适用于回归和作为缺陷的文档。作为测试人员的覆盖率只是对已完成多少工作的提示——只有经验才能真正有助于说明多少就足够了。由于这很难以数值形式呈现,我们使用其他方法,即覆盖率统计。不确定这对您是否有意义,我想从您发布问题之日起您离开的日期判断...

于 2012-04-19T13:55:21.920 回答
0

我对McCabe 关于这个确切主题的工作的回忆是:您系统地生成基本路径,一次更改一个条件,并且只更改最后一个条件,直到您无法更改任何新条件。

假设我们从最短路径 FF 开始。按照算法,我们更改链中的最后一个 if,产生 FT。我们现在已经介绍了第二个 if,意思是:如果第二个 if 中有 bug,那么我们的两个测试肯定会注意第二个 if 语句突然开始执行时发生的情况,否则我们的测试不工作或我们的代码无法验证。这两种可能性都表明我们的代码需要修改。

覆盖 FT 后,我们返回路径中的一个节点并将第一个 T 更改为 F。在构建基本路径时,我们一次只更改一个条件。所以我们被迫离开第二个,如果相同的话,让步...... TT!

我们剩下这些基本路径:{FF, FT, TT}。哪个解决了您提出的问题。

但是等等,你说,如果错误发生在 TF 案例中怎么办?答案是:我们应该已经在其他三个测试中的两个之间注意到了它。想一想:

  • 第二个如果已经有机会通过 FF 和 FT 测试独立地证明它对代码的影响,那么对程序执行的任何其他更改。
  • 第一个如果有机会展示其从 FT 到 TT 的独立影响。

我们可以从 TT 案例(最长的路径)开始。我们会得到稍微不同的基础路径,但它们仍然会独立地执行每个 if 语句。

请注意,在您的简单示例中,if 语句的条件没有共线性。共线性削弱了基础路径的生成。

简而言之:系统地进行基础路径测试,避免了您认为的问题。基本路径测试不会告诉您如何编写可验证的代码。(TDD 就是这样做的。)更重要的是,路径测试不会告诉您需要做出哪些断言。那是你作为人类的工作。

资料来源:这是我的研究领域,但几年前我阅读了 McCabe 关于这个确切主题的论文:http: //mccabe.com/pdf/mccabe-nist235r.pdf

于 2017-03-31T15:42:01.550 回答