【中级软考】什么是McCabe测量法(McCabe复杂性度量、环路度量。计算有向弧数、结点数、强连通分量个数)
McCabe度量法是由托馬斯·麥克凱提出的一種基于程序控制流的復雜性度量方法。McCabe復雜性度量又稱環路度量。它認為程序的復雜性很大程度上取決于程序圖的復雜性。單一的順序結構最為簡單,循環和選擇所構成的環路越多,程序就越復雜。這種方法以圖論為工具,先畫出程序圖,然后用該圖的環路數作為程序復雜性的度量值。程序圖是退化的程序流程圖。也就是說,把程序流程圖的每一個處理符號都退化成一個結點,原來連接不同處理符號的流線變成連接不同結點的有向弧,這樣得到的有向圖就叫做程序圖。
程序圖僅描述程序內部的控制流程,完全不表現對數據的具體操作分支和循環的具體條件。因此,它往往把一個簡單的IF語句與循環語句的復雜性看成是一樣的,把嵌套的IF語句與CASE的復雜性看成是一樣的。
根據圖論,在一個強連通的有向圖G中,環的個數V(G)由以下公式給出:
V(G)=m-n+2p其中,V(G)是有向圖G中環路數,m是圖G中弧數,n是圖G中結點數,p是圖G中強連通分量個數。在一個程序中,從程序圖的入口點總能到達圖中任何一個結點,因此,程序總是連通的,但不是強連通的。為了使圖成為強連通圖,從圖的出口點到入口點加一條用虛線表示的有向邊,使圖成為強連通圖。這樣就可以使用上式計算環路復雜性了。
例1:
(2016年上半年試題)對下圖所示流程圖采用白盒測試方法進行測試,若要滿足路徑覆蓋,則至少需要___個測試用例。采用McCabe度量法計算該程序對環路復雜性為___。
路徑覆蓋是指設計若干個測試用例,覆蓋程序中的所有路徑。
上圖中一共有6條路徑:12345678,1234568,1235678,123568,12678,1268。
根據McCabe度量法環路復雜性公式V(g)=m-n+2p,圖中m=10,n=8,p=1,V(g)=10-8+2=4。
那么答案應是:6個用例,環路復雜度為4。
【紅色虛線為強連通】
例2:
(2015年上半年試題)若采用白盒測試方法測試以下代碼,并滿足條件覆蓋,則至少需要___個測試用例。采用McCabe度量法算出該程序的環路復雜性為___。
int find_max(int i, int j, int k){int max;if(i > j) {if(i > k){max = i;} else {max = k;}} else {if(j > k) {max = j;} else {max = k;}}return max; }一開始我隨手畫的流程圖:(貌似缺了很多東西。。。)
改良之后:
上圖中一共有4條路徑,測試需要4個用例。
根據McCabe度量法環路復雜性公式V(g)=m-n+2p,圖中弧數m=9,節點數n=7,p=1,V(g)=9-7+2=4。
那么答案應是:4個用例,環路復雜度為4。
參考文章1:軟考必考題型之McCabe度量法
參考文章2:McCabe度量方法計算程序復雜度
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的【中级软考】什么是McCabe测量法(McCabe复杂性度量、环路度量。计算有向弧数、结点数、强连通分量个数)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何绘制计算机软件程序流程图?
- 下一篇: 英语网络聊天中的一些习惯性缩写