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