在工作中,我們正在研究導致高迴圈複雜性的常見問題。例如,擁有大的if-else語句可能會導致高複雜度,但可以通過用多態性替換條件來解決。你發現了什麼其他例子?環複雜性的常見原因及其解決方案
回答
查看NDepend的definition of Cyclomatic Complexity。
Nesting Depth也是一個很好的代碼度量。
循環複雜性是一種流行的過程軟件度量,它等於過程中可以採取的決策數量。具體而言,在C#中,方法的CC是1 + {在方法體中發現的以下表達式的數量}:
if |而|爲| foreach |案例|默認|繼續| goto | & & | || | catch |三元運算符?:| ??
以下表達式不計算CC計算:
其他|做|開關|嘗試|使用|扔|終於|返回|對象創建|方法調用|字段訪問
適應OO世界,此度量定義在方法和類/結構(作爲其方法CC的總和)上。請注意,計算其外部方法的CC時,不計算匿名方法的CC。
建議:CC高於15的方法難以理解和維護。 CC高於30的方法非常複雜,應該用較小的方法拆分(除非它們是由工具自動生成的)。
不錯,你可以添加它的計算方式。 – 2012-12-27 19:33:46
避免使用這麼多if的另一個例子是它實現了一個有限狀態機。因爲事件引發了轉換,所以條件被隱含在一個更清晰的方式中,這些轉換改變了系統的狀態。控制更容易。
離開你的鏈接,其中提到了一些的it's好處:
http://www.skorks.com/2011/09/why-developers-never-use-state-machines/
- 1. Postgresql複製解決方案及其性能
- 2. 需要解釋算法的時間複雜性解決方案
- 3. 複雜的SELECT環路(基於以前的解決方案)
- 4. 驗證NP-hard優化問題解決方案的複雜性?
- 5. 解決簡化生成真正的解決方案並全面解決簡化複雜的解決方案?
- 6. Magento經常性計費解決方案
- 7. 如何使SED復發(太複雜的解決方案)
- 8. 瞭解矩陣解決方案的時間複雜度
- 9. 過於複雜的工廠方法 - 任何解決方案?
- 10. 性能的解決方案
- 11. PHP Ajax Laravel問題的原因很明顯,但解決方案?
- 12. 迭代器訪問衝突的原因和解決方案
- 13. Google Fit錯誤19的可能原因和解決方案
- 14. SQL轉儲導入錯誤的原因和解決方案
- 15. 緩慢工作的原因和解決方案
- 16. PHP循環解決方案
- 17. 解決方案常量
- 18. 爲什麼遞歸解決方案比DP解決方案有更復雜的基礎案例?
- 19. 無法找到解決方案的一些複雜和不尋常的要求
- 20. 分詞的遞歸解決方案的時間複雜度?
- 21. 紅寶石複雜的查詢優雅的解決方案
- 22. 重複解決方案
- 23. ReSharper:修復解決方案
- 24. 嵌套循環解決方案樹的複雜度如何等於O(n)
- 25. VBA編譯錯誤什麼原因和解決方案?
- 26. 我想知道這個原因和解決方案
- 27. 維護基於角色的安全性的複雜解決方案
- 28. 針對常見可用性問題的典型GUI解決方案的網站?
- 29. 基本問題複雜的解決方案 - Tomcat到JBoss
- 30. 使用lxml進行python編碼 - 複雜的解決方案
任何構造了一個分支行爲增加了圈複雜度 – 2010-02-02 16:33:35
http://en.wikipedia.org/wiki/Cyclomatic_complexity: – 2010-02-02 16:34:08
你說「圈複雜性」就像它本身就是一件壞事。你看看導致實際問題的原因,你會不會做得更好? – 2010-02-02 16:39:58