ホワイトボックステスト

ホワイトボックステスト (英: white-box testing)は、アプリケーションの機能（ブラックボックス）ではなく、アプリケーションの内部構造をテストするソフトウェアテストの手法である。構造テストとも呼ばれる。開発したソフトウェアを中身が見える箱として扱い、内部論理を網羅的にテストする。プログラムが辿る経路をどれだけ実行したかを基準とする。
ホワイトボックステストでは、システムの内部的な視点とプログラミングスキルを使用して、テストケースを設計する。テスターは、入力を選択してコード内のパスを実行し、期待される出力を決定します。これは、インサーキットテスト（ICT）など、回路内のノードのテストに類似しています。ホワイトボックステストは、ソフトウェアテストプロセスのユニット、統合、およびシステムレベルで適用できます。従来のテスターは、ホワイトボックステストをユニットレベルで行われると考える傾向がありましたが、今日では統合およびシステムテストに使用されることが多くなっています。ユニット内のパス、統合中のユニット間のパス、およびシステムレベルのテスト中のサブシステム間のパスをテストできます。このテスト設計方法では、多くのエラーや問題を発見できるが、仕様の実装されていない部分や不足している要件を見逃す可能性がある。ホワイトボックステストが設計主導型である場合 、つまり、ソフトウェアの各コンポーネントの動作が合意された仕様のみに基づく場合（ DO-178CおよびISO 26262プロセスのように）、ホワイトボックステスト手法で、未実装の要件と欠落している要件の評価を行うことができる。
ホワイトボックステストの設計手法には、次のコードカバレッジ基準が含まれる。
概要.
ホワイトボックステストは、ソースコードのレベルでアプリケーションをテストする方法です。これらのテストケースは、上記の設計手法（制御フローテスト、データフローテスト、ブランチテスト、パステスト、ステートメントカバレッジ、決定カバレッジ、および変更された条件/決定カバレッジ）を使用して導出されます。ホワイトボックステストは、すべてのコードを調べてエラーのない環境を作成するためのガイドラインとしてこれらの手法を使用することです。これらのホワイトボックステスト手法は、ホワイトボックステストの構成要素であり、その本質は、後で隠れたエラーを減らすために、ソースコードレベルでアプリケーションを注意深くテストすることです。 これらのさまざまな手法は、ソースコードの目に見えるすべてのパスを実行して、エラーを最小限に抑え、エラーのない環境を作成します。ホワイトボックステストの要点は、コードのどの行が実行されているかを知り、正しい出力がどうあるべきかを識別できることです。 
基本的な手順.
ホワイトボックステストの基本的な手順では、テスターがテスト対象のソースコードに関する深い知識を持っている必要があります。プログラマーは、アプリケーションを深く理解して、作成するテストケースの種類を把握し、目に見えるすべてのパスがテストのために実行されるようにする必要があります。ソースコードが理解されると、作成するテストケースについてソースコードを分析できます。以下は、テストケースを作成するためにホワイトボックステストが実行する3つの基本的な手順です。
短所.
ホワイトボックステストには大きな利点がありますが、完全ではなく、いくつかの欠点があります。
現代の見解.
より現代的な見方は、ホワイトボックステストとブラックボックステストの二分法が曖昧になり、関連性が低くなっているというものです。 「ホワイトボックス」は元々ソースコードを使用することを意味し、ブラックボックスは要件を使用することを意味していましたが、テストは現在、さまざまな抽象化レベルの多くのドキュメントから派生しています。本当のポイントは、テストは通常、入力スペース、グラフ、論理述語などの抽象構造から設計されているということです。問題は、その抽象構造をどのレベルの抽象化から導き出すかです。 これは、ソースコード、要件、入力スペースの説明、または数十種類の設計モデルの1つです。したがって、「ホワイトボックス/ブラックボックス」の区別はそれほど重要ではなく、用語の関連性も低くなります。
ハッキング.
ペネトレーションテストでは、ホワイトボックステストとは、ホワイトハットハッカーが攻撃対象のシステムを完全に把握している方法を指す。ホワイトボックス侵入テストの目標は、ターゲットシステムの知識と、場合によっては基本的な資格情報を持っている悪意のあるインサイダーをシミュレートすることです。