プログラムの状態遷移を用いたモデル検査。(平成20年春ソフトウェア開発技術者午後1問2)

 今回解いてみたIT試験の過去問は、情報システム開発分野になります。IPAの平成20年春ソフトウェア開発技術者(現・応用情報技術者)午後1の問2からの出題で、プログラムの状態遷移を用いたモデル検査がテーマになっています。

平成20年春ソフトウェア開発技術者午後1問2(情報システム開発)

平成20年春ソフトウェア開発技術者午後1問2(PDFファイル)

(引用ここから。解答を入れるための空欄の形式など一部改変があります。)

問2 モデル検査に関する次の記述を読んで,設問1-3 に答えよ。

 モデル検査とは,プログラムの論理的な振る舞いをプログラムの状態遷移として表現し,その状態遷移を解析することで不具合を見つけ出す検査手法である。
 プログラムの論理構造を状態遷移モデルに変換し,続いて不具合が存在しない条件を式で表し,この式を評価する。すなわち,状態遷移の組合せを総当たりで検証し,この式を満足しない遷移を探す。これには,状態遷移評価ツールを使用する。式を満 足しない遷移があれば,プログラムに不具合が存在する可能性があることになる。
 あるシステムで,システムテストを行っているときに,関数f (x)の実装に不具合が見つかった。見つかった不具合は,戻り値がエラーコードでも識別子でもなかったことである。この関数は,従来方式のテストに合格しているので,モデル検査で調べることにした。

〔関数f(x)の概要〕
 関数は,引数xに与えられるメモリ長に対して,それ以上の長さのメモリブロックを割り当てるもので,メモリブロックの割当てが行えたときには,その識別子を返し,割当てが行えなかったときには,エラーコードを返す。
 メモリブロックは,4 種類のメモリプール(以下,プールという)で管理される。各プールには,固定長のメモリブロックを用意している。関数f (x)は,このプールを,ブロック長の小さいものから順に調べて未使用ブロックを探す。

〔結合テストまでの検査〕
 このシステムでは,単体テストにおいては,プログラムの内部構造を解析したうえで行う[a]ボックステストを,結合テストでは,内部構造を調べない[b]ボックステストを行っている。[a]ボックステストは,すべての制知スを検証す静,又はすべての条件判定を網羅するテストが推奨されている。
しかし,実際には,これらの網羅テストはほとんど行われていない。特に問題となりそうな部分を重点的にテストするだけで,すべてのパスや条件判定の組合せをテストすることは,ほとんどない。

 関数f(x)に関して,結合テストで実施したテストケースは,通常の運用を想定して仕様書から作成した次の(1)~(3)である。関数f(x)の実装は,これらにすべて合格している。

(1) 一番大きなブロック長を超える要求を行って,エラーになること
(2) 各プールに未使用ブロックがある状態で,適切なメモリ長を指定することによって,それぞれのプールから割り当てられること
(3) 最小のブロック長のプールだけをすべて割当て済みとし,最小のブロック長以下のメモリ長を指定したときでも,ブロックを割り当てられること

〔モデル検査〕
 論理構造を調べるために,この関数のソースプログラムから,図1 に示した流れ図を自動作成する。次に,図1 の流れ図に沿って処理を分割し,それぞれの処理を行っている状態をP1~P6 と名付ける。さらに開始と終了を表す状態P0, PEを付加し, 図2 の状態遷移図を作る。 状態P1, P3, P4 からは,次に遷移可能な状態が複数ある。P4 では,プログラムで 使用しているカウンタの値によって遷移先の状態が決まるよう,カウンタの状態遷移図(図3)を追加する。

 次に,戻り値は,P0では未定義であり,P5 で識別子,P6 でエラーコードが設定されるので,戻り値の状態遷移図(図4)を追加する。 不具合を見つけ出すために,不具合が存在しない場合の条件を表す式として、”状態[c]において,戻り値が[d]又は戻り値が[e]である”(式1)を作成する。

 状態遷移評価ツールで調べるとP0→Pl→P2→P3→P4→P3→P4→P3→[f]→PEと遷移したときに,式1を満足しないので,不具合が存在する可能性があることになる。

〔モデル検査の特徴〕
 このように,モデル検査では,従来のテストのような[g]を必要とせず,状態遷移図の作成と不具合を見つけるための式の記述,つまりモデル化を行えばよい。 モデル化が適切であれば,従来のテストでは発見が困難であった,[h]や複雑な条件が重なって発生する不具合が存在する可能性を発見することができる。
 しかし,モデル化が不適切で,例えばモデル化したときに省略した部分に不具合があれば,その不具合は見つけることができない。また,状態遷移の数が多いと検査に膨大な時間を要することになる。

https://www.jitec.ipa.go.jp/1_04hanni_sukiru/mondai_kaitou_2008h20_2/2008h20a_sw_pm1_qs.pdf
モデル検査についてのフローチャートと状態遷移図。

設問1
関数f(x)の結合テストまでの検査について,(1)~(3)に答えよ。

(1) 結合テストで用いたテストケースは,最少何ケースか。
(2)本文中の[a],[b]に入れる適切な字句を,それぞれ5 字以 内で答えよ。
(3)一般に[a]ボックステストは,すべてのケースついて行われない場合が多い。すべてのテストケースのうち,実施が困難なものはどのようなテストケースか。25 字以内で答えよ。ただし,ハードウエアの故障や障害などによって発生する実行困難なものは除くものとする。

設間2
モデル検査について,(1),(2)に答えよ。
(1)本文中の[c]~[e]に入れる適切な状態名を,図1~4 中の字句を用いて答えよ。
(2)本文中の[f]に適切な状態遷移を追記し,式1を満足しない状態遷 移を完成させよ。

設間3
モデル検査の特徴について,[g], [h]に入れる適切な字句を解答群の中から選び,記号で答えよ。

解答群
ア アルゴリズムが単純なシステムの不具合
イ 状態遷移変換ツール
ウ テストデータ
エ 発生頻度の高い不具合
オ 発生頻度の低い不具合
カ ほかのスレッドと干渉しない単純なスレッドの不具合

https://www.jitec.ipa.go.jp/1_04hanni_sukiru/mondai_kaitou_2008h20_2/2008h20a_sw_pm1_qs.pdf

(引用ここまで)
 解答と解説については、「2」のページに記載しています。

にほんブログ村 ゲームブログへ

スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする