基本情報でわかる ホワイトボックステスト


2021-03-10 更新

error

この記事は基本情報技術者試験の旧制度( 2022 年以前)の記事ですが、試験対策ではなく、技術用語を理解する上では問題ないと考えています。
試験対策としてお読みになる場合は、現在の試験制度では出題されない午後問題を一部題材にしているので、ご注意ください。

この連載では、基本情報技術者試験によく出題されるテクノロジー関連の用語を、午前問題と午後問題のセットを使って解説します。

午前問題で用語の意味や概念を知り、午後問題で技術の活用方法を知ってください。それによって、単なる丸暗記では得られない明確さで、用語を理解できるようになります。

今回のテーマは、 ホワイトボックステストの「命令網羅」と「分岐網羅」 です。

ホワイトボックステストとは? 命令網羅とは? 分岐網羅とは?

システム全体は、いくつかの要素に分けて開発されます。個々の要素をテストするときには、内部構造に着目したホワイトボックステストを行い、システム全体をテストするときには、外部仕様に着目したブラックボックステストを行います。

  • ホワイトボックステストは、内部が見えるテストという意味
  • ブラックボックステストは、内部が見えないテストという意味

いずれの場合も、テストを行うときには、テストの目的に合ったテストデータを使うことが重要です。

 

この記事のテーマは、ホワイトボックステストです。

ホワイトボックステストでは、プログラムの設計図であるフローチャートを網羅するテストデータを使います。その際の考え方として、 命令網羅分岐網羅 があります。

命令網羅
すべての命令を網羅するテストデータを使います。わかりやすく言うと、フローチャートの中にある図形(処理を表す四角形や、条件を表すひし形など)を網羅する
分岐網羅
すべての処理の流れを網羅するテストデータを使います。わかりやすく言うと、フローチャートの中にある線(処理の流れを表す線)を網羅する

シンプルなフローチャートを例にして、命令網羅と分岐網羅の違いを示しましょう。以下のフローチャートでは、 a > 0 という条件が Yes なら a の値を表示します。

テスト対象のフローチャート

命令網羅では、a > 0 という条件が Yes になるテストデータだけを使います。 たとえば、 a に 1 を設定します。それによって、フローチャートの中にあるひし形と四角形の図形を網羅できるからです。

命令網羅 ( a に 1 を設定)

分岐網羅では、a > 0 という条件が Yes になるテストデータと、 No になるテストデータを使います。 たとえば、 a に 1 および -1 を設定します。それによって、フローチャートの中にある処理の流れの線を網羅できるからです。

多くの場合に、命令網羅より分岐網羅の方が、より詳細なテストになるので、より多くのテストデータを使います。

分岐網羅 ( a に 1 を設定)

分岐網羅 ( a に -1 を設定)

命令網羅に関する午前問題

それでは、命令網羅と分岐網羅に関する午前問題を見てみましょう。以下は、命令網羅に関する午前問題です。

問 49 平成 28 年度 春期 午前

流れ図で表される部分を命令網羅によってテストするとき,テストケースは少なくとも幾つ用意する必要があるか。


ア 2  イ 3  ウ 4  エ 5

ここでは、命令網羅なので、フローチャートの中にある図形を網羅します。

問題に示されたフローチャートには、 a = 0 という条件(ひし形)と、 b = 0 という条件(ひし形)があり、それぞれに応じた処理(四角形)があります。テストデータとして、たとえば、 a に 0 、 b に 0 を設定すれば、以下の図形を網羅できます。ここで、網羅できてないのは、処理(四角形)が 2 つです。

a に 0 、 b に 0 を設定して網羅できる図形

もうひとつ別のテストデータとして、たとえば、 a に 1 、 b に 1 を設定すれば、以下の図形を網羅できます。

a に 1 、 b に 1 を設定して網羅できる図形

これで、すべての図形を網羅できたので、テストケース(テストデータの種類)は、 2 であり、選択肢アが正解です。

解答

分岐網羅に関する午前問題

以下は、 分岐網羅に関する午前問題です。

問 49 平成 29 年度 春期 午前

流れ図において,判定条件網羅(分岐網羅)を満たす最小のテストケース数は幾つか。


ア 1  イ 2  ウ 3  エ 4

