今回解いてみたIT試験の過去問は、IPAの平成18年秋ソフトウェア開発技術者(現・応用情報技術者)午後1問2からの出題で情報システム開発分野です。今回もプログラムのテストの話で、フローグラフを用いてプログラムのホワイトボックステスト(プログラムの内部処理が正しく行われるかチェック)を行う手法がテーマになってます。
平成18年春ソフトウェア開発技術者午後1問2(情報システム開発)
(引用ここから。解答を入れるための空欄の形式の変更、機種依存文字である丸数字を<1>のように表記するなどの一部改変があります。)
問2 制御パステストに関する次の記述を読んで,設問1~3に答えよ。
https://www.jitec.ipa.go.jp/1_04hanni_sukiru/mondai_kaitou_2006h18_1/
ソフトウェア開発会社のA 社は,ホワイトボックステストのーつである制御パステストでプログラムを検証することにした。
制御パステストには,すべての命令を最低1 回実行するテストである命令網羅(C0網羅),すべての条件分岐の真と偽の両方を最低1回テストする分岐網羅(C1網羅),分岐条件の真と偽のすべての組合せを少なくとも1 回テストする条件網羅(C2 網羅) などがある。
C2網羅は,プログラムの開始から終了までの経路に注目したテストである。経路は,プログラムをフローグラフに置き換えることで,フローグラフから求めることができる。
フローグラフは,プログラムを連続した逐次命令群と,while やif などの分岐命令に分け,それぞれをノードとし,処理の)1鳳こノードとノードを有向線分(エッジ)で結んだものである。
分岐命令には,AND, OR などを用いないーつだけの条件で,真又は偽に分岐する単独分岐と,単独分岐をAND, OR などで組み合わせた複合分岐がある。複合分岐は単独分岐に分解してからフローグラフに置き換える。
図1のプログラムをフローグラフで表すと,図2になる。フローグラフのノード番号<1>~<10>は,図1 のプログラム中の<1>~<10>に対応する。<1>,<3>,<4>,<6>,<7>は単独 分岐を,<2>,<5>,<8>,<9>,<10>は連続する逐次命令群を表すノードである。ノード<10>は,出口を表すただーつの特別なノードである。 C2 網羅のーつの経路とは,フローグラフの開始から,同一のエッジを複数回通過しないで出口に達するノードの列である。例えば,<1>,<2>,<3>,<5>,<10>,<1>,<11>は経路 として扱うが,<1>,<2>,<3>,<5>,<10>,<1>,<2>,…のように,<1>から<2>へのエッジを 複数回通過するものは経路として扱わない。
フローグラフから得られるすべての経路の数を,サイクロマチック数という。サイクロマチック数Sは,フローグラフのエッジ数Eとノード数Nから,次のように求めることができる。
S=E-N+2
2006h18h_sw_pm1_qs.pdf
設問1 図2のフローグラフ中の<ア>~<オ>に入れ;適切なノード番号を答えよ。
https://www.jitec.ipa.go.jp/1_04hanni_sukiru/mondai_kaitou_2006h18_1/
設問2 図2のフローグラフのサイクロマチック数を答えよ。
設問3 図1のプログラムに対して,”<1>が真,<3>が偽,<4>が偽,<6>が偽,<7>が真”となるようなテストケースを実行するために必要な,変数a, b 及びcの設定値を, 考えられる最も大きな値で答えよ。 ここで,変数a, b 及びcは,16 ビットで表された2 の補数の整数型変数である。これらの変数を,<2>で変更することはない。
2006h18h_sw_pm1_qs.pdf
(引用ここまで)
解答と解説については、「2」のページに記載しています。