ホワイトボックステストとは? ブラックボックステストとの違いや種類・やり方を解説!

更新:2024.5.16
著者:Sky株式会社


ホワイトボックステストとは?

ホワイトボックステストとは、システム開発の現場で製品のチェックのために行われるテストの一種です。システムの内部構造に重点を置いたテスト方法で、プログラムが仕様どおり正しく組み立てられ、意図どおりに動作しているかを検証します。各部品のテストを行う「単体テスト」という工程で主に実施されます。

内部構造に問題がないかを確かめるには、命令や分岐条件などのあらゆるパターンを網羅するようにテストしなければなりません。そのためホワイトボックステストでは、どの程度の網羅率になるようテストケースを作成するべきか、状況に応じて基準を設定することで効率化を図ります。

また、プログラムの内部構造について理解した上でテストを実施する必要があることから、開発担当者が行うのが一般的とされています。

ホワイトボックステストの目的・必要性

システム開発において行われるテストには、ホワイトボックステスト以外にもさまざまな種類があります。効率的にチェック漏れのないテスト計画を立てるためには、それぞれの役割やメリット・デメリットを理解し、目的に合わせてテスト方法を選択することが大切です。

ホワイトボックステストが選択される理由や目的には、以下のようなものがあります。

ホワイトボックステストの目的は?

プログラムの内部に着目するホワイトボックステストは、「ユーザー視点のテスト」ではなく「作り手側視点のテスト」であるといわれています。ユーザー視点のテストでは一見問題がないように見えても、プログラムの内側には不具合が潜んでいることがあります。作り手の視点でソースコードの仕様や動作の分岐条件といった内部構造を確認し、外側からは見えない潜在的な問題を発見することが、ホワイトボックステストを行う目的です。

ホワイトボックステストはなぜ必要なのか

潜在的な問題を発見するためには、なぜホワイトボックステストのような網羅的なテストが必要なのでしょうか。主な理由として挙げられるのは、先述したとおり潜在的な問題を検出するためです。

開発者の解釈に誤解があった場合、それに自身で気づくことは困難です。複数人でチェックを行えば気づける可能性は高まりますが、それでも見落としてしまう恐れがあります。網羅的にテストを実行すれば、コーディング時には気づけないレベルの問題も発見できる可能性が高まります。

特にプログラムの修正を行った場合には、以前は問題がなかった部分に悪影響が起き、意図せぬ不具合を新たに生むことがあります。ホワイトボックステストはこのような不具合の発見にも有効です。膨大なテストケースを網羅するため手間がかかるという難点はありますが、テスト自動化を行えばその手間を削減することも可能です。

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

ホワイトボックステストのやり方は複数あり、代表的なものに「制御フローテスト」や「データフローテスト」があります。また効率的にテストを進めるため、「境界値分析」や「同値分割法」などの手法を用いてテストケースを考えることもあります。

ここでは4つの代表的な手法について、実際にどのようにテストを行うのかを詳しくご説明します。

①制御フローテスト

制御フローテストは、行われた処理に対してプログラムがどう動くかをフローチャートで示し、意図どおりの動作が行われているかを確かめていく手法です。

考え得るすべてのパターンをテストするのが理想的ですが、テストケースが膨大な数になるため、まずは以下のような網羅基準を設けます。

命令網羅(ステートメントカバレッジ):すべての命令(処理)を1回以上通す。最も粒度が粗い。
分岐網羅(ブランチカバレッジ):すべての条件分岐を1回以上実行する。
条件網羅(デシジョンカバレッジ):条件分岐のすべての組み合わせを1回以上実行する。最も粒度が細かい。

設定した基準に応じてテストケースを作成し、どれくらいのパターンを網羅できたかの指標となる「カバレッジ(網羅率)」を計測します。テスト対象の重要度や複雑度に合った基準を設定した上で、カバレッジが100%になるようテストを実施します。

②データフローテスト

制御フローテストではプログラムの処理の流れを確かめるのに対し、扱うデータの流れに注目するのがデータフローテストです。ある処理を実行した結果、どのような値が返ってくるかをテストし、入力されたデータが順番どおりに正しく処理されているか確かめます。

