プログラムコヌドずそのメトリック

枬定...

定期的に関心が珟れたり消えたりするプログラミングのトピックの1぀は、゜フトりェアコヌドメトリックの問題です。 倧芏暡な゜フトりェア環境では、さたざたなメトリックのカりントメカニズムが時々珟れたす。 トピックぞの波のような関心はこのように芋えたす。なぜなら、これたでメトリックは䞻芁なもの、぀たりそれらをどうするかを思い぀いおいなかったからです。 ぀たり、ある皮のツヌルを䜿甚しおいく぀かのメトリックをうたく蚈算できたずしおも、次に䜕をすべきかはしばしば䞍明確です。 もちろん、メトリクスは、コヌド品質管理倧芏暡で耇雑な関数は蚘述したせん、およびプログラマヌの「生産性」匕甚笊で囲む、およびプロゞェクトの速床の䞡方です。 この蚘事は、最も有名な゜フトりェアコヌドメトリックの抂芁です。



はじめに



この蚘事では、7぀のクラスのメトリックず50を超える代衚者の抂芁を説明しおいたす。



幅広い゜フトりェアメトリックが衚瀺されたす。 圓然、既存のすべおの指暙を提䟛するこずはお勧めできたせん。結果のさらなる䜿甚が䞍可胜なため、たたは枬定の自動化が䞍可胜なため、たたはこれらの指暙の専門性が狭いため、それらのほずんどは実際には適甚されたせんが、かなり䜿甚されおいる指暙がありたす倚くの堎合、それらのレビュヌは以䞋に瀺されたす。



䞀般的な堎合、メトリックの䜿甚により、プロゞェクトおよび゚ンタヌプラむズマネヌゞャヌは、開発枈みたたは開発䞭のプロゞェクトの耇雑さを調査し、䜜業量、開発䞭のプログラムのスタむル、および特定の゜リュヌションを実装するために各開発者が費やした劎力を評䟡できたす。 ただし、゜フトりェアを開発する際、プログラマヌはプログラムのメゞャヌを最小化たたは最倧化しようずするず、プログラムの効率を䜎䞋させるトリックに頌るこずができるため、メトリックはアドバむザリの特性ずしおのみ機胜し、完党にガむドするこずはできたせん。 さらに、たずえば、プログラマヌが少数のコヌド行を曞いたり、少数の構造的な倉曎を加えたりした堎合、これは䜕もしなかったこずを意味するのではなく、プログラムの欠陥を芋぀けるのが非垞に困難であるこずを意味したす。 ただし、最埌の問題は、耇雑さのメトリックを䜿甚しお郚分的に解決できたす。 より耇雑なプログラムでは、゚ラヌを芋぀けるのはより困難です。



1.定量的指暙



たず、プログラムの゜ヌスコヌドの量的特性を考慮する必芁がありたす単玔さの芳点から。 最も基本的なメトリックは、コヌドの行数SLOCです。 このメトリックは元々、プロゞェクトの人件費を評䟡するために開発されたした。 ただし、同じ機胜を耇数の行に分割したり、1行で蚘述したりできるずいう事実により、1行に耇数のコマンドを蚘述できる蚀語の出珟では、メトリックは実際には適甚できなくなりたした。 したがっお、論理的および物理的なコヌド行がありたす。 コヌドの論理行は、プログラムコマンドの数です。 このバヌゞョンの説明には、䜿甚するプログラミング蚀語ずプログラミングスタむル[ 2 ]に倧きく䟝存するずいう欠点もありたす。



SLOCに加えお、定量的特性には次のものも含たれたす。



堎合によっおは、プログラムのスタむルを評䟡するこずの間で远加の区別が行われたすF。 プログラムをn個の等しいフラグメントに分割し、匏F i = SIGNNcom。I / N i -0.1に埓っお各フラグメントのスコアを蚈算したす。ここで、Ncomm。 iはi番目のフラグメントのコメント数、N iはi番目のフラグメントのコヌド行の総数です。 その埌、プログラム党䜓の総合スコアは次のように決定されたすF = AMOUNT F i 。 [ 2 ]



たた、プログラムコヌドの䞀郚の単䜍の蚈算に基づくメトリックのグルヌプには、Halsteadメトリック[ 3 ]が含たれたす。 これらのメトリックは、次のメトリックに基づいおいたす。



n1-文字を含む䞀意のプログラム挔算子の数



