SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

実例で学ぶ、コード品質の高め方

どうやってコード品質を測るのか? ソースコード品質の測定指標とその活用

第2回 コード品質の定量的な測定指標を理解しよう

  • X ポスト
  • このエントリーをはてなブックマークに追加

3.3 コードの重複(Code Duplication, Clone Code)

概要

 ソフトウェアの品質を測定する指標の中で、特に開発の効率やメンテナンスの容易さに影響を及ぼすのが「重複コード」の数です。重複コードは、クローンコードとも呼ばれ、主にコピペの結果発生した、同じまたは類似のコードの断片のことです。ロバート C. マーティンが、著書『Clean Code』で 「重複は、あらゆるソフトウェアの諸悪の根源」と述べているように、重複コードは以下のような問題の原因となります。

  • 保守性の低下:似たようなコードが複数の場所に存在する場合、1つのバグや変更要求が生じたとき、すべての重複部分を探して修正する必要があります。これはエラーの原因となる可能性が高く、時間もかかります。
  • 理解の困難:新しい開発者がチームに参加したとき、重複したコードを見つけると、どの部分が正しいのか、どれを参考にすればよいのか混乱する可能性があります。
  • テストの困難:重複コードの存在は、テストの範囲や複雑性を増加させる可能性があります。あるロジックにバグがないかテストする場合、そのロジックが存在するすべての場所をテストしなければなりません。テスト作業が煩雑になり、テスト漏れも発生しがちです。

 最終的には、納期遅延、開発コストの増加など、ビジネス上の問題として顕在化します。

指標の使い方

 重複コードを検出するためのツールは、Clone DetectiveSimianPMDSonarQubeなどいくつかあります。これらのツールは、ソースコード中の類似のパターンを検出し、その位置や範囲を報告します。これらのツールを用いて重複コードが見つかったら、次にそれに対処するか否か決断する必要があります。対処方法としては、具体的にはまとめて共通関数化したり、不必要であれば削除したりするなどです。

 重複コードはなるべく減らした方が良いことは間違いないのですが、「異なるビジネス要件に対して、チームが一貫したアプローチをとったためにたまたまコードが似てしまった」ということもありえます。採用しているフレームワークや言語仕様上、どうしてもコードが似てしまうこともあるでしょう。対処するか否かの判断は単純ではなく、重複コード毎に変わるものなので、容易ではありません。そのため筆者らは、既存のツールより一歩進んで、重複コードを検出するだけでなく、重要度を測定してどう対処すべきかを管理するツールClone Trackerを開発しています。

 検出した重複コードを使ってコード品質を測定するなら、例えば、プロジェクトのコード行数に対する重複コード行数の割合、つまり「重複率」を測定することができます。この「重複率」をKPIとして利用しているチームも多いでしょう。では、重複率がどのぐらいまでであれば、コード品質が健全と言えるでしょうか?

 低い方がより良いだろう、ということは自明だと思いますが、先に紹介した循環的複雑度とは異なり、実は重複度に関しては明確な基準値はありません。重複度は、使用している言語や技術、開発対象によってもかなり変動します。また、先に紹介した各種重複コードの検知ツールのアルゴリズムはそれぞれ独自のものが多く、出力される重複コードの検出数は相互に比較できません。以上の理由から、重複度に関しては、その絶対値よりも値の時系列変化に着目した方が良いでしょう。ある程度の期間の中で何か著しい増加が観測されたら、チームを集めてその原因や対処方法について検討してみて下さい。

次のページ
その他の指標とまとめ

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
実例で学ぶ、コード品質の高め方連載記事一覧

もっと読む

この記事の著者

浅原 明広(株式会社Sider)(アサハラ アキヒロ)

 日本IBM、株式会社フィックスターズなどで、半導体製造装置や医療画像機器など、大小様々な組み込み製品向けのソフトウェア開発プロジェクトに従事。 現在、フィックスターズ子会社の株式会社Sider にて、ソースコードのコピペ管理ツール『CloneTracker』を開発・提供。最新のツールや方法論を用いた、ソフトウェア開発者体験の向上に強い関心を持つ。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

千葉 滋(東京大学情報理工学系研究科教授)(チバ シゲル)

東京大学 情報理工学系研究科 創造情報学専攻 教授

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/18337 2023/09/22 11:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング