San Antonio API Security Summit 2025 に参加しよう!
San Antonio API Security Summit 2025 に参加しよう!
San Antonio API Security Summit 2025 に参加しよう!
San Antonio API Security Summit 2025 に参加しよう!
San Antonio API Security Summit 2025 に参加しよう!
San Antonio API Security Summit 2025 に参加しよう!
閉じる
プライバシー設定
ウェブサイト運営に必要なCookieや類似技術を使用しています。追加のCookieは貴社の同意がある場合のみ利用されます。同意は「Agree」をクリックすることでいただけます。どのデータが収集され、どのようにパートナーと共有されているかの詳細は、Cookieポリシープライバシーポリシーをご確認ください。
Cookieは、貴社デバイスの特性や、IPアドレス、閲覧履歴、位置情報、固有識別子などの特定の個人情報を取得、解析、保存するために使用されます。これらのデータは様々な目的で利用されます。分析Cookieによりパフォーマンスを評価し、オンライン体験やキャンペーンの効果向上に役立てます。パーソナライズCookieは、利用状況に応じた情報やサポートを通じ、貴社専用の体験を提供します。広告Cookieは、第三者が貴社のデータをもとにオーディエンスリストを作成し、ソーシャルメディアやネット上でのターゲット広告に使用します。貴社は各ページ下部のリンクから、いつでも同意の許可、拒否、または撤回が可能です。
ご送信ありがとうございます。内容を受け付けました。
申し訳ありません。フォーム送信時にエラーが発生しました。
/
/
Pentest

ホワイトボックステスト

ホワイトボックステストはソフトウェアテスト、正確には内部のロジックと構造を確認するテストです。本記事でその手法について詳しく学んでください。

ホワイトボックステストの概要

ホワイトボックステストは、製品の内部構造、設計、コードを検証し、入力と出力が正しく生成されるか、設計、アクセスのしやすさ、セキュリティ、使いやすさを向上させる手法です。テスターがコードを直接確認できるため、「オープンボックステスト」「クリアボックステスト」「コードベーステスト」「ストレートボックステスト」「ガラスボックステスト」とも呼ばれます。

ホワイトボックステスト

ホワイトボックステストは、テストプロジェクトやソフトウェア開発におけるボックステストの一手法です。ボックステストにはホワイトボックステストと発見テストがあり、発見テストはエンドユーザーの視点に重点を置きます。一方、ホワイトボックステストは製品の内部構造を詳しく検証する内部テストです。

White Box Testing work

コードに基づくテストは、その透明な手法から「ホワイトボックス」と呼ばれます。この手法では、ソフトの外側を通り抜け、内部の機能まで詳しく確認できます。一方、「ブラックボックス」では内部が見えず、エンドユーザーの体験だけでテストが行われます。

ホワイトボックステストの構成要素

この手法では、製品コードについて以下の点がテストされます:

  • 内部のセキュリティホールと脱出条件
  • プログラミング中の不備な経路や作成ミスのあるパス
  • コードやプログラムへの継続的な変更の進行
  • 標準的な入力と出力
  • 変更されたループの有効性
  • 製品内の各宣言、モジュール、機能のテスト

ホワイトボックステストは、統合、単体、システムレベルで実施されます。主な目的は、アプリがどのように動作しているかを確認することです。また、複数の決められた関数と標準的な出力を照合し、期待通りに動作しない部分があればバグがあると判断します。

ホワイトボックステストはどのように実施するか

ホワイトボックステストは二つのシンプルな段階で行われます。Wallarmのエンジニアは、以下の方法でホワイトボックステストを実施します:

  • ソースコードを確認する

ホワイトボックステストで最も重要なのは、アプリのソースコードを把握することです。このテスト手法はアプリの内部構造に焦点を当てるため、テスターはソースコードに精通している必要があります。プログラミング言語の詳細な知識は、対象アプリを完全に理解する上で最善の方法です。また、最適な安全なコーディング手法についても理解が求められます。セキュリティはホワイトボックステストの重要な要素であり、テスターはセキュリティ上の問題を見つけ、システムを攻撃から守る対策を講じる必要があります。さらに、悪意のあるコードが混入する可能性にも備えなければなりません。

  • テストケースを作成し実行する

