ファジング
ファジングの最も一般的な対象は、ファイル形式とネットワークプロトコルであるが、任意のプログラム入力をテスト対象として使用できる。入力には、環境変数、キーボードとマウスのイベント、およびAPI呼び出しシーケンスが挙げられる。手法によっては、データベースの内容、共有メモリ、スレッド間のコンテキストスワップなど、通常は「入力」とは見なされないアイテムもファジングの対象とすることが可能である。 以下、ファジングを用いる代表的な対象を挙げる。
コマンドラインのファジング
環境変数のファジング
ファイル形式のファジング(不正なjpegファイルを読み込ませても大丈夫か、といった類のファジング) Webブラウザのファジング(アプリケーションが広範に用いられている事情から、この分野に特化したツールも多く登場している)
ネットワークプロトコルのファジング
Webアプリケーション(サーバー側)のファジング
原始的なファジングツールは、ウィスコンシン大学マディソン校のオペレーションシステムに関する講義において、教授バートン・ミラー(英語:Barton Miller)と、ミラーが指導する大学院生Lars FredriksenおよびBryan Soによって1988年に開発され、1990年に研究論文として公開された。 これは、UNIXアプリケーションの脆弱性テストに作成したコマンドラインプログラムである。ランダムな入力およびコマンドラインパラメータを自動的に生成することを目的として、エラーで停止するまで他のプログラムにパラメータとして渡されるランダムデータを生成した。ランダムな非構造化データを使用した初めてのテストであるだけでなく、さまざまなオペレーティングシステムのさまざまなプログラムをテストし、テスト中に発生するエラーの種類を体系的に分析するための最初の専用アプリケーションでもあった。 このプロジェクトは、「オペレーティングシステムユーティリティ信頼性プログラム――ファジングジェネレータ」と名付けられた。このファジングという語は、英語の単語fuzzy(ファジー、ぼやけの意味)に由来する。
ファジング(英語: fuzzing)とは、コンピュータプログラムヘの入力として、無効なデータ、予期しないデータ、ランダムなデータを用いた自動化ないし半自動化されたソフトウェアテストの手法である。コンピュータプログラムにファズ(「予測不可能な入力データ」の意、英語: fuzz)を与えることで、意図的に例外的な状況を発生させ、その例外的な状況での挙動を確認するという方法を用いる。ファズテスト(fuzz testing)とも呼ばれる。また、ファジングの対象プログラムに対してファズテストを実行するツールは、ファザー(fuzzer)と呼ばれる。
よく知られているオープンソースフレームワークとしては、Peach FuzzerやSullyが挙げられる。これらのフレームワークは非常に複雑であり、利用にあたってはファジングとプロトコルに関する広範な知識が必要である。また、既存のテストツールまたは既存のテストプロセスを統合するため、Fuzzinoなどのテスト環境プラットフォームも公開されている。
ファジングは、自動化あるいは半自動化されたブラックボックステストないしはグレーボックステストに分類される。ブラックボックステストとして使うこともあるが、リバースエンジニアリングによってどのような機能を持っているか(ネットワークアプリケーションであれば、どのライブラリのどのAPIを呼び出しているか、など)を特定することで入力機能に関する情報が得られるため、このようにして得られた情報を付随してグレーボックステストとして行なわれることもある。 ファジングは、ブラックボックスファジング、グレーボックスファジング、ホワイトボックスファジングの3種に類別することが可能である。Fuzzing-survey.orgでは、既存のブラックボックス、グレーボックス、ホワイトボックスのファザーをそれぞれの系統樹形式で閲覧することができる。