堅実なコードとは、一貫性と正常性が検証されていない外部データは決してプログラムに入力しないという原則を守るものである。プログラム内のバグの存在を実証できるファズテストは、論理的な人間には思いもよらないバグを見つけ出してくれるかもしれない。
ここで紹介する記事は、developerWorksの「ファズ・テスト」です。
ファズテスト。このテストがどういったテストか想像できるだろうか。非常に単純な手法でありながら、プログラムに潜む重大なバグを明らかにできるという意味で同テストの影響は計り知れない。
ファズとはランダムな不良データのことで、これを用いてプログラムを攻撃し、どこに障害が発生するかを調べるのがファズテストである。例えば、ファイルの一部をランダムデータに置き換えるだけでなく、ファイル全体のランダム化、ファイルをASCIIテキストまたは0以外のバイトに制限することもできる。
本稿の著者は、Microsoft Wordを例に挙げ、クラッシュさせる可能性のあるエラーファイルの多さと、なぜWordでは不良データを受け取ったときにそれを認識して、エラーメッセージを表示させないのか、少数のビットがいじられたからといって、Word自体のスタックとヒープが壊れてしまうのはなぜなのかと疑問を提起し、ファズテストの必要性を説いている。
ランダムデータに対するプログラムの脆弱性はどう解消すべきかを解説した本稿では、もっとも簡単な方法としてチェックサムの付加を、さらに入力に関して何も仮定しないというXMLパーサの特性から、XMLでのデータ保管を推奨し、ランダムデータに対するプログラムの脆弱性を解消するための防衛的コーディング手法を解説している。
筆者は、さらに次のステップへの道標も示してくれている。それは、コードを守るための決定的手法は、コードクラッカーとしての思考を持つことであるという逆説的なものであるが、この訓練こそが、不測の入力に対して堅固でセキュアなアプリケーションを作り上げるのだ。
ここで本稿を取り上げたのは、ファズテスト自体の内容もさることながら、こうしたコードの品質を追求するためのドキュメントとして、以下のような記事へのポインタとなっているためである。
今日のコードテスト手法をテーマにした上記連載は、テスト技術者であれば目を通しておきたい。
ここで紹介した記事は、developerWorksの「ファズ・テスト」です。
Copyright © ITmedia, Inc. All Rights Reserved.