ホワイトボックステストの第二段階では、内部構造をテストし、各機能が正しく動作するか確認します。テスターはソースコードを検証するためのコードを作成し、開発サイクルの各段階で小規模なテストを実施します。これにより、全体の動作が確認されます。なお、詳細なコード知識が必要なため、通常はエンジニアが実施し、リソースが不足している場合はテストが行われないこともあります。

ホワイト、グレー、ブラックボックステストの違い

開発中の製品をテストせずに品質を確かめることは困難です。これらのテストは、製品が全ての要件を満たし、安全で完成度が高く、応答性があるかどうか検証するために行われ、エラーや不具合を未然に防ぐ目的があります。

ソフトウェアテストは、製品を様々な試験にかけることで、エラーや不整合、悪意ある挙動を発見するプロセスです。各テスト後、テスターは状況を分析し、その結果を報告書に記録します。報告書は、検出された不具合を修正し、システムの品質を保つために役立ちます。

近年、発見テスト、グレーボックステスト、ホワイトボックステストなど様々な手法が用いられています。各テスト手法は、エンジニアがバグのない、スムーズに動作するソフトを作るための多様なアプローチを提供します。それぞれの違いを詳しく見ていきます。

オープンソースツールを利用してセキュリティテストを試してみてください - GoTestWAF

ブラック、グレー、ホワイトボックステストの違いを明確にするため、それぞれのメリットとデメリットを詳しく見ていきます。

ブラックボックステスト

ブラックボックステスト(発見テストとも呼ばれる)の特徴は、テスターが製品の内部構造やソースコードを知らない点にあります。このテストでは、プログラミング言語の専門知識や詳細なコード情報は不要です。発見テストの目的はコード内部を詳しく見ることではなく、ユーザーインターフェースに触れ、様々な状況での表示とシステムの入出力が正しいか確認することにあります。そのため、発見テストは機能ベースのテストとも呼ばれます。

発見テストは、第三者のテストチームがエンドユーザーの視点で実施します。テスターは正しいまたは誤ったデータを入力し、結果を期待値と比較します。予期せぬ結果は記録され、エンジニアに改善依頼が送られます。この仕組みにより、開発初期段階でエラーや不具合を早期に発見できます。

発見テストは、単体、結合、システム、受け入れなど様々なレベルで実施可能です。単体テストではインターフェースの動作が規定に沿っているかを確認し、結合テストでは各部品間の連携を検証します。システムテストではシステム全体の信頼性と基本機能が試され、受け入れテストでは様々な状況下でのアプリの応答性が評価されます。

一般的な発見テスト手法として、以下の方法が挙げられます:

  • 選択表テストは、if-elseやswitch-case文に基づいて動作するプログラムからバグを検出するのに有効です。これにより、エラーの原因を把握できます。
  • 欠陥推測は、過去のテストでのユーザーの直感や体験を基に、エラーの原因を特定するためのテストケースを作成する手法です。
  • オールペアテストは、入力値の様々な組み合わせとシステムの反応を検証する手法で、内部構造間の相互作用で隠れたバグを発見します。
  • 比例分割法は、システムを複数の部分に分割してそれぞれテストする方法です。内部構造全体をカバーするテストを作成し、テスト時間の短縮を目指します。

発見テストのメリットとデメリット

発見テストは、製品内部のあいまいさ、論理的不整合、曖昧な部分を見つけ出すのに有効です。テスターは内部部分に触れることなく機能を評価でき、その結果は客観的で、エンドユーザーとエンジニアの作業の違いを浮き彫りにします。

発見テストは追加のプログラミング知識を必要とせず迅速に実施できますが、大規模なプログラムのテストにはあまり効果的ではありません。

ホワイトボックステスト

機能に注目する発見テストとは異なり、ホワイトボックステストは製品の内部構造を詳細に検証し、その設計意図を明らかにすることを目的とします。論理駆動テストとも呼ばれ、専門的な知識が求められるため、テスターは内部部品へのアクセスが必須です。

