リスク分析 「Lattix / Understand 構造解析ソリューション」

ソフトウェアの機能追加や品質を上げるためにはソースコードの変更は不可欠です。その一方で、ソースコードの変更には以下のようなリスクがともないます。

  • 過去のバージョンで既に修正済の不具合の再発
  • 変更・修正した箇所以外での新たな不整合・不具合の発生
  • 度重なる変更によりアーキテクチャが崩れる

ここでは、変更時にバグが混入しやすいリスクに着目し、メトリクス・依存関係の複雑さなどソースコードの構造から”リスク”を見抜く方法についてご紹介します。

コード変更時の影響範囲

課題

  • ソースコードが複雑化しており、すべてのテストを実施することができない
  • 変更点はテストしているが、影響範囲を考慮できていない
  • テストでバグは検出できるが、バグのない完璧なコードは作ることはできない

解決策

Lattixのアーキテクチャメトリクスから「構造複雑度」を算出し、不具合混入リスク(バグ密度=バグが発生しうる可能性)が高い箇所を特定します。
  1. 構造的複雑度と循環的複雑度を計測する
  2. リスクが高いファイルを検出するために、複雑度の分類を行う
  3. バグ密度の高いファイルを可視化、テスト範囲を選定する
1.構造的複雑度と循環的複雑度を計測する

この構造複雑度は、アーキテクチャ(設計依存間の依存性=結合状態)を計測し、システムの特徴を研究するグループの、Sturtevantという人物が、研究で使用したアーキテクチャ構造に対するメトリクスのことを指しています。
また、姉妹ツールのUnderstandでは「循環的複雑度」を算出し、コードの複雑度から不具合混入リスクを分析します。
  • 構造的複雑度
Lattixでは、ソフトウェアアーキテクチャを定量的に評価するアーキテクチャメトリクスの測定が可能です。 その中で、「VFI・VFO(Visibility ファンイン/ファンアウト)」の指標では、間接依存を考慮したFan-in/outの数が計測できるため、他のファイル・クラスへ影響を与えやすい、複雑なファイル・クラスを分析することが可能です。
  • 循環的複雑度

姉妹ツールのUnderstandでは、ソフトウェアの品質を定量的に評価するソースコードメトリクスの測定が可能です。その中で、「Cyclomatic複雑度」の指標では、分岐の数から関数/メソッドの複雑度を分析することが可能です。

2.リスクが高いファイルを検出するために、 複雑度の分類を行う

アーキテクチャメトリクスの1つである「VFI/VFO」の数値をもとに、4つの領域に構造複雑度の分類分けを行います。
例)VFI/VFOの各数値で、最大値の半分を閾値として分類する


この分類方法は、Sturtevantの複雑度分類とも呼ばれます。
Sturtevantという人物が研究で使用し、アーキテクチャ構造に対するメトリクスの論文でバグとの相関があると発表しています。

構造複雑度が高いファイル(図のCore)は、低いファイル(図のPeripheral)と比較し、バグ密度(リスクの高さ)が3.1倍になるといわれています。
加えて、循環的複雑度の1指標でもある「Cyclomatic複雑度」と組み合わせて追加分類をすることで、バグ密度が最大8.3倍にもなるとの検証結果があります。

3.バグ密度の高いファイルを可視化、 テスト範囲を選定する

検出されたリスクの高いファイルはレポートで確認が可能です。また、結果をHTMLでグラフとして表現するスクリプトも公開しております。
検出されたバグ混入リスクの高いファイル周辺を重点的にテストすることが望ましいです。具体的には、検出されたファイルに対して、影響範囲を見積もり、影響箇所を抜け漏れなくテスト範囲に含めることも重要です。
>>影響分析ソリューションページ

アーキテクチャ分析ツール Lattixに
関するお問い合わせ

  • テクマトリックス株式会社
    東京本社

    ソフトウェアエンジニアリング事業部

    03-4405-7853

メールでのお問い合わせ
lattix-info@techmatrix.co.jp

お問い合わせ

製品についてやテクマトリックスについてなど、
こちらよりお気軽にお問い合わせいただけます。