ここでは、分岐網羅なので、フローチャートの中にある線を網羅します。

問題に示されたフローチャートには、

X > 1 という条件(ひし形)と、
A = 2 or B = 0 という条件(ひし形)があり、
それぞれが真のときだけ処理(四角形)

があります。

テストデータとして、たとえば、 X に 2 、 A に 2 、 B に 0 を設定すれば、以下のようにすべての図形を網羅でき、命令網羅になります。ただし、この問題は、分岐網羅のテストケース数を求めるものなので、まだ網羅できていない 2 か所の線を網羅しなければなりません。

X に 2 、 A に 2 、 B に 0 を設定して網羅できる線

もうひとつ別のテストデータとして、たとえば、 X に 0 、 A に 1 、 B に 1 を設定すれば、以下の線を網羅できます。これで、すべての線を網羅できたので、テストケース数は、 2 であり、選択肢イが正解です。

X に 0 、 A に 1 、 B に 1 を設定して網羅できる線

解答

命令網羅と分岐網羅に関する午後問題

今度は、命令網羅と分岐網羅に関する午後問題を見てみましょう。以下に問題(問題の一部を抜粋したもの)を示します。すぐ後で、内容を説明しますので、ざっと目を通しておいてください。

問 5 平成 25 年度 秋期 午後(一部抜粋)

 ソフトウェアのテスト設計に関する次の記述を読んで,設問 1 ~ 3 に答えよ。

 システムインテグレータの N 社は,開発したプログラムに対するバグの摘出漏れの削減を目的として,テストの方法を見直している。

〔 N 社のテスト方法に関する説明〕
 N 社では主にホワイトボックス法の一つである制御フローテストで,開発したプログラムのテストを実施している。

 制御フローテストは,プログラムを構成する最小単位である命令,経路,判定条件に着目し,テスト計画時に定めたカバレッジ基準を満たすテストケース,テストデータを作成して,開発したプログラムの動作を確認するテスト方法である。

 カバレッジ基準としては,テストにおいて全ての命令文を1回は実行する命令網羅,全ての分岐について分岐後の全ての経路を1回は実行する判定条件網羅 (以下,分岐網羅という) などがある。

 N 社は,カバレッジ基準として分岐網羅を採用している。

〔 N 社が採用している分岐網羅の判定条件に関する説明〕
 分岐の判定条件には,一つの条件だけを評価する単独条件と,二つ以上の単独条件を and 又は or で組み合わせて評価する複数条件がある。単独条件と複数条件の例を次に示す。

( a > b ) and ( a < c )
 単独条件      単独条件
        複数条件
 ここで,プログラムの実行時に,複数条件については短絡評価を行うものとする。短絡評価とは,複数条件を構成する単独条件を左から右へ向かって順に評価し,複数条件の結果が確定したら,残りの単独条件を評価しない方法である。例えば,二つの単独条件を and で組み合わせた複数条件の場合,一つ目の単独条件を評価した結果が偽ならば,複数条件は二つ目の単独条件に関係なく必ず偽になるので,二つ目の単独条件を評価しない。

設問 1

 N 社が採用している分岐網羅の判定条件に関する次の記述中のに入れる正しい答えを,解答群の中から選べ。

図 1 はテスト対象のプログラムの例,表 1 はこのプログラムのテストケースの例である。 N 社が採用している分岐網羅の判定条件に従って,このテストケースを用いて,図 1 のプログラムをテストしたとき,テストケース (1) ではa結果となり,テストケース (2) ではb結果となる。

○プログラム (整数型 : x, 整数型 : a, 整数型 : b, 整数型 : c, 整数型 : d)
■ x > 10
| • func1()
| ▲ (a < 10) or (b < 20)
| | • func2()
| +---
| | • func3()
| ▼
| ▲ (c > 10) and (d > 10)
| | • func4()
| | • exit     /* 繰り返しを抜ける */
| +---
| | • func5()
| ▼
| • func6()
■
図 1 テスト対象のプログラムの例
表 1 テストケースの例
テストデータ
変数 x a b c d
テストケース(1) 11 9 19 10 10
テストケース(2) 11 10 20 11 11

a, bに関する解答群

