資格道場 › レッスン一覧 › システム開発技術
システム開発技術・10/12・9分

テスト工程の流れ(単体・結合・システム・運用)

ゴール

単体→結合→システム→運用の順番と、それぞれ何を確かめるテストかを区別でき、結合テストで使うスタブとドライバを取り違えずに選べるようになる。回帰テスト・ストレステストの目的も一言で答えられるようになる。

テスト工程の問題は「このテストは何を確かめるか」「この方式で必要な代用品はどちらか」の区別だけで解けるので、確実に取れる得点源になる。特にスタブとドライバは本試験・免除試験を合わせて30回観測されている最頻出テーマ。

このレッスンで稽古する(用語チェック・過去問)

結論:テストは小さい単位から大きい単位へ積み上げる

テストは 単体 → 結合 → システム → 運用 の順に、小さい部品から大きい全体へ積み上げていきます。いきなり全体を動かして不具合が出ても原因の場所が分からないので、まず部品ごとに確かめます。

家づくりでいうと、柱や窓を1本ずつ検品する(単体)→ 組み合わせて継ぎ目を確かめる(結合)→ 完成した家全体の性能を確かめる(システム)→ 施主が実際に住んでみて暮らせるか確かめる(運用)、という流れです。

flowchart LR
  A["単体テスト<br>モジュール内部"] --> B["結合テスト<br>モジュール間のつなぎ目"]
  B --> C["システムテスト<br>全体の機能・性能"]
  C --> D["運用テスト<br>利用者の業務で使えるか"]

4つのテスト工程の比較(ここが一番問われる)

選択肢の文章が「どの工程の説明か」を当てる問題がほとんどです。何を見るかのキーワードで判別します。

工程 何を確かめるか 主に誰が 選択肢に出るキーワード
単体テスト 1つのモジュール(プログラムの部品)の内部ロジック 開発者 「モジュール内部のロジック」「全命令・全分岐を通るデータ」
結合テスト モジュール間・サブシステム間のインタフェース(受け渡しの約束事) 開発者 「インタフェースが整合」「ユニット間のエラー」
システムテスト システム全体が要件どおりか(機能・性能・負荷) 開発側 「機能,性能,負荷などを確認」「仕様書どおりに機能」
運用テスト 利用者の視点で、業務手順どおりに使えるか 利用部門+運用部門 「利用者に提供する視点」「決められた業務手順どおり」

システム適格性確認テストは、共通フレーム(開発工程の標準的な呼び名)でのシステムテストの正式名です。要件を満たすかを見るので、テストデータは実際の業務データや例外として扱うデータを用意します。全分岐・全命令を通すデータは単体テスト(前のレッスンのホワイトボックステスト)の話です。

結合テストの進め方:トップダウンとボトムアップ

結合テストには、モジュールの階層(呼ぶ側が上、呼ばれる側が下)のどちらから組むかで2つの方式があります。どちらも「まだ完成していない相手」の代用品が必要になるのがポイントです。

  • トップダウンテスト:上位から下位へ結合する。下位が未完成なので、下位の代わりにスタブを使う
  • ボトムアップテスト:下位から上位へ結合する。上位が未完成なので、上位の代わりにドライバを使う

参考までに、全モジュールを単体で終えてから一気に全部つなぐ方式は「ビッグバンテスト」と呼ばれ、ボトムアップの説明として出される誤答の定番です。

トップダウンテストボトムアップテスト上位から下位へ結合下位から上位へ結合上位モジュール完成済み呼ぶスタブ下位の代役ドライバ上位の代役呼ぶ下位モジュール完成済み下が未完成→スタブ上が未完成→ドライバ
トップダウンは下位が未完成なのでスタブを、ボトムアップは上位が未完成なのでドライバを代役に置く。

スタブとドライバ(最頻出・必ず覚える)

スタブ=呼ばれる側の代役、ドライバ=呼ぶ側の代役です。API 開発でいうと、スタブは「まだ無いバックエンドの代わりに決まった値を返すモックサーバ」、ドライバは「APIを叩いてくれるテスト用クライアント」に近いイメージです。

スタブ ドライバ
何の代わり 下位モジュール(呼ばれる側) 上位モジュール(呼ぶ側)
やること テスト対象から呼び出され、仮の結果を返す 引数を渡してテスト対象を呼び出す
使う方式 トップダウンテスト ボトムアップテスト

