@Test
public void testTestAfalse() {
PathTest pt = new PathTest();
Assert.assertEquals(pt.testA(true), “false”);
}
}
通过这个测试用例,我们就可以很容易的发现方法中的那个空指针错误。从这个例子来看,这个方法非常简单,因为它的圈复杂度只有2 ,像我们有些系统中某些方法的圈复杂度值高达150左右,那么你还能这么容易的发现你的程序缺陷吗?按理论值来算的话,你需要编写150个测试用例才能完成每个基本分支的测试。为什么要TDD模式开发?为什么要求大家都写单元测试?为什么评估软件质量要用覆盖率来评估?归根结底一句话:降低代码复杂度才能保证软件质量。
推荐大家使用圈复杂度计算的工具JavaNCSS,可以生成html报告。PMD等工具都可以评估代码复杂度。
在持续集成环境中,随时间变化评估方法的复杂度是很有必要的。如果某一方法的圈复杂度值在不断增长,那么您有两个响应选择:
1、确保相关测试用例的路径覆盖率是否覆盖到方法中所有的路径。
2、重构方法,降低长期维护风险。
延伸阅读
文章来源于领测软件测试网 https://www.ltesting.net/