链接:百度McCabe度量法
1.程序流程图转化为结点图(流图)
2.观察,根据结点图得出结点数和边数,强连通分量,带入环路复杂度公式
控制流图中包括两种图形符号:节点和控制流线
一个节点包含1个或多个连续的无分支语句
无分支:【理解实例一】
带or、and……的复合条件表达式需要转化成一系列单条件的嵌套判断
多个:【理解实例二】
单入单出的可以合并成一个节点
实例一:引用并细化Runner1st博客
程序流程图:
中间化简:
程序控制流图:
实例二:
程序流程图:
程序控制流图:
程序中,入口总能到达图中任何一个结点,因此程序总是连通的,但不是强连通的。
为了使图成为强连通图,从图的出口点到入口点加一条用虚线【不计入计算的边数】表示的有向边,使图成为强连通图。这样就可以使用下式计算环路复杂性了。
强连通的有向图G中,环的个数V(G)
V(G)=m-n+2p
m-弧数,n-结点数,p-强连通分量个数
(注:强连通图的p=1)
有向图中,两个顶点强连通:有向图G中,两个顶点vi,vj间有一条从vi到vj的有向路径,同时还有一条从vj到vi的有向路径。
强连通图:如果有向图G的每两个顶点都强连通,称G是一个强连通图。
强连通分量:有向图的极大强连通子图。
注意:
流图G的环形复杂度
=流图中的区域数(环路数)
=流图中**判定节点(谓词节点)**的数目+1