戦国IT - 情報処理技術者試験の過去問対策サイト
ブログお知らせお問い合わせ料金プラン

ITパスポート 2009年 春期 53


問題文

プログラムテストに関する記述として、適切なものはどれか。

選択肢

ソフトウェアの品質は、設計段階で向上させるよりもテスト段階で保証した方がよい。
テスト完了後のプログラムを修正した場合、修正部分を確認するテストデータを確認済みのテストデータに追加して再テストを行う方がよい。(正解)
テストの目的はプログラムが正常に稼働することの確認なので、プログラムにエラーを起こさせるテストデータは含めない方がよい。
プログラムの作成者が、テストケースを設計してテストをする方がよい。

🔒 解説は解答すると表示されます

プログラムテストに関する記述として、適切なものはどれか。【ITパスポート 解説】

正解の理由

選択肢の中で正しいのは、修正後の確認方法として「修正部分を確認するテストデータを確認済みのテストデータに追加して再テストを行う方がよい」という記述です。これは、修正箇所だけを確認する「リテスト(再テスト)」と、修正によって他の機能が壊れていないかを確認する「リグレッションテスト(回帰テスト)」の両方の考え方を取り入れた適切な運用を示しています。
テストは一度で終わるものではなく、プログラムの変更に応じて既存のテストに新しいケースを追加しておくことが品質維持に有効だからです。ここで正しい選択肢を として扱います。
(用語補足)
  • テストケース:入力と期待される出力・動作を組み合わせた検査手順。
  • リグレッションテスト(回帰テスト):修正の影響で既存機能が壊れていないか確認するテスト。

解法ステップ

  1. 設問の各選択肢を一文ごとに「テストの原則」に当てはめて読む。キーワード(設計段階/テスト段階、修正後の再テスト、エラーを起こさせるテスト、作成者によるテスト)を注目する。
  2. テストの基本原則を想起する:品質向上は予防(設計)→検出(テスト)の順が望ましいこと、修正後は再テストと回帰テストが必要なこと、ネガティブテスト(異常系)も重要なこと、第三者による評価の利点。
  3. 各選択肢を照らし合わせ、原則に合うものを選ぶ。上記の観点から、修正後は修正箇所を確認するテストデータを既存テストに追加して再テストする()が最も適切。

選択肢別の誤答解説

  • ア: 「品質は設計よりテストで保証した方がよい」
    誤り。品質は設計段階で問題を減らす(予防)ことが費用対効果が高く望ましいです。テストは残った欠陥を見つけるもので、設計を置き換えるものではありません(いわゆる「シフトレフト(左に寄せる)」の考え方)。
  • : 「修正後は修正部分を確認するテストデータを既存のテストに追加して再テスト」
    正しい。修正による不具合回避と、既存機能が影響を受けていないか確認するため、既存のテストスイートに新しいテストケースを加えて再実行するのが良い運用です。
  • ウ: 「エラーを起こさせるテストデータは含めない方がよい」
    誤り。異常系の入力で意図したエラー処理が行われるかを確かめる「ネガティブテスト」も重要です。正常系だけでは不十分で、現実の誤入力や境界値を想定したテストが品質向上に寄与します。
  • エ: 「作成者がテストケースを設計してテストする方がよい」
    誤り。作成者自身がテスト設計・実施を行うとバイアス(作成者バイアス)で見落としが生じやすいです。理想は独立したテスト担当者や別チームによる確認(第三者評価)です。ただし、作成者が単体テストを自動化しておくことは有用です。

よくある誤解

  1. 「テストで全部見つけられる」は間違い
    テストは「欠陥を見つける手段」であり、すべてを見つけることは難しい。設計やレビューで欠陥を減らすことが重要です。
  2. 「異常入力はテストしなくてよい」
    実際には多くのトラブルは想定外の入力や境界値で発生します。正常系だけでなく異常系(ネガティブテスト)を必ず含める必要があります。
  3. 「修正したらその部分だけ見ればよい」
    修正箇所が他の機能に影響を与えることがあるため、既存のテストも含めた回帰テストが必要です。

補足コラム

  • 自動化のすすめ
    テストを自動化しておくと、修正毎に手早く既存テストを全部回せます。特にユニットテスト(単体テスト:プログラムの小さな部品単位の検査)は自動化しやすく、継続的インテグレーション(CI:継続的に組み合わせて動作確認する仕組み)と組み合わせると効率的です。
  • テストの種類(簡単まとめ)
    • 単体テスト(ユニットテスト):小さな部品ごとに検証
    • 結合テスト:部品同士のつながりを検証
    • システムテスト:全体としての動作を検証
    • 受け入れテスト:ユーザや顧客の要件に合うか検証
    • 回帰テスト:修正が既存機能を壊していないか検証
  • 例:修正後にテストケースを追加する流れ(簡易)
    1. バグを再現する最小の入力(テストケース)を作る(リテスト用)。
    2. バグ修正を行う。
    3. そのテストをテストスイートに組み込み、自動化しておく(次回以降の回帰テストで自動的に検出)。
    4. 必要なら関係する他の機能にも追加のテストケースを作成する。
簡単な自動テスト例(Python、原理だけ示す)
# 例:割り算関数のテスト追加
def divide(a, b):
    return a / b

# 修正前に0除算エラーが見つかったとする
import unittest

class TestDivide(unittest.TestCase):
    def test_normal(self):
        self.assertEqual(divide(6, 2), 3)

    def test_zero_division(self):
        with self.assertRaises(ZeroDivisionError):
            divide(6, 0)

if __name__ == '__main__':
    unittest.main()
上の例では、0除算が起きるケース(ネガティブケース)をテストに追加しています。修正後、このテストを継続的に実行すれば同じ問題の再発を防げます。

FAQ

Q1: 「修正したら必ず全てのテストを実行するべきですか?」
A1: 可能であれば全テスト(回帰テスト)を実行するのが望ましいですが、時間やコストが制約ある場合は影響範囲が大きいテストを優先し、段階的に全体を回す運用が現実的です。自動化で負担を減らすのが有効です。
Q2: 「作成者が行う単体テストは不要ですか?」
A2: 単体テストは非常に重要で、作成者が自分のコードに対して自動化された単体テストを書くことは推奨されます。ただし、最終的な評価は独立したテスターが行うほうが良いです。
Q3: 「ネガティブテストって具体的に何をすれば良いですか?」
A3: 不正な入力、範囲外の値、異常系(ネットワーク切断、ファイル未存在など)、境界値(最大・最小+1)などを試します。想定される失敗ケースを洗い出してテストします。

関連キーワード: ソフトウェア品質、テストケース、リグレッションテスト(回帰テスト)、ネガティブテスト、単体テスト、結合テスト、テスト自動化、独立評価、境界値テスト
← 前の問題へこの年度をクイズで解く次の問題へ →
戦国ITクイズ機能

\ せっかくなら /

ITパスポート
クイズ形式で学習しませんか?

クイズ画面へ遷移する

すぐに利用可能!

©︎2026 情報処理技術者試験対策アプリ

このサイトについてブログプライバシーポリシー利用規約特商法表記開発者について