覚え方:「トップダウンはスタブ(ト・ス)」、残りがボトムアップとドライバ。上から作ると下が足りない→下の代役=スタブ、と理屈でも確認できます。

選択肢に出るエミュレータ(別の機械の動作をまねる仕組み)、シミュレータ(現象を模擬する仕組み)、トレーサ(実行の流れを記録する道具)は、結合テストで未完成モジュールの代わりをするものではありません。

ドライバ呼ぶ側の代役(上位)テスト対象結合テストする部品スタブ呼ばれる側の代役(下位)呼び出す(引数を渡す)結果を返す呼び出す仮の結果を返すドライバ≒APIを叩くテスト用クライアントスタブ≒決まった値を返すモックサーバ
ドライバがテスト対象を呼び出し、テスト対象がスタブを呼び出す。スタブは仮の結果を返す。

回帰テスト(リグレッションテスト)

回帰テストは、プログラムを修正・変更したときに、変更していないはずの部分に悪影響が出ていないかを確かめるテストです。日本語では退行テストとも呼ばれ、試験ではこの3つの名前すべてで出ます。

水道管の1か所を直したら、別の蛇口から水が出なくなっていないか家中を確かめる、というイメージです。開発の工程(単体〜運用)とは別軸で、**保守(リリース後の修正)**のときにも行うのが特徴です。

「新規モジュールの誤りを検出」「毎回テストケースを作り直す」は誤り。むしろ前回と同じテストケースを再実行して結果を比べるのが基本です。

プログラムの1か所を修正AB 修正CD前回と同じテストケースを再実行前回と同じ前回と同じ結果が変化前回と同じ変更していない部分への悪影響を発見保守(リリース後の修正)でも行う
1か所を修正したら、前回と同じテストケースを再実行し、変更していない部分の結果が変わっていないか比べる。

ストレステストと、テスト環境の限界

ストレステストは、要求されている処理能力の限界(高負荷)状態でシステムがどう動くかを確かめるテストで、システムテストの一部です。使いやすさの評価(ユーザビリティ)、他機との性能比較(ベンチマーク)、修正の影響確認(回帰テスト)と取り違えさせる選択肢が並びます。

また、本社内の LAN(建物内のネットワーク)だけでシステムテストをすると、事業所までの通信回線を通した応答時間は確かめられません。応答時間は回線を含む実環境に左右されるからです。一方、プログラムの処理時間・サーバの処理能力・過負荷時の動作は本社内でも検証できます。

本社(LAN)サーバ端末通信回線事業所本社内で確かめられるプログラムの処理時間サーバの処理能力過負荷時の動作本社内では確かめられない事業所までの回線を通した応答時間
本社内のLANだけでは、事業所までの通信回線を通した応答時間は確かめられない。

運用テストで「利用者」が見るもの

運用テストは利用部門(実際に業務で使う人)と情報システム部門(運用する人)が合同で行うことがあり、誰が何を優先して確認するかが問われます。

立場 優先して確認すること
利用者(利用部門) システムが決められた業務手順どおりに稼働すること
運用者(情報システム部門) オンライン処理・バッチ処理が運用手順どおりに稼働すること

「全プログラムが仕様どおりに機能する」「性能要件を満たす」はシステムテストで確認済みのはずの内容なので、運用テストで利用者が優先するものではありません。「業務手順」と「運用手順」の1語の違いでひっかけてきます。

要点(試験直前に読む)

  • テストの順番は 単体 → 結合 → システム → 運用(小さい単位から大きい単位へ)。
  • 単体=モジュール内部、結合=モジュール間のインタフェース、システム=全体の機能・性能・負荷、運用=利用者視点で業務手順どおりか。
  • スタブ=下位(呼ばれる側)の代役でトップダウンに使う。ドライバ=上位(呼ぶ側)の代役で引数を渡して呼び出し、ボトムアップに使う。
  • 回帰テスト=リグレッションテスト=退行テスト。修正が他の部分に悪影響を与えていないかの確認。
  • ストレステストは処理能力の限界(高負荷)での動作確認。本社LANだけのテストでは回線を含む応答時間は確かめられない。