ホワイトボックステストは、製品の内部構造を検証し、部品間の連携や異常な動作を特定して修正するため、専門家が実施します。また、ソースコード解析やデバッグなど、先進的なツールも用いられます。

この手法の効果は主に単体テストで発揮されますが、結合テストやリグレッションテストなどにも利用されます。テスターは内部構造を検証し、コード上の欠陥や問題点を発見します。さらに、新たに実施されたコードテストを加える前に、エラーの発生を未然に防ぎます。

結合テストでは、各インターフェースやサブシステム間の連携を検証するのに役立ち、リグレッションテストは、単体や結合テストで作成したホワイトボックステストケースを再利用して確認します。

代表的なホワイトボックステスト手法は以下の通りです:

  • 制御フローテストは、アプリの論理を検証し、内部の制御や機能のパフォーマンスを評価する手法です。これにより、システム内部の障害を容易に見つけることができます。
  • データフローテストは、未使用の変数や、コーディングミスによる異常を検出する手法です。未使用部分を特定し、徹底的なテストと小さな問題の修正を促します。
  • 分岐テストは、真偽の条件で分岐するコード部分を検証し、各分岐に異常がないか確認します。

ホワイトボックステストのメリットとデメリット

ブラックボックス手法と比較すると、ホワイトボックス手法は正確性に優れ、誤った設計や不要なコードを明らかにできます。このプロセスはテスターにソースコードの深い理解を要求し、異なるコードの追跡や将来の変更点も新たなテストで確認しやすくなります。

また、コーディング過程のボトルネックを明らかにし、開発チームに広範なテストカバレッジと有用なフィードバックを提供、コードの改善や修正を容易にします。ホワイトボックステストには高度な知識が必要なため、専門のエンジニアがシステム全体のテストを担当するのが望ましいです。

自動化されてはいるものの、ホワイトボックステストは複雑で時間を要します。エンジニアは正確なフローや経路を特定し、テストするために長時間を費やさなければなりません。優秀な技術者を起用すれば良い結果が得られますが、維持費は高くなります。また、テスト結果は使用するプログラミング言語に依存するため、ソフトのコードが変更されれば、従来の仮定が無効となり内部構造も変化します。

グレーボックステスト

グレーボックステストは、ブラックボックスとホワイトボックステストの利点を組み合わせ、それぞれの欠点を補う手法です。両方のテスト手法のカバレッジを拡大し、ソフトの全層を効果的に検証します。グレーボックステストでは、インターフェースや機能のテストとともに、内部構造の確認も行います。

この手法は、複雑なシステムを対象とし、エンジニアやテスター、エンドユーザーがテストを実行できる発見手法を採用します。しかし、テストケースの設定には内部構造の一部情報、データ形式のドキュメント、設計情報、そして製品の実用的な詳細が必要です。作成されたテストケースは、設計上の脆弱性を検出し、改善することを目的としています。

グレーボックステストは、特に結合テストで有効です。ウェブアプリはソースコードや内部構造が見えにくいため、ホワイトボックス手法ではテストしづらいですが、この手法であれば対応可能です。また、ビジネス分野のテストにも適用できます。

代表的なグレーボックステスト手法は、次の通りです:

  • マトリックステストは、テストケースが顧客要求を網羅しているかを確認し、欠落している機能を容易に特定します。まるでテストカバレッジの進捗報告のようです。
  • リグレッションテストは、製品変更の影響を分析する手法で、変更後もシステムが正しく動作するかを確認し、新たなバグや既存機能への影響がないかを検証します。
  • パターンテストは、テスト対象製品で発生した欠陥のパターンを分析し、その根本原因を探って再発を防止する手法です。

グレーボックステストのメリットとデメリット

グレーボックステストは、ブラックボックスとホワイトボックステストの良い点を取り入れつつ、それぞれの欠点を補っています。仕様やインターフェース、構造を深く掘り下げずにテストが可能なため、重要な点を同時に確認できます。

