Java中语句、分支和路径覆盖测试[2] 软件测试
在 returnInput() 中有一个明显的bug。如果第一个或第二个决策计算为真而其他的计算为假,返回值则不等于该方法的输入值。精明的软件开发人员会立即注意到这个问题,但语句覆盖报告却显示为100%的覆盖率。如果管理员发现覆盖率为100%,他/她可能会受到虚假的安全感的影响,判定测试已经完成,继而发布错误百出的代码,将之投入生产。
仅仅认识语句覆盖是不够的,开发人员必须进一步使用更为完善的测试技术:分支覆盖。
分支覆盖
分支是指决策的结果,因而分支覆盖可以评测已测试的决策结果。这听起来不错,因为这样可以比语句覆盖更深入地查看源代码,但分支覆盖也会提出更多的要求。
确定方法中的分支数量非常容易。布尔决策无疑只有两种结果:真和假,而开关对于每种情况来说都只有一种结果——别忘了默认情况!方法中的决策结果总数等同于方法中需要覆盖的分支与输入分支的总和。(毕竟,使用直线代码的方法也有一个分支)。
在以上示例中, returnInput() 具有七个分支——三个是真,三个是假,还有一个是用于方法输入的隐藏分支。您可以用两个测试用例来覆盖六个真和假的分支:
图3. 分支覆盖