博客
希望我們能(néng)與您分享和探讨成(chéng)長(cháng)中的點點滴滴
什麼(me)是圈複雜度?
分享到
圈複雜度是衡量軟件質量的一個重要指标。
在這(zhè)裡(lǐ),我們將(jiāng)闡釋什麼(me)是圈複雜度和圈複雜度McCabe,并提供圈複雜度的示例。
本文將(jiāng)包含如下幾個部分:
• 什麼(me)是圈複雜度?
• 如何計算圈複雜度McCabe?
• 兩(liǎng)個圈複雜度的示例
什麼(me)是圈複雜度?
圈複雜度(Cyclomatic Complexity, 簡稱‘CYC’)是一種(zhǒng)用于确定程序複雜度的軟件度量指标。它是對(duì)源代碼中決策(decision)數量的計數。計數越高,代碼越複雜。
爲什麼(me)圈複雜度很重要?
圈複雜度有兩(liǎng)種(zhǒng)用法:
• 限制代碼複雜度。
• 确定所需測試用例的數量。
然而,圈複雜度可能(néng)是最難理解的軟件質量度量指标之一。這(zhè)使得圈複雜度(CYC)難以計算,也是爲什麼(me)了解軟件質量度量指标(比如,圈複雜度)以及如何準确地度量它們非常重要。
如何計算圈複雜度McCabe?
使用下面(miàn)的公式計算圈複雜度(CYC):
CYC = E – N + 2P
在這(zhè)個方程式中:
• P = 流程圖中斷開(kāi)部分的數量(例如,一個調用程序和一個子程序)
• E = 邊數(控制傳輸)
• N = 節點數(隻包含一次控制傳輸的順序語句組)
這(zhè)將(jiāng)轉化爲決策數量+ 1。
像“if”和“while”語句這(zhè)樣(yàng)的二進(jìn)制決策使得複雜度增加了1。
布爾運算符可能(néng)使複雜度增加1,也可能(néng)不增加複雜度。例如,如果在條件語句中找到布爾運算符,則複雜度就(jiù)會(huì)增加1。
兩(liǎng)個圈複雜度的示例
圈複雜度示例 1
以下是一個關于CYC的示例。
首先,這(zhè)個示例中看起(qǐ)來隻有一個決策。因此,CYC = 2。
然而,當您考慮布爾運算符的副作用時(shí),實際上有兩(liǎng)個決策。
因此,在這(zhè)個示例中,CYC = 3。
圈複雜度示例 2
CYC還(hái)有其他變體。
邁爾斯間隔(Myers’Interval)是CYC的擴展。它解釋了複合謂語造成(chéng)的複雜度。它使用CYC作爲下限,將(jiāng)上限定義爲代碼中條件的總數加1。它表示爲兩(liǎng)個值:
CYC:邏輯運算符個數
以下是一個使用邁爾斯間隔的示例。
以上示例的STMCC值爲3:4。它的CYC是3。在條件中使用一個連接詞(&&)。
不過(guò),複雜度僅僅是衡量軟件質量的一個指标。
低圈複雜度=更好(hǎo)的代碼
CYC數值宜小不宜大。
這(zhè)是因爲高複雜度的代碼很難測試,而且很可能(néng)會(huì)導緻錯誤。
因此,低複雜度的代碼更容易測試,而且不太可能(néng)産生錯誤。
欲了解如何降低代碼的複雜度并維護可讀的代碼庫,可以使用靜态代碼分析工具(如Helix QAC),立刻注冊申請免費試用吧。