ひっかけ

  • スタブとドライバの説明を入れ替えた選択肢が必ず出る。「呼び出される」がスタブ、「引数を渡して呼び出す」がドライバと動詞で見分ける。
  • 「ボトムアップテストの特徴」でスタブを選ばせる。ボトムアップは上が無いのでドライバ。トップダウン=スタブ(ト・ス)で覚える。
  • エミュレータ・シミュレータ・トレーサはテスト用の代替モジュールではない。結合テストの代役を問われたらスタブかドライバの2択に絞る。
  • 運用テストで利用者が優先するのは「業務手順」どおりか。「運用手順」は情報システム部門側、「仕様どおり」「性能要件」はシステムテストの内容。
  • 回帰テストを「新規作成したモジュールの誤り検出」「毎回テストケースを作り直す」と説明する選択肢は誤り。修正の影響確認が目的で、同じテストを再実行するのが基本。

用語(13)

単体テスト たんたいてすと
1つのモジュールについて、内部のロジックが仕様どおり動くかを確かめるテスト。
⚠ 結合テストと混同しやすい。「モジュール内部」「全分岐・全命令」なら単体、「モジュール間」なら結合。
結合テスト けつごうてすと
モジュール同士やサブシステム同士をつないで、インタフェース(データの受け渡し)が正しいかを確かめるテスト。
⚠ システムテストと混同しやすい。「インタフェース」が出たら結合、「機能・性能・負荷」が出たらシステム。
システムテスト しすてむてすと
完成したシステム全体が、機能・性能・負荷などの要件を満たすかを確かめるテスト。
⚠ 運用テストと混同しやすい。仕様・要件の視点ならシステム、利用者の業務手順の視点なら運用。
システム適格性確認テスト しすてむてきかくせいかくにんてすと
共通フレームでのシステムテストの呼び名で、システムが要件を満たすかを実際の業務データや例外データで確かめるテスト。
⚠ 全分岐・全命令を通すデータは単体テスト用、ユニット間のエラーを見るデータは結合テスト用。
運用テスト うんようてすと
本稼働の前に、利用者に提供する視点で、業務手順どおりにシステムが使えるかを確かめるテスト。
⚠ 利用者が見るのは「業務手順」、運用者が見るのは「運用手順」。仕様どおりかの確認はシステムテスト。
インタフェース interface
モジュール同士がデータや呼出しをやり取りするときの約束事(引数・戻り値の形など)。
トップダウンテスト とっぷだうんてすと
上位のモジュールから下位へ順に結合していく結合テストの方式で、未完成の下位の代わりにスタブを使う。
⚠ ボトムアップテストは逆に下位から結合し、ドライバを使う。
ボトムアップテスト ぼとむあっぷてすと
下位のモジュールから上位へ順に結合していく結合テストの方式で、未完成の上位の代わりにドライバを使う。
⚠ 「個々をテストしてから一気に全部結合」はビッグバンテストで別物。スタブが必要なのはトップダウン。
スタブ stub
テスト対象から呼び出される下位モジュールの代わりに、仮の結果を返すテスト用モジュール。
⚠ ドライバは逆に呼ぶ側(上位)の代役。「呼び出される」ならスタブ、「呼び出す」ならドライバ。
ドライバ driver
上位モジュールの代わりに、引数を渡してテスト対象モジュールを呼び出すテスト用モジュール。
⚠ スタブは呼ばれる側(下位)の代役。ボトムアップで必要なのがドライバ。
回帰テスト(リグレッションテスト・退行テスト) かいきてすと(regression test)
プログラムを修正・変更したことで、変更していない部分に想定外の悪影響が出ていないかを確かめるテスト。
⚠ 新規モジュールの誤り検出は単体テスト。3つの呼び名がすべて同じものだと覚える。
ストレステスト stress test
要求される処理能力の限界、つまり高負荷の状態でシステムがどう動くかを確かめるテスト。
⚠ 使いやすさの評価(ユーザビリティ評価)、他機との性能比較(ベンチマーク)、修正の影響確認(回帰テスト)と区別する。
エミュレータ emulator
別のコンピュータや装置の動作をソフトウェアなどでまねて再現する仕組み。
⚠ 結合テストで未完成モジュールの代わりをするスタブ・ドライバとは別物で、誤答の選択肢として出る。

このレッスンの過去問

このレッスンで稽古する