EN JP CN

ファイルレベルメトリック

ファイルレベルメトリック

名前説明メトリックコードID言語
コードの行数ファイルのコードの行数の計算方法: (最後の行番号) - (最初の行番号) + 1LOC_FILE7C/C++、Java
クラスの宣言の数グローバルレベルのファイルで宣言されたクラスの数 (内部クラスとそのメンバーはこのメトリックに含まれません)NOCLASSDECL8C/C++、Java
定数の宣言の数グローバルレベルのこのファイルで宣言された定数の宣言の数NOCONSTDECL9C/C++
宣言されたデータアイテムの数グローバルレベルのこのファイルで宣言されたデータアイテムの数 (任意のクラスの範囲外)NODATADECL10C/C++
ファイル内のコメントセクションの数ファイル内のコメントセクションの数NOCOMMSECT*11C/C++、Java
コメントのバイト数ファイル内のコメントのバイト数BYTESCOMM*12C/C++、Java
コメントの行数コメントのあるコードの行数行にコードとコメントの両方が含まれている場合、その行はこのメトリックに含まれます。// 構文を使用するコメントは 1 行としてカウントされます。/* ...*/ 構文を使用する複数行コメントの、明白に区別可能な各行は 1 行としてカウントされます。例:/*複数行のコメント*/ /*別のコメント*/ LINESCOMM = 3LINESCOMM*13C/C++、C#、Java
定義されたマクロの数ファイルで定義されたマクロの数NOMACROS*14C/C++
ローカルインクルードの数ローカルインクルードの数 (#include "....." など)。NOLOCALINC*15C/C++
システムインクルードの数システムインクルードの数 (#include <.....> など)。NOSYSINC*16C/C++
サードパーティインクルードの数サードパーティインクルードファイルの数 (ファイル名が '/'' または '../' で始まるインクルードの数)。NO3DPINC*17C/C++
ファイル内のインクルードディレクティブの数ファイル内のインクルードディレクティブの総数INCLDIRECTIVES*18C/C++
ファイル内の関数とメソッドの数ファイル内にあるクラスメソッドと関数の数NOROUTINES19C/C++、Java
ファイル内のすべてのルーチンのその他のルーチンへの呼び出しの数ファイル内のすべてのルーチンのその他のルーチンへの呼び出しの総数RNOCALLS20C/C++、Java
ファイル内のすべてのルーチンの条件付きアークの数ファイル内のすべてのルーチンの条件付きアークの総数RNOCONDARCS21C/C++、Java
ファイル内のすべてのルーチンの最大の条件付きスパンファイル内のすべてのルーチンの最大の条件付きスパンRMAXCONDSPAN22C/C++、Java
ファイル内のすべてのルーチンの制御ネストの最大値ファイル内のすべてのルーチンの制御ネストの最大値RMAXLEVEL23C/C++、Java
ファイル内のすべてのルーチンの独立したパス数の対数の合計ファイル内のすべてのルーチンの独立したパス数の対数の合計RNOINDPATHS24C/C++、Java
ファイル内のすべてのルーチンのオペランドの数ファイル内のすべてのルーチンのオペランドの総数RNOOPUSED25C/C++、Java
ファイル内のすべてのルーチンの演算子の数ファイル内のすべてのルーチンの演算子の総数RNOOPRUSED26C/C++、Java
ファイル内のすべてのルーチンの McCabe 循環的複雑度メトリックの総数ファイル内のすべてのルーチンの McCabe 循環的複雑度メトリック (上記のように、ルーチンは関数またはクラスメソッドです)RCYCLOMATIC27C/C++、Java
ファイル内の制御ステートメントの数ファイル内のすべてのルーチンの制御ステートメントの総数RNOCONTROLSTAT28C/C++、Java
ファイル内のすべてのルーチンのローカルで宣言されるデータアイテムの数ファイル内のすべてのルーチンのローカルで宣言されるデータアイテムの総数RNOLOCDECL29C/C++、Java
ファイル内のすべてのルーチンの実行可能ステートメントの数ファイル内のすべてのルーチンの実行可能ステートメントの総数RNOEXSTAT30C/C++、Java
ファイル内のすべてのルーチンのコードの行数ファイル内のすべてのルーチンの LOC の総数RLOC31C/C++、Java
ファイル内のすべてのルーチンの宣言ステートメントの数ファイル内のすべてのルーチンの宣言ステートメントの総数RNODECLSTAT32C/C++、Java
ファイル内のすべてのルーチンのステートメントの数ファイル内のすべてのルーチンのステートメントの総数RNOSTAT33C/C++、Java
ファイルの複雑度リスク変更時の誤った挿入、または作成時の継承のリスクを予測する Klocwork の複雑度インデックスメトリックRISK34C/C++、Java
ファイル内のすべてのルーチンのグローバル変数使用の出現数ファイル内のすべてのルーチンのグローバル変数使用の出現総数RNOACCTOGLOB35C/C++、Java
ファイルのすべてのクラスのメソッド数同じファイルからの C++ でファイルのクラス内で定義されたメソッドと、スタンドアロンのメソッドCNOMETH36C/C++、Java
ファイルのすべてのクラスでクラスがアクセスできる方法の数クラスにフレンドが含まれる場合に C++ でプライベートメソッドのみがカウントされる、保護メソッド、パブリックメソッド、およびプライベートメソッドの数CNOMSG37C/C++、Java
ファイルの Halstead プログラムのボリュームメトリック。ファイルの Halstead プログラムのボリュームメトリック。測定およびカウント可能なプロパティは、次のとおりです。
  • n1 = その実装に出現する固有の演算子または区別可能な演算子の数
  • n2 = その実装に出現する固有のオペランドまたは区別可能なオペランドの数
  • N1 = その実装に出現するすべての演算子の総使用数
  • N2 = その実装に出現するすべてのオペランドの総使用数。これらのメトリックから、Halstead は次のように定義します。
  • ボキャブラリ n を n = n1 + n2 として
  • 実装の長さ N を N = N1 + N2 とし、演算子には、"+" や "*" だけでなくインデックス "[...]"、ステートメント \、区切り "..;.." を指定できます。オペランドの数は、リテラル式、定数、変数の数で構成されます。プログラムボリューム:このメトリックは、任意のアルゴリズムの任意の実装のサイズ用です。V = Nlog2n
HALSTEADVOL38C/C++、Java
ファイル内の空白行の数ファイル内の空白行の数BLANKLINES39C/C++
ファイル内のコンパイラディレクティブの数ファイル内のコンパイラディレクティブの数。カウントされるディレクティブは #if、#ifdef、#ifndef、#else、#endif、および #elif です。DIRECTIVES*40C/C++
ファイルで宣言されたグローバル変数のバイト数ファイルで宣言されたグローバル変数のバイト数。このメトリックの計算方法の詳細については、組み込み型のサイズの指定を参照してください。BYTESGLDATADECL41C/C++
ファイル内のインクルードファイルネストの最大レベルファイル内で最長のインクルードチェインの長さ 注意:このメトリックを正しく計算するには、ヘッダーファイルを含むすべてのディレクトリが Klocwork 解析時に使用可能である必要があります。MAXINCNEST42C/C++
ファイル内で呼び出されるインクルードファイルの総数翻訳単位でプリプロセッサに含まれるファイルの総数 注意:このメトリックを正しく計算するには、ヘッダーファイルを含むすべてのディレクトリが Klocwork 解析時に使用可能である必要があります。TOTALINC43C/C++
ファイルの CRC32 Checksum下記の 'Checksum 説明' を参照してください。CHECKSUM44C++
ファイルにコメント、コードの空行なしファイルにあるコードの行数 (コメント行と空行を除く)。C/C++ ファイルの場合、プリコンパイル後のコードの行数のみがカウントされます。NCNBLOC_FILE45C/C++、C#、Java
最初のファイルレベルの used-by カップリングメトリクス完全な定義については、下記の '関数ファイルのカップリングと結合' を参照してください。COUPLINGUB11000C/C++、Java
最初のファイルレベルの uses カップリングメトリクスCOUPLINGU11001C/C++、Java
2 番目のファイルレベルの used-by カップリングメトリクスCOUPLINGUB21002C/C++、Java
2 番目のファイルレベルの uses カップリングメトリクスCOUPLINGU21003C/C++、Java
3 番目のファイルレベルの used-by カップリングメトリクスCOUPLINGUB31004C/C++、Java
3 番目のファイルレベルの uses カップリングメトリクスCOUPLINGU31005C/C++、Java
4 番目のファイルレベルの used-by カップリングメトリクスCOUPLINGUB41006C/C++、Java
4 番目のファイルレベルの uses カップリングメトリクスCOUPLINGU41007C/C++、Java
関係の最初の結合番号COHESION11008C/C++、Java
関係の 2 番目の結合番号COHESION21009C/C++、Java
関係の 3 番目の結合番号COHESION31010C/C++、Java
関係の 4 番目の結合番号COHESION41011C/C++、Java

*注意:次のメトリックは、前処理中に計算されます:NOCOMMSECT、LINESCOMM、BYTESCOMM、NOMACROS、NOLOCALINC、NOSYSINC、NO3DPINC、INCLDIRECTIVES、DIRECTIVES。Klocwork プロジェクトが前処理されたファイルを使用してビルドされるか、Klocwork コンパイラ (kwcc) が never-cpp オプションを使用して実行される場合、これらのメトリックの値はゼロになります。

 

Checksum 説明

 

CHECKSUM メトリックは、ファイルの CRC32 Checksum です。

CRC は Cyclic Redundancy Check (巡回冗長検査) の略です。32 という数字は、32 ビットの Checksum を計算することから来ています。CRC32 はファイル固有の識別子を計算するためのアルゴリズムです。CRC32 は PKZIP のようなプログラムで使用され、ファイルを識別して、それらが元のファイルであることを確認します(2 つのファイルが同じ CRC32 Checksum を持ち、同じファイルとして誤って検出される確率は 1/232 です)。

また、ソースファイルから読み取った文字に対して再帰的に計算されます。このメトリックでは、標準の計算アルゴリズムが使用されます。

計算開始時には、crc32 は 0xffffffff に設定されます。

crc32 = 0^0xffffffff;

次の文字 ch をファイルから読み取るたびに、crc32 が次の式によって更新されます。

crc32(ch) = (ch>>8)^ table[(ch& 0xff) xor crc32];

フィールド

table はあらかじめ生成されていた 256 要素のテーブルです。

crc32 は前の手順で計算された crc32 の値です。

ファイルからすべての文字が読み取られると、crc32 が転置されます。

crc32 = crc32 ^ 0xffffffff;

注: 実際の値 (整数として保存されている値) が ..MAX_INTEGER 間隔に適合せず、-MAX_INTEGER..0 間隔にラップする場合、このメトリックは負の数値になる可能性があります。

 

関数ファイルのカップリングと結合

 

2 つのタイプの各関係 (使用する関係と使用される関係) と両方の合計であるメトリックには、4 つのレベルのカップリングメトリクスがあります。下記の '関数ファイルのカップリング (合計)' を参照してください。C/C++ とJava プロジェクトの両方に対してカップリングと結合のメトリックが計算されます。 ただし、次の例では C/C++ サンプルファイルを使用します。

 

サンプルファイル:a.h、b.h、example.cpp の 3 つのファイルで構成される例を使用して、

 

COUPLING とCOHESION のメトリックが計算されます (以下を参照)。

/space/test/coupling_test>cat -n a.h

1 #ifndef __A_H__ 2 #define __A_H__ 3 4 class Foo { 5 6 }; 7 8 class Bar { 9 Foo * foo; 10 11 }; 12 13 #endif

space/test/coupling_test>cat -n b.h

1 #ifndef __B_H__ 2 #define __B_H__ 3 4 class ZZZ { 5 6 }; 7 8 #endif

/space/test/coupling_test>cat -n example.cpp

1 #include "a.h" 2 #include "b.h" 3 4 Foo *foo1; 5 Bar *bar; 6 ZZZ *zzz;

共にコンパイルされるこれら 3 つのファイルに対して計算される関係は次のとおりです。

example.cpp;INCLUDES;b.h;example.cpp;2 example.cpp;INCLUDES;a.h;example.cpp;1 foo;VARIABLE_USES_CLASS;Foo;example.cpp;4 bar;VARIABLE_USES_CLASS;Bar;example.cpp;5 zzz;VARIABLE_USES_CLASS;ZZZ;example.cpp;6 foo;CLASS-DATA-MEMBER_USES_CLASS;Foo;a.h;9

関数ファイルのカップリング/結合の場合、次の関係のみを取り込みます。

foo;VARIABLE_USES_CLASS;Foo;example.cpp;4 bar;VARIABLE_USES_CLASS;Bar;example.cpp;5 zzz;VARIABLE_USES_CLASS;ZZZ;example.cpp;6 foo;CLASS-DATA-MEMBER_USES_CLASS;Foo;a.h;9

*注意:関係のプリントアウトの形式は次のようになります。

<source>;<relation_kind>;<destination>;<file>;<line>

サンプルファイル a.h エンティティおよび関係

ファイル a.h のエンティティ

a.h;FILE;coupling_test;a.h;1 __A_H__;MACRO;a.h;a.h;2 Foo;CLASS;a.h;a.h;4 Bar;CLASS;a.h;a.h;8 foo;CLASS-DATA-MEMBER;Bar;a.h;9

ファイル a.h の関係

ファイル a.h に記述されているエンティティは、サンプルファイル:a.h、b.h、example.cpp の 4 つの関係のうち 3 つに参加します。

foo;VARIABLE_USES_CLASS;Foo;example.cpp;4 bar;VARIABLE_USES_CLASS;Bar;example.cpp;5 foo;CLASS-DATA-MEMBER_USES_CLASS;Foo;a.h;9

uses カップリングメトリクスおよび used-by カップリングメトリクス

"uses" および "used-by" カップリングメトリクス 1 ~ 4 は、ソースとして 1 つのファイルで宣言されたエンティティと、出力先として別のファイルで宣言されたエンティティを持つ関係で計算されます。つまり、関係 foo;CLASS-DATA-MEMBER_USES_CLASS;Foo;a.h;9 は、1 つのファイルにソースと宛先を持つ関係として、カップリングメトリクスの計算に参加しません。その他 2 つの関係と同様に、ファイル a.h のエンティティは宛先として残り 2 つの関係に参加します。

"foo;VARIABLE_USES_CLASS;Foo;example.cpp;4", "bar;VARIABLE_USES_CLASS;Bar;example.cpp;5"

つまり、ファイル a.h のエンティティはファイル a.h の他にエンティティとの関係を持ちません。結果として、すべての COUPLINGU メトリック 1 ~ 4 は 0 になります。

サンプルファイル a.h:カップリング (使用) メトリクスを参照してください。

 

サンプルファイル a.h:カップリング (使用) メトリクスを参照してください

 

ファイルの自明ではない測定では、このファイルに関連付けられた uses 関係が使用されます。さらに具体的に言うと、メトリックは、使用するシステムのその他すべてのファイルに対してこのファイルの関係の情報が濃密な測定を表します。

以下の式は、サンプルファイル a.h に適用されます。サンプルファイル a.h エンティティおよび関係を参照してください。

C および C++ システムにおける Klocwork システムレベルのレポートの場合、uses カップリングの自明ではない測定は、次のようになります。

COUPLING U1

CpU1 (Fj) =

Image:Revised_uses_coupling_formula.png

フィールド

i = 1, ..., n は関連する関係の種類のインデックスです。ファイル a.h の場合、関係の種類は VARIABLE_USES_CLASS、CLASS-DATA-MEMBER_USES_CLASS です。

システム S の任意の j に対して、Fj はシステム S の重要なファイルです。この例の場合、Fj はファイル a.h です。

Fk はシステム S (Image:J_not_equal_K.png) 内のその他のファイルです。サンプルファイルを使用する場合、システム S は 3 つのファイル、a.h、b.h、および example.cpp から構成されます。したがって、条件 [Image:J_not_equal_K.png

l=1, ..., lj はファイル Fj 内の関数/メソッド/プロシージャ (まとめてユニットと呼びます) に関連するインデックスです (つまり、ファイル Fj の最初のユニットはユニット 1、2 番目はユニット 2...、最後はユニット lj と見なします)。そして、

m=1, ..., mk はファイル Fk 内のユニットに関連するインデックスです。ファイル a.h のユニットは次のようになります。CLASS Foo、CLASS Bar、および CLASS-DATA-MEMBER foo です。これらは、ファイル b.h では CLASS ZZZ、ファイル example.cpp では VARIABLEs foo、bar、および zzz です。

URIi(Fj(l), Fk(m)) は、ファイル Fj のユニット l とファイル Fk のユニット m の間のタイプ i の uses 関係 (または関係インスタンス、RI) のインスタンス数をカウントする関数です (Fj のユニット l は Fk のユニット m を使用します)。0 または 1 以上が返されます。ファイル a.h のソースとファイル a.h の外の宛先との間に関係性はありません。そのため、ファイル a.h の COUPLINGU1 を計算すると、引数 Fj(l) および Fk(m) として許容される任意のユニットの URIi(Fj(l), Fk(m)) は 0 を返します。log2(0 +1) の和 0 を求めると、COUPLINGU1 の総和は 0 になります。

Wi- はタイプ i の関係の重みです。ファイル a.h の重みのために COUPLINGU1 を計算した例では、重みが 0 であるため、重みは重要ではありません。また、デフォルトでは、すべての関係の重みは 1 と等しくなります(すべての関係はカップリング関数の影響の面で等しくなります)。潜在的には、より高い値またはより低い値を重みに設定することによって、関係の影響を強くも弱くもすることができます (たとえば、CLASS-DATA-MEMBER_USES_CLASS の重みを 1 に、VARIABLE_USES_CLASS の重みを 0.5 に設定します)。

また、式からわかるように、ファイル a.h のソースと a.h の外の宛先の関係性が強くなると、メトリックが高くなります。また、異なるペア (ソースと宛先) が増えると、メトリックが高くなります。

異なるペア (ソースと宛先) の複数の関係は、同じペア (ソースと宛先) のエンティティ間の関係の同じ数より COUPLINGU1 に寄与します。対数は、同じペア (ソースと宛先) 内の 2 番目、3 番目の関係などの値を減らします。

COUPLINGU2、COUPLINGU3、および COUPLINGU4

同じ理由で (外へ向かう関係がない)、COUPLINGU2、COUPLINGU3、および COUPLINGU4 は 0 になります。これらの計算に使用する式を次に示します。

Image:COUPLINGU2.png

COUPLINGU1 とCOUPLINGU2 の違いは、対数が適用されるポイントです。COUPLINGU1 の場合、ユニットの各ペアの関係を計算し、それぞれに対数を適用します。COUPLINGU2 の場合、ユニットのペアの間を区別しません。あるファイルのエンティティから別のファイルのエンティティに移る特定の種類の関係を合計し、このカウントに対数を適用します (+1)。

Image:COUPLINGU3.png

COUPLINGU3 は COUPLINGU2 とほとんど同じメトリックですが、この関係には重みを適用しません。デフォルトで、すべての関係の重みは 1 であるため、COUPLINGU2 は COUPLINGU3 と等しくなります。

Image:COUPLINGU4.png

COUPLINGU4 は、さまざまな種類の関係間を区別しません。ファイルのソースユニット (この例では a.h) とその他のファイルの宛先ユニット (a.h 以外のファイル) の関係を合計します。計算された合計 + 1 に対数が適用されます。

 

サンプルファイル例cpp:カップリング (使用) メトリクスを参照してください

 

このトピックでは、ファイル example.cpp に 4 つのカップリング (使用) メトリクスを適用します。

ファイル example.cpp のソースとファイル example.cpp の外の宛先との間には 3 つの関係があります。

foo;VARIABLE_USES_CLASS;Foo;example.cpp;4 bar;VARIABLE_USES_CLASS;Bar;example.cpp;5 zzz;VARIABLE_USES_CLASS;ZZZ;example.cpp;6

したがって、

URIVARIABLE_USES_CLASS(VARIABLE foo, CLASS Foo) = 1, VARIABLE foo uses CLASS Foo URIVARIABLE_USES_CLASS(VARIABLE bar, CLASS Bar) = 1, VARIABLE bar uses CLASS Bar URIVARIABLE_USES_CLASS(VARIABLE zzz, CLASS ZZZ) = 1, VARIABLE zzz uses CLASS ZZZ

COUPLING U1

その結果、COUPLINGU1 =

log2(URIVARIABLE_USES_CLASS(VARIABLE foo, CLASS Foo) + 1) + log2(URIVARIABLE_USES_CLASS(VARIABLE bar, CLASS Bar) + 1) + log2(URIVARIABLE_USES_CLASS(VARIABLE zzz, CLASS ZZZ)+ 1) = 3

COUPLINGU2 = COUPLINGU3 = COUPLINGU4 =

log2(URIVARIABLE_USES_CLASS(VARIABLE foo, CLASS Foo) + URIVARIABLE_USES_CLASS(VARIABLE bar, CLASS Bar) + 1) + log2(URIVARIABLE_USES_CLASS(VARIABLE zzz, CLASS ZZZ)+ 1) = 2.58496

対数が各ペア (ソースと宛先) の関係カウントに個別に適用されるため、COUPLINGU1 には 3 つの対数があります。

COUPLINGU2、COUPLINGU3、および COUPLINGU4

ユニットのペア間は区別されず、ファイルのペア間のみが区別され、使用可能なペアは (example.cpp、a.h) と(example.cpp、b.h) であるため、COUPLINGU2、COUPLINGU3、および COUPLINGU4 には 2 つの対数があります。

 

サンプルファイル a.h:カップリング (使用される) メトリクス

 

C および C++ システムにおける Klocwork システムレベルのレポートの場合、used-by カップリングの自明ではない測定は、次のようになります (次の式はサンプルファイル a.h に適用されます)。

CpUB1 (Fj) =

Image:Functional_file_coupling_formula.png

フィールド

i = 1 ..., n は関連する関係の種類のインデックスです。ファイル a.h の場合、これは VARIABLE_USES_CLASS、CLASS-DATA-MEMBER_USES_CLASS に適用されます。

システム S の任意の j に対して、Fj はシステム S の重要なファイルです。この例の場合はファイル a.h です。

Fk はシステム S (Image:J_not_equal_K.png) 内のその他のファイルです。その他のファイルは、b.h とexample.cpp です。サンプルファイル:a.h、b.h、example.cpp の 3 つのファイルで構成される例を使用して、

l=1, ..., lj はファイル Fj 内の関数/メソッド/クラス/タイプ (まとめてユニットと呼びます) に関連するインデックスです (つまり、ファイル Fj の最初のユニットはユニット 1、2 番目はユニット 2...、最後はユニット lj と見なします)。ファイル a.h の場合、CLASS Foo とCLASS Bar、そして

m=1, ..., mk はファイル Fk 内のユニットに関連するインデックスです。ファイル b.h の場合、CLASS ZZZ になります。ファイル example.cpp の場合、VARIABLEs foo、bar、および zzz になります。

UBRIi( Fj(l), Fk(m) ) は、ファイル Fj のユニット l とファイル Fk のユニット m の間のタイプ i の used-by 関係 (または関係インスタンス、RI) のインスタンス数をカウントする関数です。0 または 1 以上が返されます。サンプルファイルを使用する場合、

UBRI(CLASS Foo, VARIABLE foo) = 1, CLASS Foo is used by VARIABLE foo

UBRI(CLASS Bar, VARIABLE bar) = 1.CLASS Boo は VARIABLE バーにより使用されます

Wi - タイプ i の関係の重み。デフォルトでは、サンプルファイルですべての重みは 1 になります。

a.h の場合:

COUPLINGUB1 = log2(UBRIVARIABLE_USES_CLASS (CLASS Foo, VARIABLE foo) + 1) + log2(UBRIVARIABLE_USES_CLASS (CLASS Bar, VARIABLE bar) + 1) = 2 COUPLINGUB2 = COUPLINGUB3 = COUPLINGUB4 = log2(UBRIVARIABLE_USES_CLASS (CLASS Foo, VARIABLE foo) + UBRIVARIABLE_USES_CLASS (CLASS Bar, VARIABLE bar) + 1) = 1.58496

COUPLINGUB2、COUPLINGUB3、および COUPLINGUB4

同じ理由で (外へ向かう関係がない)、COUPLINGUB2、COUPLINGUB3、COUPLINGUB4 は 0 になります。これらの計算に使用する式を次に示します。

Image:COUPLINGUB2.png

COUPLINGUB1 とCOUPLINGUB2 の違いは、対数が適用されるポイントです。COUPLINGUB1 の場合、ユニットの各ペアの関係を計算し、それぞれに対数を適用します。COUPLINGUB2 の場合、ユニットのペアの間を区別しません。あるファイルのエンティティから別のファイルのエンティティに移る特定の種類の関係を合計し、このカウントに対数を適用します (+1)。

Image:COUPLINGUB3.png

COUPLINGUB3 は COUPLINGUB2 とほとんど同じメトリックですが、この関係には重みを適用しません。デフォルトで、すべての関係の重みは 1 であるため、COUPLINGUB2 は COUPLINGUB3 と等しくなります。

Image:COUPLINGUB4.png

COUPLINGUB4 は、さまざまな種類の関係間を区別しません。ファイルのソースユニット (この例では a.h) とその他のファイルの宛先ユニット (a.h 以外のファイル) の関係を合計します。計算された合計 + 1 に対数が適用されます。

 

関数ファイルのカップリング (合計)

 

ファイルの自明ではない測定では、このファイルに関連付けられた uses 関係と used-by 関係が使用されます。これは、ファイルカップリング (使用) とファイルカップリング (使用される) の合計です。

 

関数ファイルの結合

 

関数ファイルの結合は、ファイル内の自明ではない測定で、ファイルに関連付けられた used-by 関係が使用されます。さらに具体的に言うと、メトリックは、ファイル内の関数、ルーチン、またはユニットの、標準化され情報が濃密な測定と、同じファイル内のその他の関数、ルーチン、またはユニットとのそれらの関係を表します。

一般的に、COHESION メトリックは used および used-by COUPLING メトリックと同様のものです。COUPLING メトリックと COHESION メトリックの違いは、メトリックを計算するために集約する関係にあります。COUPLING メトリックの場合、別々のファイルにあるソースユニットと出力先ユニットとの関係を取り込みます。これは、同じファイルにあるソースユニットと出力先ユニットとの関係を取り込む COHESION メトリックとは正反対の部分です。COHESION 1 ~ 4 メトリックの計算に使用される式を次に示します。

COHESION1 メトリック

Image:COHESION_Metric1.png

フィールド

i = 1, ..., n は関連する関係の種類のインデックスです。

Fj はシステム S の重要なファイルです。

l=1, ..., lj はファイル Fj 内の関数/メソッド/クラス/タイプ (まとめてユニットと呼びます) に関連するインデックスです (つまり、ファイル Fj の最初のユニットはユニット 1、2 番目はユニット 2...、最後はユニット lj と見なします)。そして、

m=1, ..., mj もファイル Fj 内のユニットに関連するインデックスです (m の場合を除く)

URIi( Fj(l), Fj(m)) は、ファイル Fj のユニット l とファイル Fj のユニット m の間のタイプ i の uses 関係 (または関係インスタンス、RI) のインスタンス数をカウントする関数です (ユニット l はユニット m を使用します)。0 または 1 以上が返されます。これは、以前定義した命名法を使用して、関係メトリックテーブルで定義されたメトリックの "ミクロ" バージョンの計算と等しいものです。

Wi - タイプ i の関係の重み。

COHESION2 メトリック

Image:COHESION_Metric2.png

COHESION3 メトリックでは、重みを考慮しません。デフォルトで、すべての関係の重みは 1 であるため、COHESION2 は COHESION3 と等しくなります。

COHESION3 メトリック

Image:COHESION_Metric4.png

サンプルファイルの使用: a.h、b.h、および example.cpp を使用して、内部にソースと出力先の関係を持つ唯一のファイルはヘッダー a.h です。1 つのファイルのソースと出力先の関係を次に示します。

foo;CLASS-DATA-MEMBER_USES_CLASS;Foo;a.h;9 So, URICLASS-DATA-MEMBER_USES_CLASS (CLASS-DATA-MEMBER foo, CLASS Foo) = 1

上記の理由で、ファイル a.h の場合は次のようになります。

COHESION1 = COHESION2 = COHESION3 = COHESION4 = log2(URICLASS-DATA-MEMBER_USES_CLASS (CLASS-DATA-MEMBER foo, CLASS Foo) + 1) = 1