HOME»基本情報技術者平成25年秋期問題»午後問5
基本情報技術者過去問題 平成25年秋期 午後問5
⇄問題文と設問を画面2分割で開く⇱問題PDF問5 ソフトウェア設計
ソフトウェアのテスト設計に関する次の記述を読んで,設問1~3に答えよ。
システムインテグレータのN社は,開発したプログラムに対するバグの摘出漏れの削減を目的として,テストの方法を見直している。
〔N社のテスト方法に関する説明〕
N社では主にホワイトボックス法の一つである制御フローテストで,開発したプログラムのテストを実施している。
制御フローテストは,プログラムを構成する最小単位である命令,経路,判定条件に着目し,テスト計画時に定めたカバレッジ基準を満たすテストケース,テストデータを作成して,開発したプログラムの動作を確認するテスト方法である。
カバレッジ基準としては,テストにおいて全ての命令文を1回は実行する命令網羅,全ての分岐について分岐後の全ての経路を1回は実行する判定条件網羅(以下,分岐網羅という)などがある。
N社は,カバレッジ基準として分岐網羅を採用している。
〔N社が採用している分岐網羅の判定条件に関する説明〕
分岐の判定条件には,一つの条件だけを評価する単独条件と,二つ以上の単独条件を and 又は or で組み合わせて評価する複数条件がある。単独条件と複数条件の例を次に示す。
ここで,プログラムの実行時に,複数条件については短絡評価を行うものとする。短絡評価とは,複数条件を構成する単独条件を左から右へ向かって順に評価し,複数条件の結果が確定したら,残りの単独条件を評価しない方法である。例えば,二つの単独条件を and で組み合わせた複数条件の場合,一つ目の単独条件を評価した結果が偽ならば,複数条件は二つ目の単独条件に関係なく必ず偽になるので,二つ目の単独条件を評価しない。
システムインテグレータのN社は,開発したプログラムに対するバグの摘出漏れの削減を目的として,テストの方法を見直している。
〔N社のテスト方法に関する説明〕
N社では主にホワイトボックス法の一つである制御フローテストで,開発したプログラムのテストを実施している。
制御フローテストは,プログラムを構成する最小単位である命令,経路,判定条件に着目し,テスト計画時に定めたカバレッジ基準を満たすテストケース,テストデータを作成して,開発したプログラムの動作を確認するテスト方法である。
カバレッジ基準としては,テストにおいて全ての命令文を1回は実行する命令網羅,全ての分岐について分岐後の全ての経路を1回は実行する判定条件網羅(以下,分岐網羅という)などがある。
N社は,カバレッジ基準として分岐網羅を採用している。
〔N社が採用している分岐網羅の判定条件に関する説明〕
分岐の判定条件には,一つの条件だけを評価する単独条件と,二つ以上の単独条件を and 又は or で組み合わせて評価する複数条件がある。単独条件と複数条件の例を次に示す。

設問1
N社が採用している分岐網羅の判定条件に関する次の記述中の に入れる正しい答えを,解答群の中から選べ。
図1はテスト対象のプログラムの例,表1はこのプログラムのテストケースの例である。N社が採用している分岐網羅の判定条件に従って,このテストケースを用いて,図1のプログラムをテストしたとき,テストケース①ではa結果となり,テストケース②では,b結果となる。

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


a,b に関する解答群
- b<20 が評価されない
- b<20 と c>10 が評価されない
- b<20 と d>10 が評価されない
- c>10 が評価されない
- c>10 と d>10 が評価されない
- d>10 が評価されない
- 全ての単独条件が評価される
解答選択欄
- a:
- b:
解答
- a=ウ
- b=キ
解説
〔aについて〕
テストケース①での実行動作をトレースすると以下のようになります。
最初の「a<10 or b<20」は or 演算子で結ばれているので「a<10」の結果が真であれば、残りの条件の結果に関わらず条件式全体の結果が"真"となるため「b<20」が評価されません。また「c>10 and d>10」は and 演算子で結ばれているので「c>10」の結果が偽であれば、残りの条件の結果に関わらず条件式全体の結果が"偽"となるため「d>10」が評価されません。
∴a=ウ:b<20 と d>10 が評価されない
〔bについて〕
aの場合と同じく、テストケース②での実行動作をトレースすると以下のようになります。
∴a=キ:全ての単独条件が評価される
テストケース①での実行動作をトレースすると以下のようになります。

