ソフトウェアの品質を決定するために、ハルステッドの複雑さの尺度を適用する作業はありますか?


14

1977年、Maurice Howard Halsteadは、ソフトウェアシステムの複雑さの尺度を導入しました。これには、プログラムの語彙、プログラムの長さ、音量、難易度、努力、モジュールの推定バグ数の測定が含まれます。ウィキペディアによると、難易度は、プログラムの読み取りまたは書き込み時のプログラムの理解の難易度に関連しており、努力は、アプリケーションのコーディングに要する時間(時間=(努力/ 18)秒)に変換できます。

データと計算がソフトウェア開発の何らかの側面に関係しない限り、測定は役に立ちません。ただし、特定の値以上の難易度が統計的に有意な欠陥の増加や、難易度とコードの読み取り時間の関係につながる傾向があることを示す作品は見つかりませんでした(Nの難易度は平均M時間を費やしますコードベースを理解する)または品質を決定するのに役立つ事実の後の時間を計算できることの分析(特に書く時間はすでに測定値として記録されているはずなので)特にHalsteadのバグ推定(Wikipediaには記載されていません)に興味があります-アプリケーションのバグの数はVolume / 3000またはEffort ^(2/3)/ 3000で推定できます。

私は2つのことを探しています:

  • 誰もが実際のアプリケーションでHalsteadのソフトウェア複雑度測定を使用してソフトウェア品質を評価しましたか?もしそうなら、どのようにそれらを適用し、有用で、有効で、かつ/または信頼できる測定であることが判明しましたか?
  • ソフトウェアの品質に適用した場合のHalsteadの複雑さの測定の有効性(または無効性)を検討する調査、分析、またはケーススタディの形式で学術研究はありますか?
  • ソース行コード(SLOC)を使用してボリューム、難易度、努力、時間、バグのハルステッドメトリックに類似した何かを計算することを実証する調査、分析、またはケーススタディの形式の学術研究はありますか?Volumeは単にSLOCカウントに対応し、Difficultyは循環的複雑度(およびおそらく他の指標)に対応する可能性があると思われます。また、SLOCで努力、生産性、または時間を測定することは、誤解を招く可能性があることをよく知っています。

Halsteadのメトリクス作業は30〜40年前に行われ、SLOCとの強い相関関係がほとんどすぐに発見されたため、過去15年間に結果を見つけるのに苦労することになります。(これは、1977年頃のオースティン大学での新しい博士号候補者による講演からの記憶です。)
ジョンR.ストローム

ありがとう。質問を更新し、古い論文の息子の検索作業に再度焦点を合わせます。
トーマスオーエンズ

回答:


5

Microsoft Researchはこの分野でいくつかの作業を行っています。次のページをご覧ください:http : //research.microsoft.com/en-us/people/nachin/。特にハルステッドに基づいているわけではありませんが、ナチと彼のチームは、ハルステッド、循環的複雑度、コードチャーン、およびコードの領域を変更するための相対的なリスクと脆弱性を評価する他の手段を使用して調査を行いました。また、組織の有効性がどのように大きな役割を果たすかについての興味深い論文もありますが、それは話題外です。:)


それらのいくつかを読みましょう。間違いなく私が興味を持っていることですが、私は(少なくとも今のところ)、特にハルステッドに興味があるので、そこで集中します。サイトにブックマークを付けたので、少し時間があれば読むことができますが、とりあえず+1します。
トーマスオーエンズ

実際のコードでは、McCabeの循環的複雑度は、生のSLOCと非常に強く相関していることが示されており、計算に増分的な価値はまったくありません。
ジョンR.ストローム

0

そのような研究はかなりあります。Googleはあなたの友達です。

Halsteadのメトリクスは、すべてのメトリクスが生のSLOC(コードのソース行)と強く相関していることが実証されたため、好意的ではなくなりました。その時点で、SLOCを測定し、それを実行するのが簡単になります。

これがGoogleブックスの結果です。


1
私はこの質問をする前からグーグル検索を行ってきましたが、出版された論文やその他の評判のよい情報源をまだ見つけていません。また、SLOCに関連するメトリックがいかに貧弱であるかを確認できません。SLOC /時間は生産性の貧弱な尺度ですが、他のSLOCベースのメトリックは通常有効とみなされます。例としては欠陥/ SLOCがあります。
トーマス・オーエンズ

1
@Thomas:HalsteadのメトリックがSLOCに「関連」しているのではなく、それらが強く相関しているということです。統計102. YとXが強く相関しているということは、Y / Xの比率がすべてのデータセットで本質的に一定であることを意味します。そのような場合は、Yが本当にあなたはすでにXから知らないあなたは何も語っていないので、Xを測定することが容易である場合はYを測定するにはポイントがありません
ジョン・R. Strohmを

それは理にかなっている。Halsteadのメトリックは、個別および合計の演算子とオペランドの数に基づいています。長いプログラムほど、より多くの総演算子/オペランドがあり、より明確な演算子/オペランドを持つ可能性が高いというのが常識です。ボリュームと難易度のメトリックは、演算子/オペランドの代わりにSLOCを使用して取得できます。ただし、それは、努力、時間、およびバグメトリックの有効性、アプリケーション、および意味(または意味の欠如)に対応していません。演算子/オペランドの代わりにSLOCを使用して計算した場合でも、これらのメトリックはシステムに関して意味のあることを示していますか?
トーマスオーエンズ

SLOCは数えやすく、おそらくより便利です。SLOCの推定値は、PSPおよびTSPで追跡されるいくつかのコスト推定手法で使用され、欠陥密度などの他のメトリックで使用できます。それは、私にとって、SLOCを数えることは、演算子/オペランドを数えることよりも良いかもしれないと言います。第二に、これまでのところ未回答であるのは、計算に使用される測定に関係なく、努力、時間、バグのメトリックの妥当性です。SLOCでそれらを計算する方が良いかもしれないことに同意しますが、私がやったとしても、何か意味があるでしょうか?
トーマス・オーエンズ

@ThomasOwens:おそらくない。労力、時間、およびバグがすべてSLOCと強く相関している場合、特定のサイズのすべてのプログラムがほぼ同じ時間と労力を費やし、同じ数のバグを抱えていることがわかります。最初の2つは、SLOCベースの推定(例:COCOMO)の基準であり、水が濡れていると言っているようなものです。3番目は実際には役立ちません。
ジョンR.ストローム

0

Halstead VolumeがSLOCと相関していることは興味深いですが、限られています。基本統計:線形相関は推移的ではありません。XはYに相関し、YはZに相関し、XがZに相関していることを意味しません。


XとYが単に相関し、YとZが単に相関する場合、はい、最初の2つの相関のノイズレベルが比較的高いため、XとZは必ずしも相関しません。XとYが強く相関しており、YとZが強く相関している場合、ノイズは非常にわずかしか含まれず、XとZが相関していることが判明する可能性が非常に高くなります。
ジョンR.ストローム
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.