定義:各クラスの全メソッドの複雑さの総和
メソッド自体の「複雑度」というのは、上記の論文の中では明示的に定義していません。それは、メソッド自体の複雑性自体は従来のメトリックスにより測定可能と考えられているためで、通常よく使われるものとしては、T. McCabe?による「CC - Cyclomatic Complexity」や、単純にメソッドのパラメータの数を複雑度とするもののメソッドの中で、送られるメッセージの数に重みを付けて測定する方法などがあります
CC補足
定義:それぞれのクラスにおける継承度の深さ
継承によりプログラムを再利用することは有用なのですが、継承は最も強い依存関係を生みます。従って、継承が深ければ深いほど、そのクラスに影響を与えるクラスが多く存在することになります。また、継承が深いほど、そのクラスが持つメソッドが多くなり(上位のメソッドを受け継ぐため)、そのクラスを理解することが難しくなります。
定義:それぞれのクラス直下のサブ・クラス(チャイルド・クラス)の数
直系のサブ・クラスが非常に多い場合は、抽象化が正しく行われていない可能性もあります。また、NOCが高いということは、そのクラスを再利用しているクラスが多いというわけなので、そのクラスのテストが煩雑になる傾向があります
定義:それぞれのクラスと結合しているクラスの総和
結合しているクラスとは、ターゲットのクラスが、属性、パラメータ、戻り値、例外、ローカル変数として使用している型と、その型の属性やメソッドの呼び出しで使用されている型を含みます。また、この総和の中には、同一の型は1回のみカウントされ、継承元のクラスやプリミティブ型は含まれません。
定義:それぞれのクラスに対して呼び出し可能なメソッドの総和
RFCは継承によるメソッドの総和になるため、継承関係が深いものや、継承元のクラスに多数メソッドがある場合、そのクラスのRFCは高くなります。
オブジェクト指向言語において、着目しているクラスに、互いに関連するメンバ変数とメソッドが十分に集まっている、つまり局所化されているのであれば、そのクラスのメンバ変数1つ当たりへアクセスするメソッドの数は多くなります。その点に着目したメトリクスの1つがLCOM*(Lack of Cohesion in Methods)です
定義:それぞれのクラスにおける、属性によるメソッドの不同性(凝集度の欠如)
少し難しいいい回しですが、つまり「それぞれのメソッドが、いかに均等にそれぞれの属性にアクセスしているか?」ということです。詳細は述べませんが、LCOMにはこの論文で定義されている測定方法以外に、Brian Henderson-Sellersによる『Object-Oriented Metrics: Measures of Complexity』(Prentice Hall, 1995)で、この論文のLCOMの欠点を補う形で発表されています。
例えば、特定のセットの属性は特定のメソッドの中でアクセスされ、その他の属性は、その他のメソッドでのみアクセスされている場合は、そのクラスを複数のクラスに分割することが可能ということになります。また、こういったクラスは、クラスの責任分割の段階でうまく分割されていない可能性もあります。
結合度の測定方法とは、クラスの中に定義されている型の種類の数を数えます。具体的には、継承クラス、インターフェイス、メンバ属性、メソッドのパラメータなどです。型の数が多いとほかのクラスやパッケージ間の依存関係が分散し過ぎていると判断できます。