2017-10-10 170 views
2

W.r.t對java項目之一的影響,我們最近開始使用SonarLint。代碼分析的輸出顯示了太多關鍵代碼異味警報。認知複雜性及其對代碼

Critical code smell: Refactor this method to reduce its Cognitive Complexity. 

我聽說過圓形複雜性,但不是關於認知複雜性。 我對該羣組的問題:

  • 認知複雜性是行業標準嗎?
  • 除了可讀性和可維護性之外,認知複雜性對代碼的影響。
  • 認知複雜性是否僅適用於方法或代碼的任何其他部分?
  • 認知複雜性依賴於的任何特定標準?
  • 提高代碼的認知複雜度的最佳實踐。

我已經經歷了這個link,但無法得到我所有問題的答案。

在此先感謝。

+2

該鏈接還包含有關該主題的白皮書的鏈接,其中包含更多詳細信息。你也經歷過嗎? – janos

+0

謝謝你指出。我錯過了。該白皮書中的信息看起來足以讓開發人員對認知複雜性有一個正確的理解以及如何處理它。 – vmorusu

回答

5

人類可以很容易地記住大約7個實體+/- 2(wikipedia)。 當有人需要閱讀代碼時,他們可能會遇到這個限制。有時會有太多的局部變量需要跟蹤,或者太多的if/for語句。在所有情況下,它使得更難理解代碼應該做什麼,因爲很難對算法保持心理狀態。

行業標準:第

可讀性和可維護性:它更容易調試/提高代碼簡單且易於閱讀。

適用於方法或其他部分:一些人可能想要了解的東西。如果你試圖解釋你的設計,我需要跟蹤20個以上的課程,我會迷路。如果我需要快速使用你的界面,但我需要記住10位狀態,我將無法做到。

它依賴於的任何具體標準:事物的數量一旦需要記住來理解代碼。

最佳做法:製作更多更好的定義功能。將相關概念提取到組/包中。減少代碼中嵌套級別的數量(如果您閱讀嵌套代碼,則需要記住那裏的條件)。減少任何一點使用變量的數量(對提取函數很有效)。

+0

隨着您的意見,它看起來像我們可以在任何領域應用認知複雜性,不僅僅是編碼。讓我從不同方面探討其適用性。謝謝。 – vmorusu