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