プログラムは通常、データの入れ物となる「変数」を、「定義→使用→消滅」するという流れで処理を行います。データフローテストでは、まずデータの流れを図に起こし、テスト後に未定義・未使用になっている部分がないかを確認します。コーディングのミスによって変数に不正な値が入力されると、必要な処理が行われなかったり、無駄な処理が行われたりすることがあります。例えば「定義」された変数が「使用」されず、不要になる前に「消滅」しているといった処理があれば、不具合があると判断されます。

③同値分割法

同値分割法は、同じ結果が得られる値同士を集めてグループ化し、各グループの代表的な値(代表値)を用いてテストを行うことで、テストを効率化する手法です。まずは仕様書を基に、「代表値でテストした結果が、同じグループのすべての値にも当てはまる」という状態になるように、入力値をグループ分けします。このグループを「同値クラス」といいます。

入力値によって正否が決まるシステムの場合、正しい値を集めたグループを「有効同値クラス」、エラーになる値を集めたクラスを「無効同値クラス」と呼びます。例えば「6~10文字でパスワードを設定する」という状況なら、入力字数が6~10のグループが有効同値クラス、そのほかが無効同値クラスとなります。

同値分割法では、1グループにつき最低1回はテストが実施されるようにテスト計画を立てます。テストケースを少なく抑えながら広い範囲を網羅することができるため、効率よく不具合を見つけられる点がメリットです。

④境界値分析

境界値分析は、境界付近を重点的にテストする必要があるケースに有効な手法です。同値分割法と同様にデータをいくつかの「同値クラス」に分けた後、グループ同士の境目にあたる値(境界値)を使ってテストを実行します。

例えば前述のパスワード字数の例のように、「未満」なのか「以下」なのかといった違いによって処理に影響が出る場合は、境界付近を重点的にテストしなければなりません。ソースコードでは5文字以下を「<=5」、5文字未満を「<5」というようにわずかな記号の違いで表すことから、境界付近は誤解が起きやすく、ミスが集中するといわれているためです。

境界値分析の場合、有効同値クラスでは各グループの最小値と最大値を、無効同値クラスでは有効同値クラスとの境にあたる値をテストするのが一般的です。有効同値クラスのテストは1グループにつき2回となるため、テスト数は同値分割法よりも多くなります。

ホワイトボックステストを行う際の注意点は?

ホワイトボックステストは、あくまでプログラムの内部構造に注目したテストです。そのため、ホワイトボックステストだけでは不十分な点や実施時に気をつけなければならない点も存在します。

実際のテストに取り入れる際は、以下のような注意点を意識して計画を立てることが重要です。

インターフェース設計にテスト難易度が左右される

優秀な開発者ほど無駄のないシンプルなプログラムを書き、キャリアが浅い開発者はプログラムを複雑化する傾向にあります。ホワイトボックステストは基本的にモジュール(部品)単位のテストに用いられるものなので、特にモジュール同士をつなぐインターフェース設計の部分にあらがあると、テストケースは膨大な数になり実行難易度が高くなります。

テストケースの数が増えることで工数がかさみ、時間やコスト面での負担が大きくなるほか、難易度によってはテスト自体が行えなくなる恐れもあります。効率的かつ確実にテストを実行できるようにするため、開発担当者やテスト担当者には一定のスキルが求められます。

書かれていないことには気づけない

ホワイトボックステストでは、書かれているプログラムを基にテスト計画を立て、設計したとおりにシステムが動作するかを確認します。そのため、そもそもプログラムに書かれていない内容については検証が行われません。

仕様書の記載誤りやプログラミング時の抜け漏れがないか、仕様書には組み込まれていないが実装を検討すべき機能はないか、といった点をチェックするには、別のテストを組み合わせることでカバーしていく必要があります。

そのほかのテストとの違いを比較

システム開発の現場では、「〇〇テスト」という名称をよく耳にします。これらは厳密には、テストの大枠の種類やより具体的な手法、テストを行う範囲や工程などを意味する言葉が混在しています。

