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路径才会暴露它.
那么,基础路径覆盖如何有用?它似乎没有分支覆盖率好多少.
[免责声明:我之前从未听说过这种技术,它看起来很有趣,所以我做了一些搜索,这就是我认为我发现的.希望知道他们所谈论的内容的人也会做出贡献...]
我认为它应该是生成分支覆盖测试的更好方法,而不是路径覆盖的完全替代.这里有一个更长的文档,它重申了一些目标: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路径进行测试通常会这样做;-)