この記事ではテスト手法についてIT初心者にも分かりやすく解説します。
テスト手法
- 静的テストは実際にプログラムを動かすことなく目視でソースを確認して不具合がないか確認する方法、動的テストは実際にプログラムを動かして不具合がないか確認する方法。
- ホワイトボックステストはプログラムの内部構造に着目してテストする方法、ブラックボックステストはプログラムの内部構造を意識せずに仕様通りかどうかテストする方法。
- トップダウンテストは上位モジュールから下に結合しながらテストする方法、ボトムアップテストは下位モジュールから上に結合しながらテストする方法。
基本情報ではテスト手法に関する問題が出題されます。是非最後までご覧ください。
基本情報で出題されるテスト手法
テストはシステムの開発が完了した後に行われます。テストの目的は開発したプログラムが想定通りに動くのかを確かめることで、プログラム内に存在する欠陥をバグと言います。
テストでは段階的に確認する範囲を大きくします。プログラムの機能毎に行う単体テストから始め、プログラム同士を組み合わせて確認する結合テストを行い、最後にシステム全体で要件を満たしているか確認するシステムテストを行います。
静的テストと動的テスト
静的テストと動的テストは単体テストで行われる検証です。
静的テストは実際にプログラムを実行することなく、目視でソースを読んで誤りがないかを確認します。
一方、動的テストは実際にプログラムを実行することで、処理が正常か確認します。
ホワイトボックステストとブラックボックステスト
ホワイトボックステストとブラックボックステストは単体テストで行われる検証方法です。
ホワイトボックステストはコーディング等、プログラムの内部構造に焦点を当てて行うテストでプログラム内の処理が正常に動作するかを確認します。
一方、ブラックボックステストはプログラムの内部構造は意識せず、仕様通り動くかどうかを確認します。
ホワイトボックステストとブラックボックステストでは着目している箇所が異なるので、テストケースの作り方も当然異なってきます。
ホワイトボックステストの網羅性
ホワイトボックステストのテストケースの作成方法には4つの種類があります。
命令網羅 | 全ての命令を1回以上確認する |
---|---|
判定条件網羅 (分岐網羅) |
分岐が発生する処理において、結果が真の場合と偽の場合の両方をテストする |
条件網羅 | 分岐が発生する処理において、各条件式が真の場合と偽の場合の両方をテストする |
複数条件網羅 | 分岐が発生する処理において、起こり得る全てのパターンをテストする |
それぞれのテストケースについて以下のプログラムを例に考えてみます。
命令網羅
命令網羅では全ての命令を1回以上実行すれば良いので、分岐1と処理1を通る①、②、③のいずれかを実行すればOKです。
判定条件網羅
分岐が発生する条件で結果が真の場合と偽の場合を確認すれば良いので、①、②、③のいずれかと④を実行すればOKです。
条件網羅
分岐が発生する条件で各条件式が真の場合と偽の場合を確認すれば良いので、①と④、または、②と③を実行すればOKです。ここで言う各条件式とは「A>5」と「B=3」のことです。
②と③では、②で「A>5」が偽、「B=3」が真を確認出来て、③で「A>5」が真、「B=3」が偽を確認出来るので、「A>5」の真と偽、「B=3」の真と偽の両方を確認出来ます。
複数条件網羅
複数条件網羅では起こり得る全てのパターンを確認するので、①~④の全てを実行します。
ブラックボックステストの限界値分析と同値分割
ブラックボックステストのテストケース作成方法に限界値分析と同値分割があります。
例えば、20歳以上60歳以下の場合は支払いが発生するというプログラムを考えます。
限界値分析
限界値分析では判定が変わる境目を検証するようなテストケースを作成します。今回の例では、19歳、20歳、60歳、61歳のテストケースを作ります。
同値分割
同値分割ではそれぞれの判定の中からランダムに1つずつテストケースを作成します。今回の例では、10歳(20歳未満)、30歳(20歳以上60歳以下)、80歳(60歳超え)のテストケースを作ります。
トップダウンテストとボトムアップテスト
トップダウンテストとボトムアップテストは結合テストで行われる検証です。
結合テストではモジュール同士が正常に連携出来ているかどうかを確認します。モジュール同士の関係性には、データを渡す側⇔データを貰う側、データを処理する側⇔処理したデータを集約する側、のように上下関係があります。
トップダウンテストでは上位のモジュールから下に下にモジュールを結合しながらテストをしていきます。
逆にボトムアップテストでは下位のモジュールから上へ上へモジュールを結合しながらテストをしていきます。
モジュール
モジュールとはシステムを構築するための部品のことです。色々調べてみましたが定義が曖昧な言葉なので部品なんだな~くらいで良いと思います。
部品という意味で言えばプログラムもモジュールの一つと言えますね。
スタブとドライブ
スタブ
上位のモジュールは完成しているが、下位のモジュールが完成していない。しかし、上位のモジュールが他のモジュールと連携出来るのか検証したい、という場合があります。この時、下位のモジュールの代わりに使うのがスタブです。
スタブは基本何の処理も行わないか、上位モジュールに返す値のうち1つだけを設定しておいて、正常にデータのやり取りが出来るかを確かめる程度の簡単な処理を仕込むこともあります。
ドライブ
スタブとは逆に、下位のモジュールは完成しているが上位のモジュールは未完成の場合に、下位のモジュールが他のモジュールと連携出来るかを確かめるために上位のモジュールの代わりに使うのがドライブです。
ドライブは上位のモジュールの代わりにテスト用に簡単な処理を実行して下位のモジュールにデータを渡せるようになっています。
基本情報技術者試験での出題例
令和6年度問11
基本情報技術者
科目A 令和6年度問11
階層構造のモジュール群から成るソフトウェアの結合テストを,上位のモジュールから行う。この場合に使用する,下位のモジュールの代替となるテスト間のモジュールはどれか。
ア エミュレータ
ウ スタブ
イ シミュレータ
エ ドライバ
正解は”ウ”
スタブは上位モジュールをテストするために、下位モジュールの代わりに使うモジュールです。
サンプル問題問40
基本情報技術者
科目A サンプル問題問40
モジュールの内部構造を考慮することなく,仕様書どおりに機能するかどうかをテストする手法はどれか。
ア トップダウンテスト
ウ ボトムアップテスト
イ ブラックボックステスト
エ ホワイトボックステスト
正解は”イ”
ブラックボックステストでは、内部構造を考慮することなく、思った通りの動きになるかを確かめます。よって、答えはイです。
令和元年度秋期問47
基本情報技術者
午前試験 令和元年度秋期問47
エラー埋込法において,埋め込まれたエラー数をS,埋め込まれたエラーのうち発見されたエラー数をm,埋め込まれたエラーを含まないテスト開始前の潜在エラー数をT,発見された総エラー数をnとしたとき,S,T,m,nの関係を表す式はどれか。
ア \(\frac{m}{S}\)=\(\frac{n-m}{T}\)
ウ \(\frac{m}{S}\)=\(\frac{n}{T}\)
イ \(\frac{m}{S}\)=\(\frac{T}{n-m}\)
エ \(\frac{m}{S}\)=\(\frac{T}{n}\)
正解は”ア”
問題文から下のことが分かります。
埋め込まれたエラー:S
埋め込まれたエラーのうち発見されたエラー:m
元からあるエラー:T
元からあるエラーのうち発見されたエラー:(n-m)
Sとmの割合とTと(n-m)の割合は同じはずなので、答えはアになります。
令和元年度秋期問48
基本情報技術者
午前試験 令和元年度秋期問48
テストで使用されるドライバ又はスタブの説明のうち,適切なものはどれか。
ア スタブは,テスト対象のモジュールからの戻り値の表示・印刷を行う。
イ スタブは,テスト対象モジュールを呼び出すモジュールである。
ウ ドライブは,テスト対象モジュールから呼び出されるモジュールである。
エ ドライブは,引数を渡してテスト対象モジュールを呼び出す。
正解は”エ”
スタブは下位モジュールの代わりに、ドライブは上位モジュールの代わりに使います。
ア スタブはテスト対象から引数を貰い、戻り値を渡す側です。
イ スタブはテスト対象モジュールから呼び出される側です。
ウ ドライブはテスト対象モジュールを呼び出す側です。
エ 正解です。
令和元年度秋期問49
基本情報技術者
午前試験 令和元年度秋期問49
単一の入り口をもち,入力項目を用いた複数の判断を含むプログラムのテストケースを設計する。命令網羅と判定条件網羅の関係のうち,適切なものはどれか。
ア 判定条件網羅を満足しても命令網羅を満足しない場合がある。
イ 判定条件網羅を満足するならば,命令網羅も満足する。
ウ 命令網羅を満足しなくても,判定条件網羅を満足する場合がある。
エ 命令網羅を満足するならば,判定条件網羅も満足する。
正解は”イ”
判定条件網羅では全てのルートを通るので、同時に全ての命令も実行することになります。よって、答えはイです。
平成31年度春期問47、平成29年度秋期問49
基本情報技術者
午前試験 平成31年度春期問47、平成29年度秋期問49
ブラックボックステストに関する記述として,最も適切なものはどれか。
ア テストデータの作成基準として,プログラムの命令や分岐に対する網羅率を使用する。
イ 被テストプログラムに冗長なコードがあっても検出できない。
ウ プログラムの内部構造に着目し,必要な部分が実行されたかどうかを検証する。
エ 分岐命令やモジュールの数が増えると,テストデータが急増する。
正解は”イ”
ブラックボックステストではあくまでも入力した値に対する結果しか見ないので、冗長なコードがあるかどうかは確認できません。
平成31年度春期問48
基本情報技術者
午前試験 平成31年度春期問48
ソフトウェアのテストツールの説明のうち,静的テストを支援する静的解析ツールのものはどれか。
ア 指定された条件のテストデータや,プログラムの入力ファイルを自動的に生成する。
イ テストの実行結果を基に,命令の網羅率や分岐の網羅率を自動的に計測し,分析する。
ウ プログラム中に文法上の誤りや論理的な誤りなどがあるかどうかを,ソースコードを分析して調べる。
エ モジュールの呼出し回数や実行時間,実行文の実行回数などの,プログラム実行時の動作特性に関するデータを計測する。
正解は”ウ”
静的テストでは実際にプログラムを実行しません。なので、テストデータを作成する等、プログラムを動かさないと意味を成さないツールは静的テストを支援するツールにはなり得ません。
平成30年度春期問48
基本情報技術者
午前試験 平成30年度春期問48
ブラックボックステストのテストデータの作成方法のうち,最も適切なものはどれか。
ア 稼働中のシステムから実データを無作為に抽出し,テストデータを作成する。
イ 機能仕様から同値クラスや限界値を識別し,テストデータを作成する。
ウ 業務で発生するデータの発生頻度を分析し,テストデータを作成する。
エ プログラムの流れ図を基に,分岐条件に基づいたテストデータを作成する。
正解は”イ”
ブラックボックステストでは同値分割や限界値分析を行います。
平成30年度春期問49
基本情報技術者
午前試験 平成30年度春期問49
プログラムの流れ図で示される部分に関するテストデータを,判定条件網羅(decision coverage)によって設定した。このテストデータを複数条件網羅(multiple condition coverage)による設定に変更したとき,加えるべきテストデータのうち,適切なものはどれか。ここで,( )で囲んだ部分は,一組みのテストデータを表すものとする。
・判定条件網羅によるテストデータ
(A=4,B=1),(A=5,B=0)
ア (A=3,B=0),(A=7,B=2)
イ (A=3,B=2),(A=8,B=0)
ウ (A=4,B=0),(A=8,B=0)
エ (A=7,B=0),(A=8,B=2)
正解は”エ”
今、
・(A=4,B=1) ⇒ (偽、偽)
・(A=5,B=0) ⇒ (偽、真)
のテストデータが存在するので、(真、真)と(真、偽)のテストデータを作成すればよいことが分かります。それを満たすのはエだけなので、答えはエです。
平成29年度春期問49
基本情報技術者
午前試験 平成29年度春期問49
流れ図において,判定条件網羅(分岐網羅)を満たす最少のテストケース数は幾つか。
ア 1
ウ 3
イ 2
エ 4
正解は”イ”
「X>1」の分岐で真と偽を、「A=2 or B=0」の分岐で真と偽をそれぞれ確認出来ればOKなので、例えば、{X,A,B}={2,2,1}と{0,0,1}のデータを作成すれば条件を満たせそうです。よって答えはイです。
基本情報に関する他の記事
ハードウェア | ソフトウェア | システム構成 |
ネットワーク | データベース | 開発手法 | 情報セキュリティ |
開発手法に関する記事
プログラムについての記事
【基本情報】午前試験のアルゴリズムの苦手意識を克服する!
【基本情報】関数?手続?再帰的?プログラムの性質を解説!
データ構造についての記事
【基本情報】スタックとキューってなに?どこで使われている?
【基本情報】2分探索木を完全に理解する!
【基本情報】ハッシュ法を完全に理解する!過去問と一緒に解説!
開発の流れについての記事
【基本情報】アジャイルを完全に理解する!過去問と一緒に解説!
【基本情報】UMLやDFDの全てをまとめて解説!
【基本情報】モジュール結合度について分かりやすく解説!
【基本情報】オブジェクト指向で出題されることをまとめた!
【基本情報】基本情報で出題されるテスト手法の全てを解説