ここでは、ホワイトボックステストとよく比較される手法である「ブラックボックステスト」「グレーボックステスト」の特徴や、テストの対象範囲に関わる「単体テスト」「結合テスト」の概要についてご紹介します。

システムテスト(総合テスト)とは? 検証内容、種類、手順、技法を紹介

https://www.skygroup.jp/software/quality/article/03/

「ブラックボックステスト」との違い

ホワイトボックステストとは対照的に、プログラムの内部については考えず、入力内容と出力された結果のみをチェックするのが「ブラックボックステスト」です。テスト対象の中身を見えないものとして扱うことから、この名前がつけられています。

ホワイトボックステストがモジュール単位の確認に用いられるのに対し、ブラックボックステストはユーザーや発注者による最終チェックの段階で用いられることが多いテストです。ユーザーの要求を満たせるか、使用上の不便さはないか、使いやすいデザインになっているかなど、表に見えている範囲を確認する「ユーザー視点のテスト」です。

「グレーボックステスト」との違い

ホワイトボックステストとブラックボックステストにはそれぞれメリット・デメリットがあり、両方を組み合わせたテストが必要になるケースがほとんどです。そこで、両方の利点を生かせる中間の方法として実施されているのが「グレーボックステスト」です。

この方法では、内部構造を理解している人物が、内部で何が起きているかを考えながら、ブラックボックステストの手順でシステムのチェックを行います。プログラムの構造を把握していることで、テストケースの作成も適切かつスムーズに行えます。

「単体テスト」との関係性

システムやソフトウェアは、多数のモジュールをつなぎ合わせて作られています。すべてを統合した状態ではなく、各モジュール単位での個別テストを行う工程のことを、「単体テスト」といいます。ホワイトボックステストは、この「単体テスト」に用いられるテスト方法の一つです。単体テストに、ブラックボックステストを用いるケースもあります。

各モジュールに問題があると、つなぎ合わせてもシステムとして成立しなくなってしまうため、単体テストで細かな問題点を検出することはとても重要です。

「結合テスト」との関係性

単体テストがモジュール単位のテストであるのに対し、モジュール同士をつなぎ合わせた状態のものに対して行うテストが「結合テスト」です。単体テストと同様に工程を指す言葉であり、テストの手法であるホワイトボックステストとはくくりが異なります。

結合テストでは、モジュール同士を結合しても連携が正しく行われ、システムが問題なく動作するかを確認します。モジュール間の結合だけでなく、外部のシステムに接続した際の連携についてテストすることもあります。手法としてはブラックボックステストや、モジュールや機器の接続を確認するインターフェーステスト、実際の利用の流れを想定して行うシナリオテスト、システムの処理能力をチェックする負荷テストなどが用いられます。

まとめ

ホワイトボックステストは、主に単体テストにおいて、各モジュールの内部構造をチェックするために行われるテストです。開発したシステムやソフトウェアの品質をしっかりと確かめるためには、そのほかのテストとも組み合わせながら、目的に合った検証を行う必要があります。

Sky株式会社では、ソフトウェアの評価 / 検証業務の委託に対応しており、これまでに培ってきた経験を生かして効果的なテストを進めることが可能です。テストのやり方や種類の選択についてお困りの際は、ぜひご相談ください。

著者 Sky株式会社

Sky株式会社は、家電のシステム開発を手掛けたのをきっかけに、デジタル複合機やカーエレクトロニクス、モバイル、情報家電、さらに自社商品として教育分野における学習活動ソフトウェアや、公共・民間向けクライアント運用管理ソフトウェアなど、幅広い分野でのシステム開発を展開しております。

お問い合わせ

ソフトウェア開発・評価/検証(ソフトウェアテスト)に関するご依頼・ご質問は、下記フォームよりお問い合わせください。弊社製品・サービスに関するお問い合わせは、各商品Webサイトより受けつけております。

パートナー企業募集

Sky株式会社では長期的なお付き合いができ、共に発展・成長に向けて努力し合えるパートナー企業様を募集しております。パートナー企業募集に関するご依頼・ご質問は、下記フォームよりお問い合わせください。

ページのトップへ