- X>10が評価される。X=11なので真となり、func1が実行される。
- a<10が評価される。a=9なのでこの時点で条件式全体は"真"と判定され、func2が実行される(b<20は評価されない)。
- c>10が評価される。c=10なのでこの時点で条件式全体は"偽"と判定され、func5が実行される(d>10は評価されない)。
- func6が実行される。
- プログラムの先頭に戻り、以後はループを抜けるまで処理を繰り返す。
最初の「a<10 or b<20」は or 演算子で結ばれているので「a<10」の結果が真であれば、残りの条件の結果に関わらず条件式全体の結果が"真"となるため「b<20」が評価されません。また「c>10 and d>10」は and 演算子で結ばれているので「c>10」の結果が偽であれば、残りの条件の結果に関わらず条件式全体の結果が"偽"となるため「d>10」が評価されません。
∴a=ウ:b<20 と d>10 が評価されない

aの場合と同じく、テストケース②での実行動作をトレースすると以下のようになります。

- X>10が評価される。X=11なので真となり、func1が実行される。
- a<10が評価される。a=10なので"偽"と判定される。
- 続けてb<20が評価される。b=20なので"偽"となり、条件式全体が"偽"と判定されるためfunc3が実行される。
- c>10が評価される。c=11なので"真"と判定される。
- 続けてd>10が評価される。d=11なので"真"となり、条件式全体が"真"と判定されるためfunc4が実行される。
- exitにより繰返し処理を抜けプログラムが終了する。
∴a=キ:全ての単独条件が評価される

設問2
プログラムの制御構造は,制御フローグラフで記述することができる。制御フローグラフは,処理を逐次実行する命令,繰返し命令,分岐命令に分け,それぞれを処理ブロック(以下,ノードという)として処理の実行順に有向線分(以下,エッジという)で結んだグラフである。ここで,複数条件は,それぞれの単独条件に分解して制御フローグラフに置き換える。
図2は,図1のテスト対象のプログラムの例にノード番号①~⑪を付与したものであり,図3は,それに対応する制御フローグラフである。図3のノード番号は,図2中のノード番号に対応する。図3のノードSとノードEは,それぞれプログラムの入口と出口を表す特別なノードであり,テスト対象のプログラムの例には対応する処理はない。図3の制御フローグラフ中の に入れる適切なノード番号を,解答群の中から選べ。

図2は,図1のテスト対象のプログラムの例にノード番号①~⑪を付与したものであり,図3は,それに対応する制御フローグラフである。図3のノード番号は,図2中のノード番号に対応する。図3のノードSとノードEは,それぞれプログラムの入口と出口を表す特別なノードであり,テスト対象のプログラムの例には対応する処理はない。図3の制御フローグラフ中の に入れる適切なノード番号を,解答群の中から選べ。


c,d,e,f に関する解答群
- ③
- ④
- ⑤
- ⑥
- ⑧
- ⑩
- ⑪
解答選択欄
- c:
- d:
- e:
- f:
解答
- c=ア
- d=エ
- e=カ
- f=オ
解説
〔cについて〕
「②func1の実行」の後に続く処理なので、プログラムの順序から考えて③の「a<10の評価」が当てはまります。
∴c=ア:③
〔dについて〕
「③a<10の評価」が"真"の場合には「⑤func2」が実行され、"偽"では「④b<20の評価」の処理に移ります。cに続く2つの網かけのノードを比較すると、分岐処理になっている上のノードには"偽"の場合に実行する「④b<20の評価」、下のノードには真の場合に実行する「⑤func2」が当てはまることがわかります。
したがって、dには「③a<10」と「④b<20」の両方が"偽"だった場合のみ実行される「⑥func3」が当てはまります。
∴d=エ:⑥
〔e、fについて〕
「⑦c>10の評価」が"真"の場合には「⑧d>10の評価」が実行され、"偽"では「⑩func5」の処理に移ります。「⑦c>10の評価」に続くeとfのノードを比較すると、分岐処理になっている下のfには"真"の場合に実行する「⑧d>10の評価」、左のeのノードには"偽"の場合に実行する「⑩func5」が当てはまることがわかります。
また、eの後に網かけ部分の処理が実行されて①に戻っていることに着目しても、eにはexit処理の存在しない「⑩func5」が当てはまることがわかります。
∴e=カ:⑩,f=オ:⑧
以下は図3のグラフの完成形です。
「②func1の実行」の後に続く処理なので、プログラムの順序から考えて③の「a<10の評価」が当てはまります。
∴c=ア:③
〔dについて〕
「③a<10の評価」が"真"の場合には「⑤func2」が実行され、"偽"では「④b<20の評価」の処理に移ります。cに続く2つの網かけのノードを比較すると、分岐処理になっている上のノードには"偽"の場合に実行する「④b<20の評価」、下のノードには真の場合に実行する「⑤func2」が当てはまることがわかります。
したがって、dには「③a<10」と「④b<20」の両方が"偽"だった場合のみ実行される「⑥func3」が当てはまります。
∴d=エ:⑥

