2016-08-09 92 views
0

我使用Mccabe代碼複雜度作爲我的度量來評估我的代碼庫,但它只給出了每個單獨函數的代碼複雜度分數。 整體代碼複雜度分數由我的代碼庫中所有函數的分數總和給出。 我試圖想出一個規範化的指標(考慮到代碼行),以反映我們努力降低代碼庫複雜性的趨勢。 (因爲我們知道移除/添加函數會改變複雜度分數,但複雜性不會改變)。 有沒有一個標準的方法來做到這一點?我的意思是像平均複雜性有點兒?整個代碼庫的代碼複雜性度量

+0

*「...但它只給..」* - 什麼是*它*?你有一個工具?查找另一個評估整個代碼的工具。 –

+0

https://people.debian。org /〜bame/pmccabe/pmccabe.1它確實提供了整個代碼庫的數量,但它只是簡單地加起來的數字.... – yangjeep

回答

1

McCabe代碼複雜性度量是意味着功能,而不是整個程序。簡而言之:如果函數的McCabe數超過一定的限制(vulga:spaghetti代碼),則應將其分解爲幾個更簡單的函數。

實際度量值是可能路徑的數量。這對於單個函數來說是相對容易的,但是對於幾個函數來說,如果它們是依賴的,也就是說,如果這些函數互相調用,就會非常複雜。所以如果你有獨立的功能(例如:一個庫),你可以添加它們,但是如果它們是依賴的(例如:一個完整​​的程序),你必須通過整個程序來計算所有可能的路徑。如果一個節點是一個函數,你必須包含McCabe編號,如果沒有(例如:一個簡單的分支),你可以將它包含爲1(一),就像在一個函數中一樣。

所以:

  • 獨立的功能:添加所有
  • 獨立功能:
    • 稱爲線性方式(單路):添加所有
    • 稱爲在兩個方面(兩個線性路徑):在每個路徑中添加函數並添加兩個路徑,就像函數中的分支一樣
    • 中調用的函數n方法(n線性路徑):在每個路徑中添加函數並添加所有路徑,就像函數中的分支一樣
    • 依賴函數:像上面那樣,但是因爲您需要計算所有可能的路徑很快。

您可以自動化,當然這一切。好的,你需要爲你的語言編寫一個解析器,它能夠計算所有可能的路徑,如果這是值得的錢,我不知道。

此外:通過將大功能分成幾個更簡單的功能,可以減少功能的MacCabe編號。現在,你如何完成一個完整的程序?將它分成幾個更簡單的程序/庫?是的,我認爲這會奏效,所以你的想法聽起來很合理。

但它仍然是很多工作。

順便說一句:它可能是我的寵物,但我不認爲LoC的數量與複雜性有很大關係。對於除了代碼行數之外的任何內容,LoC是一個非常糟糕的指標。