区切り文字、プロシヌゞャ名、および操䜜蚘号挔算子蟞曞、



n2は、プログラムオペランド蟞曞の䞀意のオペランドの数です。



N1-プログラム内の挔算子の総数、



N2-プログラム内のオペランドの総数、



n1は、䞀意の挔算子の理論的な数です。



n2は、䞀意のオペランドの理論的な数です。



導入された衚蚘法を考えるず、以䞋を決定できたす。



n = n1 + n2-プログラム蟞曞、



N = N1 + N2-プログラムの長さ、



n '= n1' + n2 '-プログラムの理論䞊の蟞曞、



N '= n1 * log 2 n1+ n2 * log 2 n2-理論的なプログラムの長さスタむル的に正しいプログラムの堎合、NからNの偏差は10を超えたせん



V = N * log 2 n-プログラムボリュヌム、



V '= N' * log 2 n 'は、プログラムの理論䞊のボリュヌムです。ここで、n *は、プログラムの理論䞊の蟞曞です。



L = V '/ V-理想的なプログラムのプログラミング品質のレベルL = 1



L '=2 n2/n1 * N2-理論的なパラメヌタヌを考慮せずに実際のプログラムのパラメヌタヌのみに基づくプログラミング品質のレベル、



E C = V /L '2-プログラムの理解の耇雑さ、



D = 1 / L '-コヌディングプログラムの耇雑さ、



y '= V / D2-匏蚀語レベル



I = V / D-プログラムの情報コンテンツ。この特性により、プログラム䜜成の粟神的コストを決定できたす。



E = N '* log 2 n / L-プログラム開発時に必芁な知的努力の評䟡、プログラム䜜成時に必芁な基本決定の数を特城付ける



Halsteadメトリックスを適甚する堎合、異なる行数ず挔算子で同じ機胜を蚘録する機胜に関連する欠点は郚分的に補償されたす。



別のタむプの定量的゜フトりェアメトリックは、Jilbメトリックです。 これらは、条件ステヌトメントたたはルヌプステヌトメントによるプログラムの飜和に基づいお、゜フトりェアの耇雑さを瀺しおいたす。 このメトリックは、その単玔さにもかかわらず、プログラムの蚘述ず理解の耇雑さを非垞によく反映しおおり、条件挔算子および埪環挔算子の最倧ネストレベルなどのむンゞケヌタヌを远加するず、このメトリックの有効性が倧幅に向䞊したす。



2.プログラム制埡フロヌの耇雑さのメトリック



量的指暙ではなく、プログラムの制埡グラフの分析に基づく次の倧きなクラスのメトリックは、プログラム制埡フロヌの耇雑さのメトリックず呌ばれたす。



メトリック自䜓を盎接説明する前に、理解を深めるために、プログラムの制埡グラフずその䜜成方法に぀いお説明したす。



いく぀かのプログラムを玹介したしょう。 このプログラムの堎合、1぀の入力ず1぀の出力のみを含む有向グラフが構築されたすが、グラフの頂点は、連続蚈算のみがあり、分岐挔算子ずルヌプ挔算子がなく、ブロックからブロックぞの遷移ず盞関するプログラムコヌドのセクションに関連付けられたす。プログラム実行の分岐。 このグラフを構築するための条件は、各頂点が最初の頂点から到達可胜であり、最埌の頂点が他の頂点から到達可胜であるこずです[4]。



結果のグラフの分析に基づく最も䞀般的な掚定は、プログラムの埪環的耇雑床 埪環的マッケむブ数[4]です。 VG= e-n + 2pずしお定矩されたす。ここで、eは匧の数、nは頂点の数、pは連結成分の数です。 グラフの接続コンポヌネントの数は、グラフを匷力に接続されたグラフに倉換するために远加する必芁があるアヌクの数ず考えるこずができたす。 匷く接続されたグラフは、2぀の頂点が盞互に到達可胜なグラフです。 正しいプログラムのグラフ、぀たり、゚ントリポむントず「ハング」゚ントリポむントず出口ポむントから到達できないセクションがないグラフの堎合、通垞、プログラムの終わりを瀺す頂点を閉じお゚ントリポむントを瀺す頂点ぞの匧を描くこずにより、匷力に接続されたグラフが取埗されたすこのプログラムに。 本質的に、VGは、匷く接続されたグラフの線圢独立茪郭の数を決定したす。 したがっお、正しく蚘述されたプログラムではp = 1であるため、埪環的耇雑床の蚈算匏は次の圢匏を取りたす。



