1、圈復(fù)雜度:圈復(fù)雜度(Cyclomatic complexity)是一種代碼復(fù)雜度的衡量標(biāo)準(zhǔn),在1976年由Thomas J. McCabe, Sr. 提出。
專注于為中小企業(yè)提供成都做網(wǎng)站、網(wǎng)站設(shè)計(jì)服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)新北免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了上千企業(yè)的穩(wěn)健成長(zhǎng),幫助中小企業(yè)通過網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。
2、重要性:程序的可能錯(cuò)誤和高的圈復(fù)雜度有著很大關(guān)系。
在軟件測(cè)試的概念里,圈復(fù)雜度用來衡量一個(gè)模塊判定結(jié)構(gòu)的復(fù)雜程度,數(shù)量上表現(xiàn)為線性無關(guān)的路徑條數(shù),即合理的預(yù)防錯(cuò)誤所需測(cè)試的最少路徑條數(shù)。圈復(fù)雜度大說明程序代碼可能質(zhì)量低且難于測(cè)試和維護(hù)。
擴(kuò)展資料:
下面的列表顯示了?Visual Studio( VS 2008 Team Suite Edition)計(jì)算的代碼度量結(jié)果:
可維護(hù)性指數(shù):計(jì)算一個(gè)介于 0 和 100 之間的指數(shù)值,表示維護(hù)代碼的相對(duì)容易度。值越大表示可維護(hù)性越好。該計(jì)算基于 Halstead Volume、圈復(fù)雜度和代碼的行數(shù)。按顏色標(biāo)記的等級(jí)可用于迅速發(fā)現(xiàn)代碼中的故障點(diǎn)。
綠色等級(jí)介于 20 和 100 之間,表示代碼的可維護(hù)性良好。黃色等級(jí)介于 10 和 19 之間,表示代碼的可維護(hù)性中等。紅色等級(jí)是介于 0 和 9 之間的等級(jí),表示可維護(hù)性低。
圈復(fù)雜度:衡量代碼在結(jié)構(gòu)上的復(fù)雜程度。它通過計(jì)算程序流中的不同代碼路徑的數(shù)目(例如 if 塊、switch case 以及 do、while、foreach 和 for 循環(huán)),然后在總數(shù)中加 1 來創(chuàng)建。具有復(fù)雜控制流的程序需要更多單元測(cè)試才能實(shí)現(xiàn)良好的代碼覆蓋率,并且不容易維護(hù)。
繼承深度:指明擴(kuò)展到類層次結(jié)構(gòu)根的類定義的數(shù)目。層次結(jié)構(gòu)越深,則越難了解特定方法和字段是在何處定義或/和重新定義的。
在類級(jí)別,該數(shù)目是通過計(jì)算繼承樹中從 0 開始的類型之上的類型數(shù)目(不包括接口)來創(chuàng)建的。在命名空間和項(xiàng)目級(jí)別,該計(jì)算包括命名空間或項(xiàng)目?jī)?nèi)所有類型的最高繼承深度計(jì)算。
類耦合:通過參數(shù)、局部變量、返回類型、方法調(diào)用、泛型或模板實(shí)例化、基類、接口實(shí)現(xiàn)、在外部類型上定義的字段以及屬性修飾來衡量與唯一類的耦合程度。該計(jì)算不包括基元類型和內(nèi)置類型,例如 int32、字符串和對(duì)象。
良好的軟件設(shè)計(jì)要求類型和方法應(yīng)具有較高的內(nèi)聚力和較低的耦合。耦合較高表示設(shè)計(jì)難以重用和維護(hù),這是因?yàn)樗c其他類型之間存在許多依存關(guān)系。
代碼的行數(shù):指明代碼中的大概行數(shù)。該計(jì)數(shù)基于 IL 代碼,因此并不是源代碼文件中的確切行數(shù)。該計(jì)算不包括空白、注釋、括號(hào)以及成員、類型和命名空間的聲明。計(jì)數(shù)過高可能表示某個(gè)類型或方法正在嘗試執(zhí)行過多的工作,應(yīng)予以拆分。還可能表示該類型或方法難以維護(hù)。
參考資料來源:百度百科——圈復(fù)雜度
for(int?p=0;pn*n;p++)
for(int?q=0;qp;q++)
sum--;
下面我來簡(jiǎn)單解釋一下為什么是O(n^4)
p的所有取值,以及相對(duì)性的sum運(yùn)算的次數(shù)如下
p的取值:0??1??2??3??4??...??(n^2?-1)
sum次數(shù):0??0??1??2??3??...??(n^2?-2)
從上面的式子我們知道sum--執(zhí)行的次數(shù)也就是sum次數(shù)的累加和:
0+0+1+2+3+...+(n^-2)=1+2+3+?...?+(n^2?-2)這里我們可以用求和公式,但是需要搞定一個(gè)這里有多少項(xiàng),很明顯(n^2?-2)項(xiàng),帶入求和公式如下
=(1+(n^2?-2))*(n^2?-2)/2=(n^2?-1)(n^2?-2)/2=(n^4?-3*n^2?+2)/2
所以答案是O(n^4)
我覺得主要考慮和規(guī)模大小有關(guān)系的代碼段,比如循環(huán)部分的時(shí)間復(fù)雜度,對(duì)于o(1)代碼可以忽略掉
一般來說,圈復(fù)雜度大于10的方法存在很大的出錯(cuò)風(fēng)險(xiǎn)。
在軟件測(cè)試的概念里,圈復(fù)雜度用來衡量一個(gè)模塊判定結(jié)構(gòu)的復(fù)雜程度,數(shù)量上表現(xiàn)為線性無關(guān)的路徑條數(shù),即合理的預(yù)防錯(cuò)誤所需測(cè)試的最少路徑條數(shù)。
圈復(fù)雜度大說明程序代碼可能質(zhì)量低且難于測(cè)試和維護(hù),根據(jù)經(jīng)驗(yàn),程序的可能錯(cuò)誤和高的圈復(fù)雜度有著很大關(guān)系。
圈復(fù)雜度(Cyclomatic complexity)是一種代碼復(fù)雜度的衡量標(biāo)準(zhǔn),在1976年由Thomas J. McCabe, Sr. 提出。
如果一段源碼中不包含控制流語句(條件或決策點(diǎn)),那么這段代碼的圈復(fù)雜度為1,因?yàn)檫@段代碼中只會(huì)有一條路徑。
如果一段代碼中僅包含一個(gè)if語句,且if語句僅有一個(gè)條件,那么這段代碼的圈復(fù)雜度為2;包含兩個(gè)嵌套的if語句,或是一個(gè)if語句有兩個(gè)條件的代碼塊的圈復(fù)雜度為3。
計(jì)算公式:V(G)=e-n+2p。其中,e表示控制流圖中邊的數(shù)量,n表示控制流圖中節(jié)點(diǎn)的數(shù)量,p圖的連接組件數(shù)目(圖的組件數(shù)是相連節(jié)點(diǎn)的最大集合)。因?yàn)榭刂屏鲌D都是連通的,所以p為1。
對(duì)于多分支的CASE結(jié)構(gòu)或IF-ELSEIF-ELSE結(jié)構(gòu),統(tǒng)計(jì)判定節(jié)點(diǎn)的個(gè)數(shù)時(shí)需要特別注意一點(diǎn),要求必須統(tǒng)計(jì)全部實(shí)際的判定節(jié)點(diǎn)數(shù),也即每個(gè)ELSEIF語句,以及每個(gè)CASE語句,都應(yīng)該算為一個(gè)判定節(jié)點(diǎn)。
新聞標(biāo)題:java代碼計(jì)算圈復(fù)雜度 代碼的圈復(fù)雜度
標(biāo)題鏈接:http://www.rwnh.cn/article2/hhgjoc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供Google、做網(wǎng)站、企業(yè)網(wǎng)站制作、定制開發(fā)、網(wǎng)站收錄、軟件開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)