品質向上のカギはフロー解析

フロー解析とは

「フロー解析」とは複数の関数・メソッドやファイルにまたがる複雑な実行パスを解析し、処理フローに依存したプログラムの問題を容易に検出する解析方法です。

フロー解析の利点
  • 結合テストを実施する前の早い段階でエラーを検出できる。
  • 処理フローに依存したエラーを検出できる。
  • 動的なテストでエラーを検出するのに比べて、パスを網羅するために必要な時間や人的リソースを節約できる。

フロー解析の弱点
  • 指摘された問題が本当にバグかどうか、目視での確認が必要な場合もある。
フロー解析も静的解析(コーディングスタンダード解析)と同様に、開発の早い段階から動的なテストでは検出が難しい問題を効率よく検出できます。ただし、指摘された問題は、コードを実行した結果ではないので、実際はバグではない可能性もあります。フロー解析と、動的にコードを実行して検証する単体テストを組み合わせて実施すると、より効果的です。

dotTESTのフロー解析で検出できる問題

バグ探偵におけるフロー解析でどのようなエラーを検出できるのか、その一部を具体的にご紹介します。

■リソースリーク
.NETで扱われるリソースには、.NETで管理可能なリソース(マネージリソース、メモリーなど)と、.NETで管理できないリソース(アンマネージリソース、ファイルなど)があります。マネージリソースはガベージコレクタの管理対象となるため自動的に解放されますが、アンマネージリソースはガベージコレクタの管理対象外となるため、プログラマが明示的に解放する必要があります。しかし、ガベージコレクタによるファイナライザの実行のタイミングや順序は確実ではないため、いつまでも解放が行われず、リソースの不足を起こす事があります。また、ファイナライザの実行は負荷も大きいため、性能の低下の原因となるため、適宜リソースは開放するべきです。

下記はODBCリソースのクローズ漏れを検出した例です。

この例ではOdbcConnectionクラスのOpenメソッドを呼び出していますが、Closeメソッドを呼び出さないまま変数の参照が失われる場所を検出しています。


■NullReferenceException
nullが設定されている変数に対してメソッドやフィールドの呼び出しなど間接参照を行うことで発生する例外です。リリース後にNullReferenceExceptionが発生した場合、以降の業務が継続出来ないなど、大きな損害を与える可能性があります。

以下はNullReferenceExceptionを検出した例です。


nullをリターンする可能性のあるメソッドの戻り値を確認せずに間接参照を行っているフローを検出しています。


■クロスサイトスクリプティング(XSS)
XSSはWebサイトの入力画面(掲示板や各種情報入力)で、ユーザーが入力した内容を検証せずに画面に表示することを原因とする脆弱性です。悪意のあるユーザーがスクリプトを入力することで、そのサイトを訪れる他のユーザーに被害が及びます。たとえば、Cookieの盗難による被害が生じる可能性があります。

以下はXSSの検出例です。


アプリケーションオブジェクトから取得するデータを汚染されたデータとして認識(カスタマイズによって追加、変更可能)し、それが何に検証もされずに画面に出力されるフローを検出しています。

品質可視化ソリューション

お客様のソースコードに対してオンサイトにて弊社エンジニアがC++test,Jtest,dotTESTのいずれかを用いたテストを無償で実施いたします。

詳しくはこちら

 

静的解析・単体テストツール dotTESTに
関するお問い合わせ

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

    システムエンジニアリング事業部
    ソフトウェアエンジニアリング営業部

    03-4405-7853

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

CONTACT

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