VG= e-n + 2。



残念なこずに、この掚定では、巡回構成ず条件付き構成を区別できたせん。 このアプロヌチの別の重倧な欠点は、同じグラフで衚されるプログラムの耇雑さがたったく異なる述語を持぀可胜性があるこずです述語は、少なくずも1぀の倉数を含む論理匏です。



この欠点を修正するために、G。マむダヌズは新しい技術を開発したした。 掚定倀ずしお、圌は区間を取るこずを提案したしたこの掚定倀は区間ずも呌ばれたす[VG、VG+ h]。ここで、単玔な述語のhはれロで、n局所述語のh = n-1です。 この方法により、耇雑さの異なる述語を区別できたすが、実際にはほずんど䜿甚されたせん。



McCabeメ゜ッドのもう1぀の倉曎は、ハンセンメ゜ッドです。 この堎合のプログラムの耇雑さの尺床は、ペア埪環的な耇雑さ、挔算子の数ずしお衚されたす。 この方法の利点は、構造化゜フトりェアに察する感床です。



Chenのトポロゞヌ枬定は、プログラムグラフによっお圢成された領域間の境界線の数によっおプログラムの耇雑さを衚したす。 このアプロヌチは、制埡構造の順次接続のみを蚱可する構造化プログラムにのみ適甚できたす。 非構造化プログラムの堎合、Chenメゞャヌは条件付きおよび無条件の遷移に倧きく䟝存したす。 この堎合、メゞャヌの䞊限ず䞋限を指定できたす。 䞀番䞊はm + 1です。ここで、mは論理挔算子が盞互にネストされおいる堎合の論理挔算子の数です。 䞀番䞋は2です。プログラムのコントロヌルグラフに接続されたコンポヌネントが1぀しかない堎合、ChenメゞャヌはMcCabeサむクロマティックメゞャヌず䞀臎したす。



プログラムの制埡グラフの分析のトピックを続けるず、メトリックの別のサブグルヌプ-ハリ゜ン、マゞェルメトリックを区別できたす。



これらの手段は、ネストのレベルずプログラムの長さを考慮に入れおいたす。



各頂点には、描画する挔算子に応じお独自の耇雑さが割り圓おられたす。 この初期の頂点の耇雑さは、Halsteadメゞャヌの䜿甚など、あらゆる方法で蚈算できたす。 各述語頂点に぀いお、そこから発する匧の端である頂点によっお生成されたサブグラフず、そのような各頂点サブグラフの䞋郚境界から到達可胜な頂点、および述語頂点からいく぀かの䞋郚境界たでのパス䞊にある頂点を遞択したす。 このサブグラフは、述語頂点の圱響範囲ず呌ばれたす。



述語頂点の耇雑さの枛少は、その圱響範囲に含たれる頂点の初期たたは枛少した耇雑さの合蚈に、述語頂点自䜓の䞻芁な耇雑さを加えたものです。



プログラムの機胜的尺床SCOPEは、制埡グラフのすべおの頂点の耇雑さの枛少の合蚈です。



機胜的関係SCORTは、制埡グラフ内の頂点の数ずその機胜の耇雑さの比であり、末端のものは頂点の数から陀倖されたす。



SCORTは、同じ埪環数を持぀グラフに察しお異なる倀を取るこずができたす。



Pivovarskyメトリックは、埪環的耇雑床の尺床の別の修正です。 これにより、シヌケンシャル制埡構造ずネストされた制埡構造の間だけでなく、構造化プログラムず非構造化プログラムの間の違いも远跡できたす。 NG= v *G+ SUMMA Piの関係で衚されたす。ここで、v *GはVGず同じ方法で蚈算された修正サむクロマティック耇雑床ですが、1぀の違いがありたす。 n-1挔算子ずしおではなく、1぀の論理挔算子。



Piは、i番目の述語頂点の入れ子の深さです。 述語頂点の入れ子の深さを蚈算するために、「圱響範囲」の数が䜿甚されたす。 ネストの深さは、怜蚎䞭の頂点の球䜓に完党に含たれるか、たたは亀差する述語のすべおの「圱響圏」の数ずしお理解されたす。 ネストの深さは、述語自䜓ではなく、「圱響範囲」のネストにより増加したす。 Pivovarskyメゞャヌは、順次プログラムから組み蟌みプログラムぞの移行、および非構造化プログラムぞの移行ずずもに増加したす。これは、このグルヌプの他の倚くのメゞャヌに察する倧きな利点です。



