PR

 前回は、ソースコードの静的解析ツールがいかに有効で、プログラマにとって必須のツールであるかを紹介しました。コーディング規約チェックや潜在バグチェックでも、プログラムの品質を高める十分な効果が得られます。ただし最近では、より高機能な静的解析ツールがあります。今回はそれらを紹介します。

複数クラスにまたがった問題を静的解析するツール

 前回紹介したCheckstyleやFindBugsは、一つのファイルが解析対象です。つまり複数のファイル(クラス)にまたがった問題によって生じるバグの検出には適していません。また、どちらも基本的にはある決められたパターンに従っているかどうかをチェックする仕組みをとっていますので、あらかじめ用意されたパターン以上の解析はできません。

 一方、複数のファイルにまたがって関数(メソッド)の呼び出しを追跡しながら、プログラムの実行をシミュレートする高度な静的解析ツールもあります。これにより、実行時の例外処理やシステムクラッシュにつながるような問題を検出できます。プログラム自体を実行するわけではないので静的解析ツールに分類されますが、入力した値に対する結果を確認する動的解析に近いことを実現しています。

 代表的なツールには、「Jtest」「C++test」のバグ探偵機能や、「Coverity Static Analysis」があります。いずれも有償のツールです。

セキュリティの脆弱性を静的解析するツール

 ソフトウエアにセキュリティ脆弱性があった場合の社会的影響は計り知れません。現代では、ソフトウエアにおけるセキュリティ対策は最重要項目といえます。

 従来のセキュリティテストといえば、たとえばWebサイトの脆弱性を狙った攻撃を疑似的に仕掛けるといった動的なテストが一般的でした。しかし、SQLインジェクションやクロスサイトスクリプティングに代表されるさまざまな脆弱性への対策が取れているかは、ソースコードの記述を見れば分かります。つまり、静的解析ツールによって問題の検出が可能です。

 動的なセキュリティテストはソフトウエアがある程度動作する状態にならないと実施できず、さまざまな入力を与えて攻撃するのにも労力が必要です。しかし、静的解析ツールを使えば問題を早期にかつ容易に見つけることができ、非常に効果的です。

 静的なセキュリティテスト機能を備える代表的なツールには、「HP Fortify SCA」や「IBM Security AppScan」があります。いずれも有償のツールです。