最近一直在优化我们代码中的圈复杂度问题,然而优化完了之后圈复杂度是否满足要求了呢?靠我们人去算真的非常困难,而且也不准确。因为根据圈复杂度的计算公式,圈复杂度V(G)=e-n+p,其中,e表示控制流图中边的数量,n表示控制流图中节点的数量,p图的连接组件数目(图的组件数是相连节点的最大集合)。因为控制流图都是连通的,所以p为1。或者圈复杂度V(G)=区域数=判定节点数+1。使用第一种计算方法必须画出控制流图,非常麻烦,而且也很容易画错。使用第二种方法比较简单,但是对于for循环、冒号运算符的判定节点数如何算呢,至今我也没搞清楚,所以很有必要使用工具来计算圈复杂度。这里我推荐SourceMonitor检测工具,它的功能比较多,可以单独执行,也可以集成到Source Insight实时检测,非常好用,下面介绍如何将SourceMonitor的功能集成到Source Insight中。
工具/原料
1
sourceInsight
2
SourceMonitor
方法/步骤
2
打开Source Insight软件,单击Source Insight的“options”菜单,如下图
3
单击 “custom commands”菜单,弹出如下界面:
4
单击上图界面的Add按钮,弹出如下界面
5
在上图文本框中填上命令的名称,然后点击OK按钮后显示如下界面,比如你可以填:ComplexityTest界面图如下:
6
在上图Run中输入以下信息:'C:\Program Files (x86)\SourceMonitor\SourceMonitor.exe' /DC++ %s,其中C:\Program Files (x86)\SourceMonitor\ SourceMonitor.exe为SourceMonitor的安装路径。
7
点击上图的Keys按钮,弹出如下界面:
8
单击上图界面的Assign New Key按钮,弹出如下界面:
9
根据上图提示输入你自己想要的快捷键,比如ALT+1,界面如下:
10
单击上图界面的OK按钮。你还可以单击Menu按钮设置菜单,这里不做介绍。至此全部设置完成,下面就是使用了。
11
选中你要检测的文件或者某个函数,按下ALT+1键,弹出如下结果:
12
因为我这里选中的是一个函数,从上图看该函数的圈复杂度是2。如果你选中的是整个文件可以看到该文件所有函数的圈复杂度,界面如下:
13
从上图我们可以看到该文件每个函数的圈复杂度(图中第一列)。
上一篇:艾叶粑粑做法
下一篇:BIDS (5) 设计包控制流