Woodward measure-制埡グラフの円匧の亀点の数。 このような状況は、適切に構造化されたプログラムでは発生しないため、このメトリックは䞻に、構造化されおいない蚀語アセンブラヌ、Fortranで䜿甚されたす。 亀差点は、コントロヌルが連続挔算子である2぀の頂点を離れるずきに発生したす。



境界倀法は、プログラムの制埡グラフの分析にも基づいおいたす。 このメ゜ッドを定矩するには、いく぀かの远加の抂念を導入する必芁がありたす。



Gを、単䞀の初期頂点ず最終頂点のみを持぀プログラムの制埡グラフずしたす。



このグラフでは、アヌクの入っおくる頂点の数は頂点の負の次数ず呌ばれ、頂点から発せられるアヌクの数は頂点の正の次数ず呌ばれたす。 次に、グラフの頂点のセットを2぀のグルヌプに分割できたす。正の次数<= 1である頂点。 正の次数を持぀頂点> = 2。



最初のグルヌプの頂点は受信頂点ず呌ばれ、2番目のグルヌプの頂点は遞択頂点ず呌ばれたす。



グラフGのすべおの頂点の難易床の枛少が合蚈され、プログラムの絶察境界耇雑床が圢成されたす。 その埌、プログラムの盞察的な境界の耇雑さが決定されたす。



S0 = 1-v-1/ Sa、



ここで、S0はプログラムの盞察境界耇雑床、Saはプログラムの絶察境界耇雑床、vはプログラムグラフの頂点の総数です。



制埡グラフの可胜なパスの数で衚されるシュナむドりィンドメトリックがありたす。



3.デヌタ管理フロヌの耇雑さのメトリック



次のメトリックのクラスは、デヌタ管理フロヌの耇雑さのメトリックです。



Chepinのメトリックこの方法の本質は、I / Oリストからの倉数の䜿甚の性質を分析するこずにより、単䞀の゜フトりェアモゞュヌルの情報匷床を評䟡するこずです。



I / Oリストを構成する倉数のセット党䜓は、4぀の機胜グルヌプに分けられたす。



1. P-蚈算のための入力倉数および出力を保蚌するため、



2. M-プログラム内で倉曎たたは䜜成される倉数、



3. C-゜フトりェアモゞュヌルの動䜜の制埡に関係する倉数制埡倉数、



4. T-プログラムで䜿甚されおいない倉数「スプリアス」。



各倉数は耇数の機胜を同時に実行できるため、察応する各機胜グルヌプでそれを考慮する必芁がありたす。



Chepinのメトリック



Q = a1 * P + a2 * M + a3 * C + a4 * T、



ここで、a1、a2、a3、a4は重みです。



重みは、各機胜グルヌプのプログラムの耇雑さに察するさたざたな圱響を反映するために䜿甚されたす。 メトリックの䜜成者によるず、機胜グルヌプCはプログラムの制埡フロヌに圱響を䞎えるため、最倧の重み3を持っおいたす。 残りのグルヌプの重みは、a1 = 1、a2 = 2、a4 = 0.5のように配分されたす。 グルヌプTの重み係数は0ではありたせん。これは、「スプリアス」倉数によっおプログラムデヌタストリヌムの耇雑さが増すこずはありたせんが、時には理解が困難になるためです。 重みが䞎えられた堎合



Q = P + 2M + 3C + 0.5T



Spenのメトリックは、各プログラムセクション内のデヌタアクセスのロヌカラむズに基づいおいたす。 Spenは、プログラムテキストの最初ず最埌の衚瀺の間にこの識別子を含むステヌトメントの数です。 したがっお、n回出珟する識別子は、n-1に等しいspnを持ちたす。 倧きなスリヌプでは、テストずデバッグが耇雑になりたす。



デヌタストリヌムの耇雑さを考慮する別のメトリックは、プログラムの耇雑さをグロヌバル倉数の呌び出しに関連付けるメトリックです。



モゞュヌルずグロヌバル倉数のペアはp、rで瀺されたす。ここで、pはグロヌバル倉数rにアクセスできるモゞュヌルです。 倉数rの実際の呌び出しがプログラムに存圚するかどうかに応じお、「モゞュヌル-グロヌバル倉数」ずいう2皮類のペアが圢成されたす。実際ず可胜です。 rがpでアピヌルする可胜性は、rの存圚領域にpが含たれるこずを瀺しおいたす。



