このブログについて

ソフトウェア開発におけるエラーの予防やプロジェクト管理、品質管理を支援するParasoft製品のTIPSなどを、国内総販売代理店テクマトリックスのサポートスタッフが紹介しています。

2016年8月4日木曜日

dotTEST の フロー解析

先月リリースされた dotTEST DTP 10.2 では、フロー解析 がパワーアップし、『配列の範囲外アクセス』 やスレッド処理で発生しがちな、『デッドロック』『レースコンディション』の問題を検知できるようになりました。
今回は、新しいルールのご紹介の前に dotTEST のフロー解析をご紹介します。


フロー解析

フロー解析とは、プログラムを実行せずにソースコードを検証する静的解析です。
単体テストのようにテストデータを用意する必要なく、アプリケーションに潜むクリティカルな問題を発見することができます。
dotTEST には、フロー解析以外にも コーディングスタンダードがあります。これは、パターンマッチングでコードを検証するのに対してフロー解析は、クラスやメソッドをまたがった実行パスを解析し、特定の条件で発生するアプリケーションの問題を発見できます。

アプリケーションを動作させず問題を検出できるため、テスト環境での実行が難しい処理想定していなかった例外パターンなどの問題を見つけることができます。


NullReferenceException の問題

『NullReferenceException』の問題を例に、問題を見つけるまでの流れを説明します。
まず、変数からのメソッド呼び出しを 怪しいポイントとみなします。
そして、その怪しいポイントを通る実行パスを抽出し、メソッド呼び出しの変数に null が設定されている場合に、問題をレポートします。

では、実際のコードを例に説明いたします。

NullReferenceException が発生するコード:
public EngineInfo BadGetEngineInfo()
{
    EngineInfo engine = null; 

    // 条件により engine に値を設定 

    return engine;
}
public void NullReferenceFromMethodReturnValue()
{
    var engine = BadGetEngineInfo(); 
    string str = engine.ToString(); //怪しいポイント
    Console.WriteLine(str); 
}

このサンプルコードでは、BadGetEngineInfo メソッドは特定の条件を満たさない場合に、null を返してしまいます。
この状態で engine.ToString() が実行されると、NullReferenceException が発生します。


dotTESTのイメージ:







NullReferenceException が発生する原因は、今回の例だけでなく、
  • 条件によってオブジェクトに値が入らない
  • メソッドのパラメータが null
  • コレクションや配列のオブジェクトが null
などがあり、dotTEST は、これらのパターンも検出することができます!

フロー解析の種類

dotTEST DTP 10.2 では、NullReferenceExceptionの問題以外にも
  • リソースリーク
  • InvalidOperationException
  • SQLインジェクション
  • クロスサイトスクリプティング(XSS)
  • 配列の境界外アクセス new
  • デッドロック new
  • レースコンディション new

などのクリティカルな問題を見つけることができます。


ぜひこの機会に、dotTEST のフロー解析をお試し頂き、品質の高いアプリケーションの開発に取り組んでください。


dotTESTの体験版はこちらから



次回は、新たに検出できるようになった『デッドロック』や『レースコンディション』の問題をご紹介します!