フロー解析とは
C++test - フロー解析ページへ自動的に遷移します
フロー解析には、データの取りうる値の変化を解析するデータフロー解析や、プログラムの実行パスを解析する制御フロー解析があります。
フロー解析の利点
- 結合テストを実施する前の早い段階でエラーを検出できる。
- 処理フローに依存したエラーを検出できる。
- 動的なテストでエラーを検出するのに比べて、パスを網羅するために必要な時間や人的リソースを節約できる。
- 指摘された問題が本当にバグかどうか、目視での確認が必要な場合もある。
フロー解析も静的解析(コーディングスタンダード解析)と同様に、開発の早い段階から動的なテストでは検出が難しい問題を効率よく検出できます。ただし、指摘された問題は、コードを実行した結果ではないので、実際はバグではない可能性もあります。フロー解析と、動的にコードを実行して検証する単体テストや実行時エラー検出を組み合わせて実施すると、より効果的です。
フロー解析で検出できる問題
フロー解析では、以下のようなコードの問題点を検出できます。- メモリリーク
C・C++言語では、動的に割り当てたメモリを解放するのはプログラマの責任であるため、明示的にメモリを解放していないパスがあるとメモリリークが発生します。JavaやC#などのガベッジコレクション機構を備えた言語では、メモリリークは発生しないと思われがちですが、プログラマの予期しないところでオブジェクトが参照されたままになっているとメモリリークが発生する場合があります。 - 未初期化変数の使用
C・C++言語では、初期化していないローカル変数の値は不定です。JavaやC#では、初期化していないローカル変数の使用は、コンパイラによってレポートされます。メンバー変数は変数の型に応じた値で自動的に初期化されますが、参照型はnullで初期化されるため、適切なオブジェクトを設定せずに参照すると、null参照エラーが発生します。 - 到達できないコード(デッドコード)
If文が常に真または偽のどちらかに評価される場合や、switch文の条件に不可能な値が使用されている場合など、分岐の一部が到達できないコードになる可能性があります。 - セキュリティの脆弱性
ユーザーが入力した値の妥当性を検証せずに、データベースへのクエリーの一部やファイルパスの一部として使用している場合など、悪意のあるユーザーによって不正な値が入力されるとデータが破壊されたり機密データにアクセスされたりする可能性があります。
Parasoft社テストツールのフロー解析で検出できる問題(抜粋)
Parasoft社のテストツールは、C・C++、Java、C#/VB .NETのソースコードに対するフロー解析をサポートしています。課題 | 問題 | 言語 | ||
---|---|---|---|---|
C・C++ | Java | C#/VB .NET | ||
C++test | Jtest | dotTEST | ||
メモリ・リソースリーク | メモリの解放漏れ | ○ | ||
DB接続のクローズ漏れ | ○ | ○ | ||
ソケットのクローズ漏れ | ○ | ○ | ○ | |
ストリームのクローズ漏れ | ○ | ○ | ||
セキュリティ | SQLインジェクション | ○ | ○ | ○ |
ファイル名インジェクション | ○ | ○ | ○ | |
コマンドインジェクション | ○ | ○ | ○ | |
クロスサイトスクリプティング | ○ | ○ | ||
バッファーオーバーフロー | ○ | |||
その他 | ゼロ除算 | ○ | ○ | ○ |
Null チェックの前の間接参照 | ○ | ○ | ○ | |
C++test | Jtest | dotTEST |
※ フロー解析はServer Editionに含まれる機能です。
関連項目
- 検証の種類-単体テスト
- 検証の種類-カバレッジ
- 検証の種類-静的解析
- 検証の種類-フロー解析
フロー解析を自動化するツール
C・C++言語:C++test(C/C++対応自動テストツール)のフロー解析Java言語:Jtest(Java対応自動テストツール)のフロー解析
.NET:dotTEST(.NET対応自動テストツール)のフロー解析
本件についてお問い合わせ
テクマトリックス株式会社
東京本社ソフトウェアエンジニアリング事業部
03-4405-7853
- メールでのお問い合わせ
- se-info@techmatrix.co.jp