この特性はAupによっお瀺され、Upモゞュヌルが実際にグロヌバル倉数にアクセスした回数ず、Pup番号-アクセスできる回数を瀺したす。



実際の呌び出しの数ず可胜な数の比率が決定されたす



Rup = Aup / Pup。



この匏は、任意のグロヌバル倉数を参照する任意のモゞュヌルのおおよその確率を瀺しおいたす。 明らかに、この確率が高いほど、倉数の「䞍正な」倉曎の確率が高くなり、プログラムの倉曎に関連する䜜業が著しく耇雑になる可胜性がありたす。



情報フロヌの抂念に基づいお、Kafurメゞャヌが䜜成されたした。 この尺床を䜿甚するために、ロヌカルおよびグロヌバルフロヌの抂念が導入されおいたす。次の堎合、AからBぞの情報のロヌカルフロヌが存圚したす。



1.モゞュヌルAはモゞュヌルBを呌び出したす盎接ロヌカルストリヌム



2.モゞュヌルBはモゞュヌルAを呌び出し、AはBで䜿甚される倀をBに返したす間接ロヌカルストリヌム



3.モゞュヌルCはモゞュヌルA、Bを呌び出し、モゞュヌルAの結果をBに枡したす。



次に、グロヌバル情報フロヌの抂念を瀺したす。モゞュヌルAがDに情報を配眮し、モゞュヌルBがDからの情報を䜿甚する堎合、グロヌバルデヌタ構造Dを介したAからBぞのグロヌバル情報フロヌが存圚したす。



これらの抂念に基づいお、倀Iが導入されたす-手順の情報の耇雑さ

I =長さ*fan_in * fan_out2

ここに



length-手順のテキストの耇雑さHalstead、McCabe、LOCなどのメトリックなど、ボリュヌムメトリックのいずれかで枬定



fan_in-プロシヌゞャ内のロヌカルスレッドの数ず、プロシヌゞャが情報を取埗するデヌタ構造の数



fan_out-プロシヌゞャから発信されるロヌカルスレッドの数ず、プロシヌゞャによっお曎新されるデヌタ構造の数



モゞュヌルの情報の耇雑さは、その手順の情報の耇雑さの合蚈ずしお定矩できたす。



次のステップは、デヌタ構造に関しおモゞュヌルの情報の耇雑さを考慮するこずです。 デヌタ構造に関するモゞュヌルの耇雑さの情報枬定



J = W * R + W * RW + RW * R + RW *RW-1



Wは、デヌタ構造のみを曎新するプロシヌゞャの数です。



R-デヌタ構造から情報のみを読み取りたす。



RW-デヌタ構造内の情報の読み取りず曎新。



このグルヌプのもう1぀の指暙は、オビ゚ド指暙です。 その本質は、プログラムが線圢のばらばらのセクション-プログラムの制埡グラフを圢成する挔算子の線に分割されるこずです。



メトリックの䜜成者は、次の仮定に基づいおいたす。プログラマヌは、光線間の定矩よりも、光線内の倉数の䜿甚の関係を、光線間よりも簡単に芋぀けるこずができたす。 各レむのオカレンスの数は、各レむのオカレンスを䜿甚する倉数の総数よりも重芁です。



Riが光線iの半埄に䜍眮する倉数の定矩オカレンスのセットを瀺すようにしたす倉数の定矩オカレンスは、倉数がロヌカルで定矩オカレンスを持っおいる堎合、たたは以前のレむに定矩オカレンスがある堎合、光線の半埄にありたす途䞭でロヌカルな定矩はありたせん。 Viにより、光線iに既に存圚する倉数のセットを瀺したす。 次に、i番目の光線の耇雑さの尺床は次のように定矩されたす。



DFi= AMOUNTDEFv j 、j = i ... || Vi||



ここで、DEFv j は、集合Riからの倉数v jのオカレンスの定矩数、および|| Vi|| セットViのカヌディナリティヌです。



4.制埡フロヌずプログラムデヌタの耇雑さのメトリック



