如何计算并测量ABAP及Java代码的环复杂度Cyclomatic complexity

简介: 代码的环复杂度(Cyclomatic complexity,有的地方又翻译成圈复杂度)是一种代码复杂度的衡量标准,在1976年由Thomas J. McCabe, Sr. 提出。在软件测试的概念里,圈复杂度用来衡量一个模块判定结构的复杂程度,数量上表现为独立线性路径条数,即合理的预防错误所需测试的最少路径条数。圈复杂度大说明程序代码可能质量低且难于测试和维护。

代码的环复杂度(Cyclomatic complexity,有的地方又翻译成圈复杂度)是一种代码复杂度的衡量标准,在1976年由Thomas J. McCabe, Sr. 提出。


在软件测试的概念里,圈复杂度用来衡量一个模块判定结构的复杂程度,数量上表现为独立线性路径条数,即合理的预防错误所需测试的最少路径条数。圈复杂度大说明程序代码可能质量低且难于测试和维护。

image.png



计算公式

环复杂度 = E − N + 2


E = 程序控制流图中边的个数


N = 程序控制流图中点的个数


看个具体的例子。下面这段ABAP代码的环复杂度根据公式计算为3.

image.png

先把代码的程序流图画出来:


image.png


在ABAP里用Code inspector这个工具测量代码的环复杂度:


image.png


具体步骤参考我的ABAP博客:


A Small tip to get all transparent tables used in ABAP code


Useful tips regarding ABAP code inspector that you may not know


而Java可以用一个叫做SourceMonitor的工具测量环复杂度:



image.png



详细使用参考我的博客Use SourceMonitor to monitor your java code complexity


image.png

相关文章
|
4月前
|
存储 Java
Algorithms_入门基础_如何使用最高效的方式来判断一个数是否是2的N次方
Algorithms_入门基础_如何使用最高效的方式来判断一个数是否是2的N次方
38 0
|
2月前
|
算法 搜索推荐 程序员
C++标准库算法指南:从线性到复杂度 — 选择最佳工具
C++标准库算法指南:从线性到复杂度 — 选择最佳工具
51 0
|
4月前
|
存储 算法 搜索推荐
Java常见算法-算法与程序、公式、数据结构的区别
算法、程序、公式和数据结构是计算机科学中的基本概念,它们之间有着密切的联系,但各自有着独特的含义和作用。
|
9月前
|
Java C语言
逻辑训练--经典汉诺塔问题(C和JAVA递归实现)
逻辑训练--经典汉诺塔问题(C和JAVA递归实现)
|
11月前
|
机器学习/深度学习
装箱问题-简化版本动态规划
装箱问题-简化版本动态规划
130 0
|
11月前
|
Java
Java实现最优选择
Java实现最优选择
59 0
Java实现最优选择
|
12月前
|
Java
Java每日一练(20230516) 最小栈、组合总和II、相同的树
Java每日一练(20230516) 最小栈、组合总和II、相同的树
53 0
|
存储 算法 Java
Floyd(弗洛伊德)算法求解每对顶点之间的距离(Java语言)
Floyd(弗洛伊德)算法求解每对顶点之间的距离(Java语言)
103 0
|
算法 Java Go
运筹优化学习21:Java调用Cplex实现求解Cuting Stock Porblem的列生成算法详解(下)
运筹优化学习21:Java调用Cplex实现求解Cuting Stock Porblem的列生成算法详解
运筹优化学习21:Java调用Cplex实现求解Cuting Stock Porblem的列生成算法详解(下)
|
算法 Java Go
运筹优化学习21:Java调用Cplex实现求解Cuting Stock Porblem的列生成算法详解(上)
运筹优化学习21:Java调用Cplex实现求解Cuting Stock Porblem的列生成算法详解
运筹优化学习21:Java调用Cplex实现求解Cuting Stock Porblem的列生成算法详解(上)