IPA テスト・レビュー — 頻出論点と過去問

頻出論点

1. この分野は何か

誤りは、プログラムを動かす前に設計書やコードを読んで見つける方法と、実際に動かして不具合を検出しテストの進み具合や残存エラー数を評価する方法の両方で探します。プログラムの内部構造に着目するか入出力の仕様に着目するかという観点の違い、誰が主導して成果物を確認するかという役割の違い、そしてどの開発工程の要求や設計に対して適合を確かめるテストかという対応関係が判断の軸になります。

2. 実際の出題のされ方

どの工程で何を確かめるかという基本の区別では、ブラックボックステストの説明を選ぶ問題と、単体・結合・システムの各テストで確かめる内容を組み合わせる問題が出ています。これらはITパスポートから問われる論点です。

流れ図をたどって網羅率や最少のテストケース数を求める問題は、応用情報技術者の午前と高度試験の午前Iの両方で繰り返し出題されています。このほか、エラー埋込み法で残存エラー数を推定する計算、累積誤り検出数のグラフからバグの収束を判定する曲線の選択、デザインレビューの目的、作成者を含む複数人で振る舞いを机上でたどる手法の名前、異常を起こしそうなデータを入力して脆弱性を探すテスト手法の名前を問う問題もあります。

システムアーキテクトと情報処理安全確保支援士の午前IIでは、検証技法の中身まで踏み込んだ問題に進みます。制御フローグラフから構造の複雑さを数える計算、少しずつ変えたプログラムでテストセットの検出力を測る手順、実行中に成り立つべき条件をプログラムに埋め込む手法が出ています。動かしながら次のテストを決めていく手法、形式手法を使う検証のやり方、ソースプログラムを実行せずに調べるツールも問われています。

下の層が未完成の段階で行える結合テストの方式や、JIS X 0160・共通フレームが定める検証・妥当性確認・受入れテストなどの目的を選ぶ問題も、高度試験の午前IIのいくつかの区分で出題されています。

3. 学習のポイント

テストケースの設計と網羅基準では、ホワイトボックステストとブラックボックステストの区分を明確にします。内部の論理構造に着目するホワイトボックステストの網羅基準には、すべての命令を少なくとも1回実行する命令網羅(C0C_0)と、すべての条件判定で真(Yes)と偽(No)の両方の分岐を少なくとも1回通る判定条件網羅(分岐網羅、C1C_1)があります。流れ図の途中で変数の値が書き換わる場合は、前の処理の代入結果を反映して次の条件判定をトレースする必要があります。また、制御フローグラフから独立した経路の数を示すサイクロマティック複雑度は、グラフの辺の数から節点の数を引き、2を足した値です。一方、外部仕様の入出力に着目するブラックボックステストには、入力領域を有効・無効なクラスに分けて代表値を選ぶ同値分割や、範囲の境界およびその直前・直後の値を検査する限界値分析(境界値分析)があります。

動的・静的な各種の検証技法は、何をどう確かめるかで整理します。

  • 探索的テスト: テストケースを前もって全部は作らず、動かして分かったことを手がかりに、その場で次のテストを考えて進める方法です。
  • ミューテーションテスト: 元のプログラムに1か所ずつ軽微な変更(誤り)を加えたプログラム群(ミュータント)を作り、既存のテストセットを実行して元のプログラムと異なる結果が出た割合から、テストセット自体の不具合検出能力を評価します。
  • アサーションチェック: プログラムの途中に、その時点で成り立つはずの条件を論理式で書き込んでおき、実行時に破れていないかを確かめる方法です。
  • 形式手法: 仕様を数学的に意味の定まった言葉で書き、満たすべき性質が仕様から導けるかを、証明や網羅的な検査で確かめる方法です。プログラムを実行せずにソースコードを分析してエラーの有無などを調べる静的解析ツールとあわせて押さえます。

テスト工程の統合方式とライフサイクル規格の用語は、対象範囲と目的で対比させます。モジュールの結合では、完成した上位モジュールから未完成の下位モジュールに代わるダミーであるスタブを使って進めるトップダウンテストと、下位モジュールから上位の代わりとなるドライバを使って進めるボトムアップテストを区別します。また、ライフサイクル規格の検証(Verification)と妥当性確認(Validation)は、照らし合わせる相手で区別します。検証は決められた要件どおりに作られているかを、妥当性確認は実際に使う場面で利用者の目的に合っているかを確かめます。受入れテストは、発注者が受け入れてよいかを判断するために行うテストです。

レビュー技法とテスト進捗・残存エラーの評価も重要です。レビューは、誰が進めるかで分けます。ウォークスルーは成果物の作成者自身が進め、インスペクションは作成者とは別の進行役(モデレータ)が決まった手順で進めます。テスト終盤の収束判定に使うゴンペルツ曲線は、テストを進めた量と見つかった誤りの累計との関係を表す信頼度成長モデルの一つで、累計が頭打ちに近づいたかどうかで収束を判断します。エラー埋込み法では、当初埋め込んだエラー総数 SS、発見された埋込みエラー数 ss、発見された真のエラー数 nn から、真のエラー総数 NN を sS=nN\frac{s}{S} = \frac{n}{N} で推定します。

4. 間違えやすいところ

網羅率の問題では、命令網羅と分岐網羅の混同に注意します。条件判定のNo側に命令(処理の箱)がない流れ図では、すべての命令を通過して C0C_0 が100%になっていても、通っていないNoの分岐があれば C1C_1 は100%になりません。

判定条件網羅のテストケースを選ぶ問題では、2つのケースがどちらも同じ側の分岐を通る組合せが誤答肢にありました。これでは、もう一方の分岐が一度も通られずに残ります。

最小テストケース数を求める問題では、1回の実行で直列に並んだ複数の分岐の処理を同時に通過できるにもかかわらず、すべての経路の組合せを掛け合わせた経路網羅の数が誤答肢にありました。

エラー埋込み法では、比例式で求めた真のエラーの総数を、残存エラー数としてそのまま答えた値が誤答肢にありました。残っている数は、総数からテスト中にすでに見つかった真のエラーの数を引いて求めます。

ゴンペルツ曲線を選ぶ問題では、最初から急に増えて次第に緩やかになる上に凸の曲線が誤答肢にありました。テスト初期は環境準備などで検出ペースが遅く立ち上がりが緩やかになるため、最初から急増する形にはなりません。

レビューや検証技法、規格の用語では、よく似た手法や別工程の活動との入れ替えに気をつけます。

  • ウォークスルーの説明を選ぶ問題では、モデレータが会議を主催するというインスペクションの説明が誤答肢にありました。
  • デザインレビューの目的を選ぶ問題では、品質保証部門が出荷の可否を決めるという判定の役割が誤答肢にありました。
  • 探索的テストの例を選ぶ問題では、経験から不備を推測してはいるものの、テストケースを前もって作ってから実行した例が誤答肢にありました。
  • アサーションチェックを選ぶ問題では、実行の途中でメモリの内容を書き出すスナップショットダンプが誤答肢にありました。
  • JIS X 0160の妥当性確認プロセスの目的を問う問題では、品質のデータを集めて分析し報告するという品質保証プロセスの説明が誤答肢にありました。
  • 共通フレームのシステム適格性確認テストの評価対象を問う問題では、システム方式設計が誤答肢にあり、こちらはシステム結合テストで確かめる内容です。

テスト・レビューの理解度チェック

テスト・レビューの過去問一覧

システム開発技術のほかの論点

要件定義・製品品質40問 モデリング記法(UML・DFD・状態遷移)45問 ソフトウェア設計・保守・再利用55問