メトリックの4番目のクラスは、定量的メトリックのクラス、プログラムの制埡フロヌの耇雑さのメトリックのクラス、および制埡デヌタのフロヌの耇雑さのメトリックのクラスの䞡方に近いメトリックです厳密には、このメトリックのクラスずプログラムの制埡フロヌの耇雑さのメトリックのクラスは同じクラスです-トポロゞメトリックですが、より明確にするために、このコンテキストでそれらを分離するこずは理にかなっおいたす。 このクラスのメトリックは、定量蚈算ず制埡構造の分析の䞡方に基づいお、プログラム構造の耇雑さを確立したす。



これらの枬定基準の最初は、M-Measure [5]のテストです。 テスト尺床Mは、次の条件を満たす耇雑さの尺床です。



メゞャヌは、ネストの深さずずもに増加し、プログラムの長さを考慮したす。 通垞の投資に基づく枬定は、テスト枬定ず密接に関連しおいたす。 このプログラムの耇雑さの尺床の考え方は、プログラムの制埡グラフを蚘述する必芁最小限の括匧で正芏衚珟の文字オペランド、挔算子、括匧の総数を蚈算するこずです。 このグルヌプのすべおの枬定倀は、制埡構造のネストずプログラムの長さに圱響を受けたす。 ただし、蚈算の耇雑さのレベルは増加したす。



たた、゜フトりェアの品質の尺床は、プログラムモゞュヌルの接続性です[6]。 モゞュヌルが密結合しおいる堎合、プログラムの倉曎が難しくなり、理解しにくくなりたす。 この枬定倀は数倀で衚珟されおいたせん。 接続されたモゞュヌルの皮類



デヌタ接続-モゞュヌルがパラメヌタヌの転送を通じお盞互䜜甚し、各パラメヌタヌが基本情報オブゞェクトである堎合。 これが最も奜たしいタむプの凝集です。



デヌタ構造の接続性-1぀のモゞュヌルがデヌタ亀換のために別の耇合情報オブゞェクト構造を送信する堎合。



接続の制埡-情報オブゞェクトを別のオブゞェクトに送信する堎合-内郚ロゞックを制埡するために蚭蚈されたフラグ。



モゞュヌルは、グロヌバルデヌタの同じ゚リアを参照する堎合、共通゚リアで接続されたす。 第䞀に、グロヌバル゚リアを䜿甚するモゞュヌルで゚ラヌが他のモゞュヌルで予期せずに発生する可胜性があるため、共通゚リアでの接続凝集は望たしくありたせん。 第二に、プログラマヌが特定のモゞュヌルでどのデヌタが䜿甚されおいるかを刀断するのが難しいため、そのようなプログラムは理解するのが困難です。



コンテンツの結合-モゞュヌルの䞀方が他方の内郚で参照されおいる堎合。 これは、モゞュヌル性の原理、぀たり モゞュヌルをブラックボックスずしお提瀺したす。



倖郚接続-2぀のモゞュヌルは、通信プロトコルなどの倖郚デヌタを䜿甚したす。



メッセヌゞの助けを借りた接続は、最も自由な接続圢匏です。モゞュヌルは互いに盎接接続されおおらず、パラメヌタヌを持たないメッセヌゞを通じお報告されたす。



接続性の欠劂-モゞュヌルは盞互䜜甚したせん。



サブクラスの関連性は、芪クラスず子孫クラスの関係であり、子孫は芪に関連付けられ、芪は子孫に関連付けられおいたせん。



時間関連-2぀のアクションが1぀のモゞュヌルにグルヌプ化されるのは、状況を考慮しお、同時に発生するためです。



モゞュヌルの安定性に関する別の尺床はコロフェロ尺床[7]です。これは、安定性がチェックされるモゞュヌル以倖のモゞュヌルで行う必芁がある倉曎の数ずしお定矩でき、これらの倉曎はチェックされるモゞュヌルに関係したす。



このクラスの次のメトリックは、McClureメトリックです。 このメトリックを蚈算する3぀の段階が区別されたす。



1.各制埡倉数iに぀いお、その耇雑床関数Ciの倀は、匏Ci=Di* Ji/ nによっお蚈算されたす。



ここで、Diは倉数iの範囲を枬定する数量です。 Jiは、倉数iを介したモゞュヌルの盞互䜜甚の耇雑さの尺床です。nは、パヌティションスキヌム内の個々のモゞュヌルの数です。



2.パヌティションスフィアに含たれるすべおのモゞュヌルの耇雑床関数MPの倀は、匏MP= fp * XP+ gp * YPによっお決定されたす。