しかし、グレーボックステストは効果的なプロジェクト管理が必要で、テスト中に同様のシナリオが重複しやすく、一部の領域がカバーされないため、アルゴリズムのテストには不向きです。

ホワイトボックステストの種類

ホワイトボックステストには、以下の種類があります:

ミューテーションテスト: ソフトやコードの内部構造を詳しく検証し、システムが予期しない動作をする原因となる経路やエラーを特定する手法です。予期せぬクラッシュや異常状態に対処するのに有効です。

Mutation testing

ユニットテスト: このテストでは、アプリの各部品が期待通りに動作するかを検証します。ソフトウェア開発中にエラーを迅速に発見するのに効果的です。

unit testing

結合テスト: 各部品やユニットを組み合わせ、一体としてテストし、部品間の連携に起因するエラーを検出します。

ホワイトボックスペネトレーションテスト: 外部からの攻撃がシステムに影響を与えるかを検証するテストです。外部要因との連携や外部からのエラーが、システムに与える影響を確認します。

スタティックコード解析: コードの各行を詳細に解析し、エラーを検出する手法です。基本的なエラーは修正され、不適切な部分があれば全体の置換えも検討されます。

Types of White Box Testing

ホワイトボックステストツール

一般的なオープンソースのホワイトボックステストツールは以下の通りです:

  • JUnit は、Javaを利用するエンジニア向けの単体テストツールです。
  • HtmlUnit は、Javaベースのヘッドレスブラウザで、HTTPレスポンスを自動取得しユーザーの動作を模倣します。主にウェブアプリの結合テストで、JUnitなどと併用されます。
  • PyUnit は、Pythonを利用するエンジニア向けの単体テストツールです。
  • Selenium は、さまざまなプラットフォームや言語でウェブアプリを自動検証するためのテストツール群です。Python、C#、JavaScriptなど幅広い言語に対応しています。

ホワイトボックステストの手法

ホワイトボックステストには主に三つの手法があります:

ステートメントカバレッジ

ステートメントカバレッジは、ホワイトボックステストにおける基本的なコードカバレッジ分析で、アプリのソースコード内で実行された文の数を評価します。

計算式は以下の通りです:

Statement coverage = (Number of statements executed/Total number of statements) * 100
Statement Coverage

ブランチカバレッジ

ブランチカバレッジは、制御構造の各部分が実行された数を計測するホワイトボックステストの手法です。

文、case宣言、その他の条件分岐が正しく実行されたか確認します。

例えば、if文では、真偽両方の分岐が実行されたかを確認できます。

計算式は以下の通りです:

Branch coverage = (Number of branches executed/Total number of branches) * 100
Branch Coverage

ファンクションカバレッジ

ファンクションカバレッジは、定義された関数が呼び出された数を評価する手法です。テスターは、複数の入力値を試し、関数が期待通りに動作するか確認します。

計算式は以下の通りです:

Function coverage = (Number of coverage executed/Total number of coverage) * 100

ホワイトボックステスト - ソフトウェアテストに不可欠な要素

ソフトウェアテストにおいて、ホワイトボックステストは、対象システムの内部動作に完全アクセスできるユーザーの動作を模倣する有用な手法です。テスターはアプリの内部詳細全てにアクセスでき、多くの重要な条件を検出することが可能となります。

ホワイトボックステストは、コードの安全性、品質、信頼性を担保するために、開発チームが活用すべき数少ないテスト手法の一つです。場合によっては、未経験の外部ユーザーの視点を反映する発見テストなど、他の手法も併用されます。

FAQ

Open
ホワイトボックステストとは何か?
Open
技術分野におけるEncryption-in-Useの意義は何でしょうか?
Open
ホワイトボックステストでよく使われるツールは何か?
Open
ホワイトボックステストの推奨実践法は何ですか?
Open
ホワイトボックステストはブラックボックステストとどう違うか?

参考資料

White Box Testing - Github topics

最新情報を購読

更新日:
February 25, 2025
学習目標
最新情報を購読
購読
関連トピック