2017-10-10 38 views
2

W.r.t Javaプロジェクトの1つに、我々は最近SonarLintを使い始めました。コード分​​析の結果が非常に多くの重要なコードの匂いの警告を示しています。認知の複雑さとそのコードへの影響

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

私はCyclomatic Complexityについて聞いたことがありますが、Cognitive Complexityについては聞いていません。 グループへの私の質問:

  • 認知的複雑さは業界標準ですか?
  • 可読性と保守性のほかに、認知の複雑さがコードに及ぼす影響。
  • コグニティブな複雑さは、メソッドやコードの他の部分にのみ適用されますか?
  • 認知的複雑性が依存する特定の基準はどれですか?
  • コードの認知の複雑さを改善するためのベストプラクティス。

私はこれを行ってきましたが、link私はすべての私の質問に答えを得ることができませんでした。

ありがとうございます。

+2

このリンクには、詳細に関するホワイトペーパーへのリンクも含まれています。あなたもそれを経験しましたか? – janos

+0

それを指摘してくれてありがとう。私は逃した。このホワイトペーパーの情報は、開発者が認知の複雑さをよく理解していて、それにアプローチする方法を十分に示しています。 – vmorusu

答えて

5

人間は約7つのエンティティ+/- 2(wikipedia)を簡単に覚えています。 誰かがコードを読む必要があるとき、この制限に達することがあります。場合によっては、追跡するローカル変数が多すぎるか、if/forステートメントが多すぎることがあります。どのような場合でも、アルゴリズムの精神的な描写は難しいので、コードが何をするべきかを理解することが難しくなります。

業界標準:いいえ

可読性と保守性:それはデバッグに簡単です/シンプルで読みやすいコードを向上させます。

メソッドやその他の部分に適用されます。人間が理解したいことがあるものすべて。あなたのデザインを説明しようとすると、私は20以上のクラスを追跡する必要があります、私は失われます。あなたのインターフェイスですばやく作業する必要があるが、10ビットの状態を覚えておく必要がある場合、私はできないでしょう。

依存する特定の基準:コードを理解するために覚えておく必要がある物量。

ベストプラクティス:より明確に定義された機能を作成します。関連する概念をグループ/パッケージに抽出します。コード内のネストレベルの数を減らします(ネストしたコードを読んだ場合は、そこにある条件を覚えておく必要があります)。任意の1点で使用変数の数を減らしてください(関数を抽出すると効果的です)。

+0

あなたのコメントでは、コーディングだけでなく、あらゆる分野で認知的複雑さを適用できるようです。さまざまな側面でのその適用性を探そう。ありがとう。 – vmorusu

関連する問題