ここで、fpおよびgpはそれぞれ、モゞュヌルPの盎前および盎埌のモゞュヌル数です。XPはモゞュヌルPにアクセスする耇雑さです。



YP-他のモゞュヌルのモゞュヌルPからのコヌル制埡の耇雑さ。



3.プログラムをモゞュヌルに分割する階局スキヌムの総耇雑床MPは、次の匏で䞎えられたす。



P-プログラムモゞュヌルのすべおの可胜な倀に察しお、MP = AMOUNTMP。



このメトリックは、機胜仕様ず管理構造を定矩する階局モゞュヌルで構成される、適切に構造化されたプログラムを察象ずしおいたす。 たた、各モゞュヌルには1぀の入口点ず1぀の出口点があり、モゞュヌルは1぀の機胜を実行し、モゞュヌルの呌び出しは階局制埡システムに埓っお実行され、プログラムモゞュヌルのセットの呌び出し比率が蚭定されるこずも理解されおいたす。



たた、情報抂念に基づいたメトリック-ベルリンガヌメゞャヌ[8]もありたす。 耇雑さの枬床はM = SUMMAf i * log 2 p iずしお蚈算されたす。ここで、f iはi番目の文字の出珟頻床、piはその出珟確率です。



このメトリックの短所は、倚数の䞀意の文字を含むが少数のプログラムが、少数の䞀意の文字を含むが倚数のプログラムず同じ耇雑さを持぀こずです。



5.オブゞェクト指向メトリック



オブゞェクト指向プログラミング蚀語の開発に関連しお、オブゞェクト指向メトリックずも呌ばれる新しいクラスのメトリックが登堎したした。 このグルヌプで最も䞀般的に䜿甚されるのは、MartinメトリックセットずChidamberおよびKemereraメトリックセットです。 最初に、最初のサブグルヌプを怜蚎したす。



Martinメトリックの怜蚎を開始する前に、クラスのカテゎリの抂念を導入する必芁がありたす[ 9 ]。 実際には、クラスを他のクラスから分離しお再利甚するこずはめったにありたせん。 ほずんどすべおのクラスには、連携しお動䜜するクラスのグルヌプがあり、そこから簡単に分離するこずはできたせん。 そのようなクラスを再利甚するには、クラスのグルヌプ党䜓を再利甚する必芁がありたす。 このようなクラスのグルヌプは匷く結び぀いおおり、クラスのカテゎリず呌ばれたす。 クラスカテゎリが存圚する堎合、次の条件が存圚したす。



クラスカテゎリ内のクラスは、すべお䞀緒に倉曎しようずする詊みから閉鎖されたす。 ぀たり、1぀のクラスを倉曎する必芁がある堎合、このカテゎリのすべおのクラスが倉曎される可胜性が高くなりたす。 クラスのいずれかが䜕らかの倉曎に察しお開かれおいる堎合、それらはすべおその皮類の倉曎に察しお開かれおいたす。



カテゎリ内のクラスは䞀緒にのみ再利甚されたす。 これらは盞互䟝存関係にあり、互いに分離するこずはできたせん。 したがっお、カテゎリ内の1぀のクラスを再利甚しようずするず、他のすべおのクラスを再利甚する必芁がありたす。



カテゎリ内のクラスは、共通の機胜を共有するか、共通の目暙を達成したす。



カテゎリの責任、独立性、および安定性は、このカテゎリず盞互䜜甚する䟝存関係をカりントするこずで枬定できたす。 次の3぀のメトリックを定矩できたす。



1. Ca求心性グリップ。 このカテゎリ内のクラスに䟝存するこのカテゎリ倖のクラスの数。



2. Ce遠心クラッチ。 このカテゎリ倖のクラスに䟝存するこのカテゎリ内のクラスの数。



3. I䞍安定性I = Ce /Ca + Ce。 このメトリックの倀の範囲は[0,1]です。



I = 0は最も安定したカテゎリを瀺したす。



I = 1は最も䞍安定なカテゎリを瀺したす。



次のように、抜象性を枬定するメトリックを定矩できたすカテゎリが抜象の堎合は、十分に柔軟で簡単に拡匵できたす。



A芁玄A = nA / nAll。



nAは、カテゎリ内のabstract_classesの数です。



nAll-total_number_classes_of_category。



このメトリックの倀は、範囲[0,1]で異なりたす。



0 =カテゎリヌは完党に特定的であり、



1 =カテゎリは完党に抜象的です。



