Testing 分支机构覆盖率

Testing 分支机构覆盖率,testing,branch,Testing,Branch,在编写应该具有100%分支覆盖率的测试用例时,可以让一个用例覆盖两个分支,另一个用例只覆盖一个分支 注意:我们假设代码中只有三个分支 编辑:3个分支意味着三个基本的if语句,它们在一个代码体中相互独立。e、 g input (x, y) if (x<0) something if (x==y) something if (x > y) something output (x) 输入(x,y) if(x-y) 某物 输出(x) 我有一个覆盖第一个分支的测试用

在编写应该具有100%分支覆盖率的测试用例时,可以让一个用例覆盖两个分支,另一个用例只覆盖一个分支

注意:我们假设代码中只有三个分支

编辑:3个分支意味着三个基本的if语句,它们在一个代码体中相互独立。e、 g

input (x, y)
if (x<0)
    something
if (x==y)
    something
if (x > y)
    something
output (x)
输入(x,y)
if(x-y)
某物
输出(x)

我有一个覆盖第一个分支的测试用例和一个覆盖其他两个分支的测试用例

100%分支覆盖率?要求这样做的人是否有任何真实世界的测试覆盖经验?根据我的经验,对于相当复杂的项目,获得75-80%的代码覆盖率和大约60-70%的分支覆盖率是最好的。这些数字通常是原始的、预分析的数字。在消除不可能到达的代码片段后,它们会上升(约92-95%的代码和80-85%的分支),如断言、默认切换情况、“深度防御”代码路径等。
至于你的问题:测试用例越少越好。不要忘记,测试不仅需要时间来开发,还需要时间来运行和分析失败。在您第一次等待整个测试套件完成4天之后,您很快就会了解到将测试用例数量减少到最小的价值,从而使您对覆盖率有信心。

我个人将重点放在代码的行为上。因此,执行代码有三种不同的可能方式,因此应该有三种测试

这样想吧——如果两个分支中的一个中断,您可能不知道,因为测试仍然通过(因为另一个分支仍然工作),但生产代码失败。不理想


是的,这确实需要更多的时间,但在某些情况下,这是值得的。。。一切都是100%?也许没有达到那种极端的程度

测试是关于产品的一个问题。每个(书面)分支进行一次测试的想法可能有用,也可能愚蠢

我对你举的例子有一些疑问

输入(x,y)
如果(x y)
某物
输出(x)

如果x大于零会发生什么?你会失败吗?如果x小于y会发生什么?某物什么都没有

事情是这样的:代码(和分支)(和条件)覆盖率是好主意。但“覆盖”一条线、一条分支或一个条件意味着什么?它是为了确保程序能够工作——也就是说,在不崩溃的情况下执行给定的行/分支/条件吗?或者是为了确保该计划能起作用


---Michael B.

用一个例子回答这个问题会容易得多。。。否则,不同的人可能会以不同的方式解释“三个分支”。三个选择?三个分支点,每个分支点有两个选项?我假设“分支”的意思与“弧”相同,即机器指令的线性序列,只有一个入口和一个出口点。实际上,对于x,y和某物的情况,这里更有趣的是看“某物”是否可以改变x或y,在这种情况下,您肯定应该测试这种情况,因为可能不希望执行两个“something”。当然,这不是一个真实的例子,但我只是想举例说明测试人员应该具备的心态。因此,基本上,案例越少越好,我理解你所说的每一点都是正确的,但它不适用于这种情况,因为它不是“真实世界”。这是一个理论上的问题,被抛到了我的面前。我不能用“100%覆盖率!!!你疯了”来回答-我的回答是严格实用的。在现实世界中,开发和运行测试的时间确实很重要,实践表明,测试矩阵的指数级爆炸无法超越。如果讨论是学术性的,那么有人可以通过“但它没有涵盖所有可能的情况”来赢得争论,你说“谢谢你的宝贵意见”,然后继续……那么,如果其中一个分支失败,测试难道不能失败吗?测试可以记录哪个分支失败了?它可以,但是您的测试包含了额外的逻辑,这可能隐藏了它所涵盖的内容的真实意图。