文章 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},bug 没有暴露。只有未经测试的 TT 路径才会暴露它。
那么,基础路径覆盖有何用处?它似乎并不比分支覆盖好多少。
最佳答案
[免责声明:我以前从未听说过这种技术,它看起来很有趣,所以我进行了一些搜索,以下是我认为我发现的内容。希望知道他们在说什么的人也能做出贡献...]
我认为它应该是生成分支覆盖测试的更好方法,而不是路径覆盖的完全替代品。这里有一个更长的文档,它稍微重申了目标:http://www.westfallteam.com/sites/default/files/papers/Basis_Path_Testing_Paper.pdf
onjava 文章说“基础路径测试的目标是独立测试所有决策结果。测试四个基础路径实现了这一目标,使其他路径无关紧要”
我认为“无关”在这里的意思是,“对于基本路径测试的目标来说是不必要的”,而不是像人们想象的那样,“完全是在浪费大家的时间”。
我认为独立测试分支的目的是打破工作路径和测试路径之间的意外关联,当我自己编写代码和任意一组分支覆盖测试时,这种关联以惊人的频率发生.线性独立性并没有什么神奇之处,它只是一种生成分支覆盖率的系统方法,这会阻止测试人员对分支选择之间的相关性做出与程序员相同的假设。
所以你是对的,基础路径测试遗漏了你的错误,并且通常遗漏了 2^(N-1)-N 个错误,其中 N 是圈复杂度。它的目的只是为了不错过 2^(N-1)-N 条路径最有可能出现问题,因为让编码人员选择 N 条路径进行测试通常会造成 ;-)
关于code-coverage - 基本路径覆盖有什么意义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/703570/