今回は、新しいルールのご紹介の前に dotTEST のフロー解析をご紹介します。
フロー解析とは、プログラムを実行せずにソースコードを検証する静的解析です。
単体テストのようにテストデータを用意する必要なく、アプリケーションに潜むクリティカルな問題を発見することができます。
dotTEST には、フロー解析以外にも コーディングスタンダードがあります。これは、パターンマッチングでコードを検証するのに対してフロー解析は、クラスやメソッドをまたがった実行パスを解析し、特定の条件で発生するアプリケーションの問題を発見できます。
アプリケーションを動作させず問題を検出できるため、テスト環境での実行が難しい処理や想定していなかった例外パターンなどの問題を見つけることができます。
『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 DTP 10.2 では、NullReferenceExceptionの問題以外にも
- リソースリーク
- InvalidOperationException
- SQLインジェクション
- クロスサイトスクリプティング(XSS)
- 配列の境界外アクセス new
- デッドロック new
- レースコンディション new
などのクリティカルな問題を見つけることができます。
ぜひこの機会に、dotTEST のフロー解析をお試し頂き、品質の高いアプリケーションの開発に取り組んでください。
dotTESTの体験版はこちらから
次回は、新たに検出できるようになった『デッドロック』や『レースコンディション』の問題をご紹介します!