3
0

More than 1 year has passed since last update.

品質の高いコードとは?

Posted at

品質とは?

品質には、外部品質と内部品質がある。
そして、プログラムの品質は、内部品質のことを指し、品質が悪いと修正や拡張のコストが高くなります。

説明
外部品質 ユーザーに見える要素で、仕様どおりに動く、バグがない、高速に動作する等
内部品質 ユーザーに見えない要素で、保守性や柔軟性、可読性、一貫性等

品質の高いコードとは?

擬集度と結合度がその指標になり、擬集度が高く、結合度が低いコードが品質が高いコードとなります。

品質高い 品質低い
擬集度 高い 低い
結合度 低い 高い

擬集度

モジュール内の機能のまとまりの程度を示すもの

高凝集はなぜいいのか?

凝集度の高いシステムでは、コードの読みやすさと再利用の容易さが増し、複雑さが管理可能な程度に抑えられます。

低擬集だと?

  • まとまりがなく、モジュールでやっていることを理解しづらく、読みにくい
  • 色々な関心ごとがあり、変更の可能性が上がる。そして、条件分岐などが発生し、可読性、保守性が下がる

凝集度の程度

説明 品質
偶発的擬集 適当に処理をまとめた関数 最悪
論理的凝集 IF文で実行を切り分けるているなど、論理的に似ている処理をまとめた関数
時間的凝集 実行順に意味はなく、特定の時間における処理がまとまった関数
手順的擬集 実行順に意味があり、特定の時間おける処理がまとまった関数
通信的擬集 実行順に意味があり、同じ値を使う関数
逐次的擬集 実行順に意味があり、手順間で値を受け渡し使う関数
機能的擬集 単一の機能の関数 最良

結合度

モジュール間の相互依存性の程度を示すもの

結合度が低いとなにがいい?

  • モジュール間の結合の数が少ないほうが、構造がシンプルになり、可読性が増す
  • モジュールを使う時に知っておくべき知識が少ないほど、モジュールの用途が理解しやすく使いやすいモジュールになります

結合度の程度

説明 品質
内部結合 他の関数と外部宣言されていない値で結合されている 最悪
共通結合 共通のグローバル変数と結合されている
外部結合 パブリック変数で結合されている
制御結合 利用する側はフラグなどを渡し、それを使って条件分岐する結合がされている
スタンプ結合 オブジェクトや構造体を渡すことで結合されている
データ結合 スカラー値を渡すことで結合されている
メッセージ結合 値の受け渡しをしない 最良

コードレビューにおいても活かされる

擬集度と結合度は、品質の高いコードの指標です。
コードレビューの際にその指標を踏まえ、コメントすることで、より品質の高いコードへの証明となり、説得力が増します。

コメント例 コメント種類
ASIS モジュールを分けた方が、読みやすくなると思います。 感覚的なコメント
TOBE 論理的擬集になるので、モジュールを分けましょう。その方が擬集度が上がり、可読性が増します。 論理的なコメント

参考資料

https://speakerdeck.com/sonatard/coheision-coupling
https://note.com/cyberz_cto/n/n26f535d6c575#E0aBe

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0