在测试代码时,仅为每种方法编写一个或两个 单元测试是 不够的。编写单元测试时,目标不是测试每个方法,而是测试方法可能执行的每条指令。并且由于方法在复杂性方面可能有很大差异,因此对于开发人员来说,编写单元测试非常重要。
对某个指定方法有多个调用路径,这些执行路径的数量称为 McCabe圈复杂度 ,每个了解单元测试价值的组织应该将Java圈复杂度工具集成到他们的 Maven构建 和 CI 管道中。
当开发人员知道与某个指定方法相关的圈复杂度度量时,他们将知道要创建多少个不同的单元测试以彻底测试代码。此外,高圈复杂度指标是团队领导和敏捷教练的有用指标。它可以标记开发人员正在努力实现的故事或功能。由于任何方法的圈复杂度度量均接近10,因此警钟应响起。
那么,在整个 软件开发生命周期中 使用哪种最佳的圈复杂度工具呢?对于任何使用Eclipse的开发人员,Eclipse Metrics插件都是必备的。
并非每个人都会在本地计算机上安装Eclipse,因此团队中的每个人都不会有机会直接在源代码上运行圈复杂度指标检查。幸运的是,有一些Java圈复杂度工具可以直接配置到 Maven构建中, 或者成为CI管道测试阶段的一部分。
JaCoCo Jenkins plugin 检查在构建作业的测试阶段运行各种JUnit测试结果并生成代码覆盖率报告。JaCoCo Jenkins管道插件的另一个优点是它可以配置阈值。因此,如果任何方法的圈复杂度度量超过15,则插件将无法构建。如果在测试期间未涵盖路径的百分比(通过圈复杂度度量建立),JaCoCo Jenkins插件也可以强制构建失败。因此,它不仅提供了完整的报告,还可以确保未经测试的代码永远不会投入生产。
SonarQube 在七个独立的质量轴上生成度量标准,其中一个是代码覆盖率。这包括圈复杂度报告。SonarQube是开源的, 易于安装 ,可以通过 Git钩子 或 Jenkins构建作业 轻松集成。作为DevOps构建过程的一部分,没有充分的理由不从SonarQube生成高质量的代码度量标准。
如果您不是Eclipse开发人员,那么您就不会使用Jenkins并且手头没有SonarQube。不过,你很幸运,因为有一个简单,平等的圈复杂度工具,任何人都可以使用。我在说你的手指。
通过添加循环次数和条件数量然后计算总和来得出循环复杂度,当然,如果您需要计算 代码库 中的每个方法,它可能不是一种有效的方法。但是在代码审查或下午的结对编程中 - 实际上任何时候代码中都会出现相当大的方法 - 可能需要快速的圈复杂度计算。