「⑦c>10の評価」が"真"の場合には「⑧d>10の評価」が実行され、"偽"では「⑩func5」の処理に移ります。「⑦c>10の評価」に続くeとfのノードを比較すると、分岐処理になっている下のfには"真"の場合に実行する「⑧d>10の評価」、左のeのノードには"偽"の場合に実行する「⑩func5」が当てはまることがわかります。
また、eの後に網かけ部分の処理が実行されて①に戻っていることに着目しても、eにはexit処理の存在しない「⑩func5」が当てはまることがわかります。
∴e=カ:⑩,f=オ:⑧
以下は図3のグラフの完成形です。

設問3
次の記述中の に入れる正しい答えを,解答群の中から選べ。
図1のプログラムのテストにおいて,N社が採用している分岐網羅の場合,最低限必要となるテストケースの数はgである。
これに対して,制御フローグラフから経路を抽出してテストケースを作成する方法がある。制御フロ―グラフの全てのエッジとノードを網羅する,最小の経路の数(S)は,次の式で求められる。
S=エッジ-ノード+2
抽出した経路に対応したS個のテストケースについてテストを行うことによって,分岐網羅以上の高いカバレッジを保証することができる。
図3の制御フローグラフから,Sを求めるとhとなる。N社は,バグの摘出漏れの削減を目的として,制御フローグラフに基づくテストケースでプログラムのテストをすることとした。
図1のプログラムのテストにおいて,N社が採用している分岐網羅の場合,最低限必要となるテストケースの数はgである。
これに対して,制御フローグラフから経路を抽出してテストケースを作成する方法がある。制御フロ―グラフの全てのエッジとノードを網羅する,最小の経路の数(S)は,次の式で求められる。
S=エッジ-ノード+2
抽出した経路に対応したS個のテストケースについてテストを行うことによって,分岐網羅以上の高いカバレッジを保証することができる。
図3の制御フローグラフから,Sを求めるとhとなる。N社は,バグの摘出漏れの削減を目的として,制御フローグラフに基づくテストケースでプログラムのテストをすることとした。
g,h に関する解答群
- 2
- 3
- 4
- 5
- 6
- 7
解答選択欄
- g:
- h:
解答
- g=イ
- h=オ
解説
〔gについて〕
分岐網羅のテストケースには「全ての分岐後の全ての経路を1回は実行する」ことが求められます。
設問のプログラムには3箇所の分岐があるので実行すべき経路は以下の6つです。
条件1が偽の場合にはプログラムが終了してしまうため条件2,3の部分は実行されません。このためテストケースは条件1が真の場合に条件2,3の真偽を組合わせた
〔hについて図3の制御グラフにはエッジ17本、ノード13個(SとEも含める)があります。これを設問の式に代入すると、
S=17-13+2
S=6
∴g=オ:6
分岐網羅のテストケースには「全ての分岐後の全ての経路を1回は実行する」ことが求められます。
設問のプログラムには3箇所の分岐があるので実行すべき経路は以下の6つです。

- 条件1:真,条件2:真,条件3:真
- 条件1:真,条件2:偽,条件3:偽
- 条件1:偽,条件2:-,条件3:-(条件2,3は真偽はどちらでもよい)

〔hについて図3の制御グラフにはエッジ17本、ノード13個(SとEも含める)があります。これを設問の式に代入すると、
S=17-13+2
S=6
∴g=オ:6