どうもこんにちは!
サバ缶(@tech_begin)です。
開発現場でたびたび耳にする「ホワイトボックステスト」。
基本・応用情報技術者試験でも、頻出問題として扱われている専門用語です。
すぐに意味を答えられない人が多いこの「ホワイトボックステスト」について、図解を交えて徹底解説していきます!
イチから丁寧に進めていくので、長文になります。少しずつ学んでいきましょう💪
ホワイトボックステストとは
「ホワイトボックス」とは、『中身が明らかになっている箱のこと』を指します。
つまり「ホワイトボックステスト」とは、『内部の処理や構造が明らかになっているコードをテストする』という意味を持っています。
ちなみに、反対の「ブラックボックステスト」は「内部処理が分からない状態でテストを行う」ことを指します。
つまり、ブラックボックステストは、ユーザ視点に立った場面でのテストを指すケースが多いです。
ホワイトボックステストを実施する目的
ホワイトボックステストは、現場によっては「単体テスト」と呼ばれることもあります。
システムが仕様書通りに実装されているかどうかを確認するための、とても重要なテストです。
プログラムに意図していない挙動が含まれていないか、動作は正常か、エラー時は意図している動作になるのか……など、細かい観点で網羅的にテストを行います。
ブラックボックステストでは見つけることができない『潜在的な不具合』を発見することが目的です。
<単体テスト、ブラックボックステストの記事は作成中……✍️>
ホワイトボックステストの手法
ホワイトボックステストに分類されるテスト手法には、以下の4つがあります。
- 制御フローテスト
- データフローテスト
- 同値分割法
- 境界値分析
ちなみに「同値分割法」と「境界値分析」はブラックボックステストでも使われる手法です。
今回、ホワイトボックステストでも使用されることがあるため併せてご紹介します。
制御フローテスト
「制御フロー」とは、関数やメソッドのロジック(処理)のことを指します。
このテストを行うのが「制御フローテスト」です。
テスト対象は、個々の関数やクラスが保持するメソッドです。
MDNより引用いたします。
制御フロー(制御の流れ)は、コンピューターがスクリプト内の文を実行する順序です。
https://developer.mozilla.org/ja/docs/Glossary/Control_flow
つまり『プログラムがどのような処理を実行するのか』そのものを指す言葉です。
プログラムは3つの基礎要素で構成されています。
- 順次
- 分岐
- 反復
詳しくは以下の記事で紹介しています(別サイトですが、運営者は私です)。
👉プログラムの基礎はたったの3つ! 順次・分岐・反復の3つを知ろう。
この3つの基礎要素を図で示したもので表します(フローチャート)。
データフローテスト
プログラムの中で、データは状態を変化させています。
- 定義
- 参照
- 消滅
この3つに着目し、コーディングミスによって招くエラーを見つける際に活用されるテスト技法です。
テスト対象は、変数です。
同値分割法
少ないテスト回数で実施できることが特徴です。
その反面、想定していない不具合を見逃す恐れもあります。
「簡単な動作確認」程度であればよく使われる技法ですね。
境界値分析
名称通り、境界値を精密に確認するテスト技法です。
例の同値分割法では、3点だけ確認していましたが、境界値分析では「閾(しきい)値」前後で想定している動作になるかを細かく確認していきます。
ホワイトボックステストの網羅性(カバレッジ)
ホワイトボックステストを実施するにあたり、網羅性が重要視されます。
したがって、全ての条件・分岐を網羅し尽くしたテストケースを実施することが理想です。
しかし、全てを網羅するとテストケースが膨大になってしまうため現実的ではありません。
実際の現場では、網羅性の度合いを限定し実施していることが多いです。
※生命に関わるようなシステムを作っている場合や、お客様が品質が高いものを要求される場合は、網羅性も最大限に高めて実施することがあります。
しかし、その分「工数(作業時間のこと)」も膨れ上がるため、お客様の予算や想いを鑑みて折衷案を出すことが多いです。……余談でした。
ホワイトボックステストの網羅性は、以下に分類されます。
- 判定条件網羅(分岐網羅)
- 条件網羅
- 判定条件・条件網羅
- 複合条件網羅
以下のプログラムを例として、それぞれの網羅性を解説していきます!
if (A or B) {
処理1
} else {
処理2
}
判定条件網羅(分岐網羅)
全ての分岐を網羅する
条件網羅
それぞれの条件がTrue/Falseとなるパターンを網羅する
判定条件・条件網羅
先述の2つ、『判定条件網羅(分岐網羅)』と『条件網羅』を組み合わせたパターンです。
つまり、全ての分岐、それぞれの条件がTrue/Falseとなるパターンを網羅するケースです。
これで完璧かと思いきや、実はまだ網羅しきれていません。
複合条件網羅
全ての条件と分岐の組み合わせを網羅します。
この複合条件網羅でテストするのが最も望ましいですが、先述の通り、工数が多くかかってしまうため、ある程度限度を設けてテストケースの作成・実施を行います。
まとめ
ホワイトボックステストとは、内部処理が明らかになっているプログラムを条件などのパターンを網羅的に確認するためのテストのことです。
- ホワイトボックステストは、仕様通りの実装をしているか確認し、潜在的な不具合を見つけるために実施する
- ホワイトボックステストの網羅性には種類があり、網羅性が高くなるほど工数が多くかかる。
- 品質を上げようとすると、テストケースが増える(工数も増)
- 品質を下げれば、テストケースも減る(工数も減)
基本情報、応用情報技術者試験の問題
ホワイトボックステストの説明として,適切なものはどれか。
- ア:外部仕様に基づいてテストデータを作成する。
- イ:同値分割の技法を使用してテストデータを作成する。
- ウ:内部構造に基づいてテストデータを作成する。
- エ:入力と出力の関係からテストデータを作成する。
正解:ウ
ホワイトボックステストのテストケースを設計する際に使用するものはどれか。
- ア:原因ー結果グラフ
- イ:限界値分析
- ウ:条件網羅
- エ:同値分割
正解:ウ
参考ページ
ホワイトボックステストとは?ブラックボックステストとの違いやその手順、よく使われる手法を解説
【徹底解説】カバレッジ(網羅率)とは?ソフトウェア開発における意味と3つの基準について解説