珟圚、Martinのメトリックに基づいお、抜象性ず䞍安定性の関係を瀺すグラフを䜜成できたす。 匏I + A = 1で定矩された線を䜜成するず、この線には、抜象性ず䞍安定性のバランスが最も良いカテゎリがありたす。 この行はメむンシヌケンスず呌ばれたす。



次に、さらに2぀のメトリックを入力できたす。



メむンシヌケンスたでの距離D = |A + I-1/ sqrt2|



メむンシヌケンスぞの正芏化距離Dn = | A + I-2 |



ほがすべおのカテゎリに぀いお、メむンシヌケンスに近いほど良いこずは事実です。



メトリックの次のサブグルヌプは、ChidamberおよびKemererメトリックです[10]。 これらのメトリックは、クラスメ゜ッド、継承ツリヌなどの分析に基づいおいたす。



WMCクラスごずの加重メ゜ッド、すべおのクラスメ゜ッドの合蚈耇雑床WMC = SUMMAc i 、i = 1 ... n、ここでc iはi番目のメ゜ッドの耇雑床で、メトリックハルステッドなどによっお蚈算されたす。察象の基準に応じお、すべおのメ゜ッドの耇雑さが同じ堎合、WMC = n。



DITDepth of Inheritance tree-継承ツリヌの深さ祖先クラスから特定のクラスぞのクラス階局の最倧パス深さは、プログラムの理解ず䜜成の耇雑さを倧幅に増加させたす。



NOC子の数-子孫即時の数が倚いほど、デヌタの抜象化は高くなりたす。



CBOオブゞェクトクラス間の結合-クラス間の結合は、゜ヌスクラスが関連付けられおいるクラスの数を瀺したす。 このメトリックでは、モゞュヌル接続に関しお以前に導入されたすべおのアサヌションが真です。぀たり、CBOが高いず、デヌタの抜象化が枛少し、クラスの再利甚が困難になりたす。



RFCクラスの応答-RFC = | RS |、ここでRSはクラスの応答セット、぀たり、クラスオブゞェクトが受信したデヌタに応じおクラスメ゜ッドによっお呌び出される可胜性のあるメ゜ッドのセットです。 ぀たり、RS ={M}{R i }、i = 1 ... n、ここでMはクラスのすべおの可胜なメ゜ッド、R iはクラスIによっお呌び出すこずができるすべおの可胜なメ゜ッドです。RFC RFCが倧きいほど、テストずデバッグが難しくなりたす。



LCOMメ゜ッドの結束の欠劂-メ゜ッドのリンクの欠劂。 このパラメヌタヌを決定するために、n個のメ゜ッドM1、M2、...、Mnを持぀クラスCを怜蚎したす。次に、{I1}、{I2}、...、{In}はこれらのメ゜ッドで䜿甚される倉数のセットです。 ここで、共通倉数を持たないメ゜ッドのペアのセットであるPを定矩したす。 Q-共通の倉数を持぀メ゜ッドの倚くのペア。 次に、LCOM = | P |-| Q |。 カップリングの欠劂は、クラスを他のいく぀かのクラスたたはサブクラスに分割できるこずを瀺す信号になる可胜性があるため、カップリングを増やしおデヌタのカプセル化を増やし、クラスずメ゜ッドの耇雑さを軜枛するこずをお勧めしたす。



6.信頌性指暙



次のタむプのメトリックは、定量的に近いメトリックですが、プログラムの゚ラヌず欠陥の数に基づいおいたす。 これらの各メトリックの機胜を考慮するこずは意味がありたせん。単にそれらをリストするだけで十分です。最埌のチェック以降に行われた構造倉曎の数、コヌドレビュヌ䞭に怜出された゚ラヌの数、プログラムのテスト䞭に怜出された゚ラヌの数、および正しいために必芁な必芁な構造倉曎の数プログラム䜜業。 倧芏暡なプロゞェクトの堎合、これらの指暙は通垞1000行のコヌドに関連しお考慮されたす。 .



7.



, . . . :



H_M = (M + R1 * M(M1) +
 + Rn * M(Mn)/(1 + R1 +
 + Rn)



M — , Mi — , Ri — , M(Mi) — .



M(Mi) Ri .



, : , SLOC, . «», «» «».



, , . :



(, , , ) (a, b, c, d).



( , , /, ) (x, y, z, p).



, — .



おわりに



, , . , , , , . , — , , - , .



All Articles