基本情報技術者 2018年 秋期 午前(科目A) 問50
問題文
XP(Extreme Programming)のプラクティスの説明のうち、適切なものはどれか。
選択肢
ア:顧客は単体テストの仕様に責任をもつ。
イ:コードの結合とテストを継続的に繰り返す。(正解)
ウ:コードを作成して結合できることを確認した後、テストケースを作成する。
エ:テストを通過したコードは、次のイテレーションまでリファクタリングしない。
XP(Extreme Programming)のプラクティスの説明のうち、適切なものはどれか。【午前2 解説】
要点まとめ
- 結論:XPの中心的実践は継続的インテグレーションと自動テストを繰り返すことであり、正解は イ です。
- 根拠:頻繁な結合とテストにより欠陥を早期発見し、フィードバックを短サイクルで得て設計を改善していきます。
- 差がつくポイント:顧客は受け入れ基準(アクセプタンステスト)を定義するが、単体テストの作成責任は開発側にある点を押さえてください。
正解の理由
正解は イ「コードの結合とテストを継続的に繰り返す。」です。これはXPで推奨される継続的インテグレーション(Continuous Integration)の説明に一致します。頻繁に(理想は1日複数回)コードを結合し、自動テストを実行して問題を速やかに検出・修正することで、統合による手戻りを小さくします。XPの他のプラクティス(テスト駆動開発、リファクタリング、ペアプログラミング)と合わせて品質と生産性を高めます。
よくある誤解
- 「顧客が単体テストの仕様に責任を持つ」:誤り。顧客は機能要件や受け入れ条件(アクセプタンステスト)を定義し、単体テスト(ユニットテスト)は主に開発者が作成します。
- 「テストはコード作成後に行う」:誤り。XPはTDD(テスト駆動開発)を推奨し、単体テストはコードを書く前にテストを先に作ることが多いです。
- 「テストを通過したらリファクタリングを翌イテレーションまで待つ」:誤り。テストがあることで安全にリファクタリングでき、必要ならその場で改善を行います。
解法ステップ
- 問題文と選択肢から「XPのプラクティス」に関するキーワードを探す(継続的/テスト/顧客/リファクタリング)。
- XPの主要概念(継続的インテグレーション、TDD、リファクタリング、ペアプログラミング、顧客の常駐)と照合する。
- 各選択肢が上記概念に合致するかを検証し、矛盾点(顧客の責任範囲やテストの順序など)を理由に除外する。
- 最も直接的にXPのプラクティスを表す選択肢を選ぶ(この場合は継続的な結合とテスト)。
選択肢別の誤答解説
- ア: 「顧客は単体テストの仕様に責任をもつ。」
誤り。顧客は要求や受け入れ基準(アクセプタンステスト)を担いますが、ユニットテストの設計・実装責任は開発チーム側です。 - イ: 「コードの結合とテストを継続的に繰り返す。」
正解。継続的インテグレーションと自動テストの反復はXPの基本的プラクティスです。 - ウ: 「コードを作成して結合できることを確認した後、テストケースを作成する。」
誤り。TDDなどXPではテストを先に定義してからコードを書くことが推奨され、テストを後回しにする表現は不適切です。 - エ: 「テストを通過したコードは、次のイテレーションまでリファクタリングしない。」
誤り。むしろテストがあることで安全に随時リファクタリングでき、リファクタリングは継続的に行うべきです。
補足コラム
XPの代表的なサイクルは「Red-Green-Refactor」です。まず失敗するテストを書く(Red)、そのテストを通す最小限のコードを書く(Green)、テストを保ちつつ設計を改善する(Refactor)。継続的インテグレーションはこのサイクルを頻繁に実行し、ブランチ統合やビルドの自動化(Jenkins/GitHub Actionsなど)と自動テストで運用します。小さなコミットと短いフィードバックループが品質と柔軟性を高めます。
簡単なTDDサンプル(Python, pytest):
# test_sum.py
def test_sum():
assert sum([1, 2, 3]) == 6
# 実装は後から書く(TDDでは先にテストを書く)
FAQ
Q1: 顧客はテストを全く関与しないのですか?
A1: 顧客はビジネス要件や受け入れ基準(アクセプタンステスト)に関与しますが、技術的なユニットテストの詳細設計までは通常担当しません。
A1: 顧客はビジネス要件や受け入れ基準(アクセプタンステスト)に関与しますが、技術的なユニットテストの詳細設計までは通常担当しません。
Q2: 継続的インテグレーションとTDDはどちらが先ですか?
A2: 役割が異なります。TDDは個々の開発サイクル(テスト先行)を指し、CIはその成果を頻繁に統合・検証するための運用プロセスです。両方を組み合わせるのが効果的です。
A2: 役割が異なります。TDDは個々の開発サイクル(テスト先行)を指し、CIはその成果を頻繁に統合・検証するための運用プロセスです。両方を組み合わせるのが効果的です。
Q3: リファクタリングはいつ行うべきですか?
A3: テストが存在する限り随時行うべきです。リファクタリングをため込むと設計負債が増え、修正コストが高くなります。
A3: テストが存在する限り随時行うべきです。リファクタリングをため込むと設計負債が増え、修正コストが高くなります。
関連キーワード: XP、Extreme Programming、継続的インテグレーション、テスト駆動開発、リファクタリング、ペアプログラミング、アクセプタンステスト

\ せっかくなら /
基本情報技術者を
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

