web-dev-qa-db-ja.com

認知の複雑さとコードへの影響

Javaプロジェクトの1つです。最近、SonarLintの使用を開始しました。コード分析の出力では、非常に多くの重大なコードにおいのアラートが示されています。

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

循環的複雑性について聞いたことがありますが、認知的複雑性については聞いていません。グループへの私の質問:

  • 認知の複雑さは業界標準ですか?
  • 可読性と保守性は別として、認知の複雑さがコードに与える影響。
  • Cognitive Complexityはメソッドまたはコードの他の部分にのみ適用されますか?
  • 認知複雑性が依存する特定の基準はありますか?
  • コードの認知の複雑さを改善するためのベストプラクティス。

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

前もって感謝します。

19
vmorusu

人間は7つのエンティティ+/- 2( wikipedia )について簡単に覚えることができます。誰かがコードを読む必要があるとき、この制限にぶつかる可能性があります。追跡するローカル変数が多すぎる場合や、if/forステートメントが多すぎる場合があります。すべての場合において、アルゴリズムの精神的な全体像を把握するのが難しいため、コードが何をすべきかを理解するのが難しくなります。

業界標準:いいえ.

読みやすさと保守性:シンプルで読みやすいコードのデバッグ/改善が容易です。

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

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

ベストプラクティス:より適切に定義された関数を作成します。関連する概念をグループ/パッケージに抽出します。コード内のネストレベルの数を減らします(ネストされたコードを読む場合、そこに到達した条件を覚えておく必要があります)。任意の時点で使用中の変数の数を減らします(関数の抽出に最適です)。

25
Sorin