ア b < 20 が評価されない
イ b < 20 と c > 10 が評価されない
ウ b < 20 と d > 10 が評価されない
エ c > 10 が評価されない
オ c > 10 と d > 10 が評価されない
カ d > 10 が評価されない
キ 全ての単独条件が評価される

問題の内容を説明しましょう。

説明文の中にある「カバレッジ」とは、「カバー( cover )する」つまり「網羅する」ということです。カバレッジの基準として、命令網羅と分岐網羅(判定条件網羅)があることを示してから、ここでは分岐網羅を採用するとしています。さらに、分岐の条件が「条件 A and 条件 B 」や「条件 C or 条件 D 」のように、複数の条件を and や or で組合せたものである場合には、「短絡評価」を行うとしています。

この問題のテーマは、「命令網羅や分岐網羅の違いがわかるか」ではなく、「短絡評価の意味がわかるか」です。さすが午後問題だけあって、午前問題より深い内容になっています。

 

短絡評価とは、

複数の条件を左から右に向かって順番に評価し、途中で結果が確定した場合には、残りの条件を評価しない

ということです。これを英語でショートカット( shortcut = 近道)と呼ぶのですが、「近道評価」では威厳がないので、「短絡評価」と訳したのでしょう。「評価」とは、条件が真か偽かをチェックすることです。

 

短絡評価では、たとえば、

「条件 A and 条件 B 」
条件 A が偽なら、その時点で「条件 A and 条件 B 」が偽であることが確定するので、条件 B をチェックしません
「条件 C or 条件 D 」
条件 C が真なら、その時点で「条件 C or 条件 D 」が真であることが確定するので、条件 D をチェックしません

残りの条件をチェックしないので、結果を得るために近道ができたことになるのです。

 

それでは、設問 1 の空欄 a と空欄 b に答えを入れてみましょう(設問 2 と設問 3 は省略します)。

まず、空欄 a です。

テストケース (1) の

x = 11, a = 9, b = 19, c = 10, d = 10

というテストデータを使うと、以下の網掛けした条件で結果が確定するので、 b < 20 と d > 10 が評価されません。これが、短絡評価です。したがって、選択肢ウが正解です。

テストケース(1)「 x = 11, a = 9, b = 19, c = 10, d = 10 」の場合
○プログラム (整数型 : x, 整数型 : a, 整数型 : b, 整数型 : c, 整数型 : d)
■ x > 10
| • func1() 
| ▲ (a < 10) or (b < 20)
| | • func2()
| +---
| | • func3()
| ▼         
| ▲ (c > 10) and (d > 10)
| | • func4()
| | • exit     /* 繰り返しを抜ける */
| +---
| | • func5()
| ▼
| • func6()
■

次に、空欄bです。

テストケース (2) の

x = 11, a = 10, b = 20, c = 11, d = 11

というテストデータを使うと、以下の網掛けした条件で結果が確定します。このように、短絡評価であっても、すべての条件が評価される場合があります。したがって、選択肢キが正解です。

テストケース(2)「 x = 11, a = 10, b = 20, c = 11, d = 11 」の場合
○プログラム (整数型 : x, 整数型 : a, 整数型 : b, 整数型 : c, 整数型 : d)
■ x > 10
| • func1()          
| ▲ (a < 10) or (b < 20)
| | • func2()
| +---
| | • func3()
| ▼                  
| ▲ (c > 10) and (d > 10)
| | • func4()
| | • exit     /* 繰り返しを抜ける */
| +---
| | • func5()
| ▼
| • func6()
■

 

解答設問 1 a – ウ, b – キ

いかがでしたか?

午前問題と午後問題のセットで、命令網羅と分岐網羅を深く理解できたでしょう。

この連載では、今後も、多くの受験者が苦手としている用語を取り上げて行きます。それでは、またお会いしましょう!

label 関連タグ
科目A試験は、
免除できます。
独習ゼミで科目A試験を1年間免除して、科目B試験だけに集中しましょう。
免除試験を受けた 74.9% の方が、
科目A免除資格を得ています。
科目A免除試験 最大 2 回の
受験チャンス !
info_outline
科目A免除試験 最大 2 回の
受験チャンス !
詳しく見てみるplay_circle_filled
label これまでの『基本情報でわかるテクノロジー』の連載一覧 label 著者