我使用Mccabe代碼複雜度作爲我的度量來評估我的代碼庫,但它只給出了每個單獨函數的代碼複雜度分數。 整體代碼複雜度分數由我的代碼庫中所有函數的分數總和給出。 我試圖想出一個規範化的指標(考慮到代碼行),以反映我們努力降低代碼庫複雜性的趨勢。 (因爲我們知道移除/添加函數會改變複雜度分數,但複雜性不會改變)。 有沒有一個標準的方法來做到這一點?我的意思是像平均複雜性有點兒?整個代碼庫的代碼複雜性度量
0
A
回答
1
McCabe代碼複雜性度量是意味着功能,而不是整個程序。簡而言之:如果函數的McCabe數超過一定的限制(vulga:spaghetti代碼),則應將其分解爲幾個更簡單的函數。
實際度量值是可能路徑的數量。這對於單個函數來說是相對容易的,但是對於幾個函數來說,如果它們是依賴的,也就是說,如果這些函數互相調用,就會非常複雜。所以如果你有獨立的功能(例如:一個庫),你可以添加它們,但是如果它們是依賴的(例如:一個完整的程序),你必須通過整個程序來計算所有可能的路徑。如果一個節點是一個函數,你必須包含McCabe編號,如果沒有(例如:一個簡單的分支),你可以將它包含爲1(一),就像在一個函數中一樣。
所以:
- 獨立的功能:添加所有
- 獨立功能:
- 稱爲線性方式(單路):添加所有
- 稱爲在兩個方面(兩個線性路徑):在每個路徑中添加函數並添加兩個路徑,就像函數中的分支一樣
- 中調用的函數n方法(n線性路徑):在每個路徑中添加函數並添加所有路徑,就像函數中的分支一樣
- 依賴函數:像上面那樣,但是因爲您需要計算所有可能的路徑很快。
您可以自動化,當然這一切。好的,你需要爲你的語言編寫一個解析器,它能夠計算所有可能的路徑,如果這是值得的錢,我不知道。
此外:通過將大功能分成幾個更簡單的功能,可以減少功能的MacCabe編號。現在,你如何完成一個完整的程序?將它分成幾個更簡單的程序/庫?是的,我認爲這會奏效,所以你的想法聽起來很合理。
但它仍然是很多工作。
順便說一句:它可能是我的寵物,但我不認爲LoC的數量與複雜性有很大關係。對於除了代碼行數之外的任何內容,LoC是一個非常糟糕的指標。
相關問題
- 1. python代碼的複雜性
- 2. 用於計算代碼塊代碼複雜度的現有庫
- 3. 針對MVVM程序複雜性的代碼度量KPI
- 4. PHP密碼複雜性檢查代碼
- 5. 複雜SQL代碼
- 6. 分析代碼片段的複雜度
- 7. 給定代碼的時間複雜度
- 8. 下面代碼的時間複雜度?
- 9. 給定代碼的時間複雜度。
- 10. 此代碼的時間複雜度
- 11. 降低代碼的圈複雜度
- 12. 給定代碼的時間複雜度?
- 13. 代碼來獲得Java代碼的複雜性
- 14. 查找給定代碼的複雜性
- 15. 該代碼的複雜性是什麼?
- 16. 給定代碼的複雜性?
- 17. 減少了代碼的複雜性GWT
- 18. 時間以下代碼的複雜性..?
- 19. 以下代碼的複雜性
- 20. 計算時間代碼的複雜性
- 21. 代碼Cobertura工具的複雜性
- 22. 代碼片段的複雜性
- 23. 措施代碼的複雜性
- 24. 時間代碼的複雜性
- 25. 時間複雜度練習(僞代碼)
- 26. 時間複雜度僞代碼
- 27. 發現複雜的代碼
- 28. 認知複雜性及其對代碼
- 29. 代碼度量
- 30. 測量Java代碼的經驗計算複雜度的工具?
*「...但它只給..」* - 什麼是*它*?你有一個工具?查找另一個評估整個代碼的工具。 –
https://people.debian。org /〜bame/pmccabe/pmccabe.1它確實提供了整個代碼庫的數量,但它只是簡單地加起來的數字.... – yangjeep