0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Javaメトリクスとは_メモ_20200818

Posted at

#メトリクス

1.メトリクスとは

  便利なメトリクスたち

  メトリクスとは、モデルを構成するクラスやメソッド、クラス間の関係、パッケージ間の関係などを、
  複雑さや結合度、凝集度などの観点から測定し、数値として表すものです。

  ソフトウェア開発で用いられるメトリクスには、マイナーなものも含めると非常にたくさんの種類があります。
  ただし、あまり高度なメトリクスを勉強しても実践の場でうまく使いこなすことは難しいです。
  ですので本資料では便利な3つの指標、「LOC」「CC」「WMC」だけに絞って学習します。
  たくさん覚えても使う機会がないと忘れてしまいますしね。

  メトリクス利用のメリットデメリット

  <メリット>

  コードの規模や複雑さ、凝集度(互いに関連する要素のコード内での散らばり具合)、
  結合度(クラスやパッケージの独立性の高さ)などを専用のツールを使って計測し、
  一定の目標を定めて改善していくことができる。
  

  <デメリット>

  たくさん存在するので覚えるのに時間がかかる

2.LOC

規模を大まかに把握できる LOC

  **LOC(Line of Code)**は、その名の通りプログラムの行数を表します。
  たとえば、中身が200行のプログラムの場合、LOCは200です。
  ただし、空行やカッコだけの行など、プログラムの本質とは関係のない行をカウントしないなど、
  いくつかの数え方があります。

  また、行数が多い場合は1000行単位で数えるKLOCを使うこともあります。
  (80000行のプログラムは80KLOC)※今回資料では覚える必要はありません。

  LOCの特徴

  コードの書き方や数え方によって容易に増減するメトリクスであるため厳密な運用には向きません。
  あくまで規模を大まかなとらえるための道具と割りきって使いましょう。

3.CC

メソッドの複雑さを示すCC

  CC(Cyclomatic Complexity)はトーマス・マッケーブという人が開発したメトリクスで、
  「マッケーブの循環的複雑度
」とも言います。
  CCはある特定のメソッドの中身がどれだけ複雑なのかを表す1以上の数値であり、
  大きいほど複雑であることを示しています。

  具体的には、ifによる分岐やforによるループが多く使われるほど高い数値を示します。
  あまりにも複雑なメソッドは、読みづらく、バグになりやすく、後々の修正も大変です。
  開発中の各メソッドについて、CCが一定以上に抑えられているかチェックし、
  あまりにCCが大きいものは修正したほうが良いこともあります。

  CCの特徴

  高ければ高いほどバグが混入する確率も上がるので、修正をする際に使うこともあると
  考えられます。

4.WMC

クラス複雑度を示すWMC

  **WMC(Weighted Method Per Class)**は、あるクラスに含まれる全メソッドのCCを合計した値であり、
  クラスの複雑度を表します。
  WMCが異常に大きい値を示しているクラスは、複数に分割できるかを考えたほうがよさそうです。

WMCが大きい時の対応

  ・メソッドの機能を分割する

  ・構造を簡単にできるか検討する

  WMCの特徴

  CCを合計した値になるので、大きければ大きいほど自分が開発しているものが
  複雑になりすぎているか、読みにくいかなどがわかる。

※どうでもいい方は読み飛ばしてください
<筆者の所感>

実際に開発現場で自分が製造を任された際にメトリクスも気を付けて製造しようと思った。

0
1
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
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?