基准路径覆盖的重点是什么?

时间:2009-04-01 00:14:54

标签: code-coverage

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路径才会暴露它。

那么,基础路径覆盖如何有用?它似乎没有分支覆盖率好多了。

3 个答案:

答案 0 :(得分:5)

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

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

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

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

我认为独立测试分支的重点是,当我自己编写代码和任意一组分支覆盖测试时,打破工作路径和测试路径之间的偶然相关性,这些相关性以可怕的频率发生。在线性独立性方面没有任何魔力,它只是一种产生分支覆盖的系统方法,这阻碍了测试人员对程序员做出与分支选择之间的相关性相同的假设。

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

我对McCabe's work on this exact subject的回忆是:您系统地生成基本路径,一次更改一个条件,只更改最后一个条件,直到您无法更改任何新条件。

假设我们从FF开始,这是最短的路径。按照算法,我们改变链中的最后一个if,产生FT。如果现在我们已经覆盖了第二个,这意味着:如果第二个中存在错误,那么肯定我们的两个测试正在关注当第二个if语句突然开始执行时发生的事情,否则我们的测试不是't't工作或我们的代码是不可验证的。这两种可能性都表明我们的代码需要重新加工。

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

我们留下了这些基础路径:{FF,FT,TT}。这解决了你提出的问题。

但是等等,你说,如果在TF情况下发生了什么?答案是:我们应该已经注意到其他三个测试中的两个。想一想:

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

我们可以从TT案例(最长的路径)开始。我们会得到略有不同的基础路径,但他们仍然会独立地运用每个if语句。

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

简而言之:系统地完成基础路径测试,避免您认为存在的问题。基础路径测试并没有告诉您如何编写可验证的代码。 (TDD就是这么做的。)更重要的是,路径测试并没有告诉你需要做出哪些断言。那是你作为人的工作。

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