圈复杂度(Cyclomatic complexity)也称为条件复杂度或循环复杂度,是一种软件度量,是由Thomas J. McCabe, Sr. 在 1976 年提出,用来表示程序的复杂度,其符号为 VG 或是 M。圈复杂度是对源代码中线性独立路径数的定量测量。
圈复杂度使用的程序的控制流图来计算:在图中的节点对应于程序中一组不可分割的命令[代码行],有向边连接两个可连续执行的节点;[可连续执行的两个节点:第二个节点的命令组可能在第一个节点执行后立刻开始执行]。圈复杂度可以应用到独立的功能,模块,方法或类。
基础路径测试:通过测试用例测试程序中的每个线性无关的独立路径;在这种测试策略下,测试用例的数目将等于该程序的圈复杂度;
圈复杂度定义
圈复杂度度量的是程序中线性独立路径的数量;例如:如果程序中不包含控制、判断、条件语句(例如 if,swith 等),那么复杂度就是 1 ;因为整个程序只有一条执行路径;如果程序包含一条IF语句,那么就会有两条路径来执行完整个程序(IF为 TRUE,IF 为 FALSE),所以这时候的复杂度就是 2;两个嵌套的 IF 语句,或者包含两个判断条件的一个 IF 语句,复杂度就是 4;
在数学上,一个结构化程序的圈复杂度通过该程序的控制流图来定义;控制流图包含程序的基本块(图的节点),和两个基本块之间可执行性(图的边)。
原理:

上图:单程序的控制流图。此程序由红色的节点开始运行,然后进入循环(红色节点下由三个节点组成),离开循环后有条件分支,最后运行蓝色节点后结束,此控制流图中,E = 9, N = 8, P = 1,因此其圈复杂度为 9 - 8 + (2*1) = 3
数学表达式:
M = E - N + 2P
其中 <

圈复杂度是衡量程序复杂度的一种度量,由Thomas J. McCabe, Sr.在1976年提出。它基于程序控制流图计算,表示线性独立路径数量。基础路径测试中,测试用例数等于圈复杂度。高圈复杂度通常与低内聚性和更多的潜在缺陷相关。软件开发者通常限制模块的圈复杂度以提高可维护性和测试效率。"
122390701,141844,Suricata6.0流回收详解:FlowRecycler机制,"['开源工具', '网络安全', '流量分析']
1474

被折叠的 条评论
为什么被折叠?



