🎯 この記事を読み終わるころには、この問題が解けるようになります!
【例題】アジャイル開発手法のスクラム
問題:アジャイル開発手法のスクラムにおいて、開発チームの全員が1人ずつ「昨日やったこと」「今日やること」「障害になっていること」などを話し、全員でプロジェクトの状況を共有するイベントはどれか。
ア. スプリントプランニング
イ. スプリントレビュー
ウ. デイリースクラム
エ. レトロスペクティブ
前回はシステム開発・マネジメントを学びました。今回は、基本情報技術者試験で最頻出の「ソフトウェア開発手法」を徹底解説します。ウォーターフォールモデル、アジャイル開発、スクラム、XP(エクストリームプログラミング)、リバースエンジニアリング、マッシュアップ、ソフトウェア構成管理まで、試験に出る重要キーワードをひとつひとつ丁寧に解説します!
目次
- ソフトウェア開発モデルとは
- ウォーターフォールモデル
- アジャイル開発
- スクラム(スプリント・4つのイベント)
- XP(エクストリームプログラミング)
- ペアプログラミングとリファクタリング
- リバースエンジニアリング
- フォワードエンジニアリング・リエンジニアリング
- マッシュアップ
- ソフトウェア構成管理(SCM)
- 過去問チャレンジ!(6問)
- この章のまとめ
1. ソフトウェア開発モデルとは
ソフトウェア開発モデルとは、ソフトウェアの開発手順や開発方法をモデル化(複雑な現実世界を単純化すること)したものです。開発会社ごとに異なる開発の手順や方法を集約して分析し、その特徴的な部分を単純化してまとめたものです。
基本情報技術者試験では「アジャイル開発」「スクラム」「XP」の3つの用語の出題頻度が特に高いです。
▲ ウォーターフォールモデルとアジャイル開発の比較
2. ウォーターフォールモデル
ウォーターフォールモデルとは、ソフトウェアの開発プロセスを上流工程から下流工程へ向かって一直線に順番に進める手法です。滝のように、上から下へ作業が進むことからこの名前が付けられました。
メリット:
- 各工程が明確に分けられており、開発のスケジュールが立てやすい
- 全体の計画が容易に立てられる
- 進捗管理がしやすい
デメリット:
- 前工程が完了した後は元の工程に戻ることを想定していない
- 仕様変更が発生した場合、不具合のあった工程まで戻り、下流の工程をやり直す必要がある
- 完成品が見えるのがプロジェクト完了時になるため、利用者のフィードバックが遅れる
📝 ポイント:ウォーターフォールモデル
「上流から下流へ一方通行」「後戻りしない」がキーワード。計画は立てやすいが、仕様変更への対応が困難です。
3. アジャイル開発
アジャイル開発とは、短期間にソフトウェアの開発とリリースを繰り返すことで、ビジネス環境の変化やユーザーのニーズに柔軟に対応する開発モデルです。「アジャイル(Agile)」は「素早い」という意味です。
ウォーターフォールモデルの「最後にならないと製品が完成しない」というデメリットを解消するために生まれました。品質は高くなくとも素早く市場に製品をリリースし、市場のニーズを把握しながら仕様を変更・改善できます。
アジャイル開発の流れ(繰り返し):
要件定義 → 実装 → テスト → リリース → (次のスプリントへ)
特徴:
- 短期間での反復(スプリント)
- 仕様変更への柔軟な対応
- 継続的なリリース
- チームのコミュニケーション重視
- ウォーターフォールと対比される
📌 重要:アジャイル開発
アジャイル開発では、完璧な計画よりも「動くソフトウェアを素早く届けること」を優先します。現代のスピードが求められる開発環境に適しています。
4. スクラム
▲ スクラムの4つのイベントとスプリントの流れ
スクラムとは、アジャイル開発手法の1つです。開発作業を一定の期間(スプリント)に区切って、その期間中に実現すべき機能を明確にし、チーム全体で開発に取り組む手法です。スプリントは複数回繰り返され、その都度、製品の改善や機能追加が行われます。
| イベント名 | タイミング | 内容 |
|---|---|---|
| スプリントプランニング | スプリントの開始時 | 今回のスプリントの目的(スプリントゴール)を決めるミーティング |
| デイリースクラム | スプリント期間中、毎日 | 15分の短いミーティング。「昨日やったこと」「今日やること」「今の課題(障害)」を共有する |
| スプリントレビュー | スプリントの終了時 | 今回のスプリントで完成した成果物を評価するミーティング |
| レトロスペクティブ | スプリントレビューの後 | 今回のスプリント全体を振り返るミーティング。次のスプリントの改善につなげる |
📝 ポイント:スクラムのイベント
試験最頻出!4つのイベントの「タイミング」を覚えるのがポイント。デイリースクラム=「毎日15分」「昨日・今日・課題」がキーワードです。
5. XP(エクストリームプログラミング)
▲ XPのプラクティスとマッシュアップ
XP(eXtreme Programming)とは、アジャイル開発を行うための19のプラクティス(実践)が定義された開発手法です。「エクストリーム(extreme)」は「極端な」という意味で、優れたプラクティスを極限まで実践するという考え方です。
基本情報技術者試験に出題されるのは主に以下の2つのプラクティスです:
| プラクティス | 内容 |
|---|---|
| ペアプログラミング | 2人のプログラマが1つのパソコンを使ってソフトウェアを開発する手法。1人がコードを書き、もう1人がそれをチェックする。1人が休んでも作業が継続できる。 |
| リファクタリング | プログラムの外部仕様(外部から見た動作)は変えずに、内部構造(ソースコード)を改善・整理すること。不具合の減少・保守性の向上が目的。 |
その他のXPのプラクティス(参考):
- テスト駆動開発(TDD):テストコードを先に書いてから実装するアプローチ
- 継続的インテグレーション(CI):コードを頻繁に統合してビルド・テストを繰り返す
- YAGNI(You Ain’t Gonna Need It):必要になるまで機能を追加しない原則
6. ペアプログラミングとリファクタリング(詳細)
ペアプログラミングの詳細:
「ドライバー(コードを書く人)」と「ナビゲーター(チェックする人)」に分かれて1台のPCで開発します。役割は定期的に交代します。
リファクタリングの詳細:
外部仕様(ユーザーから見た動作)は一切変わらないが、内部のコードをきれいに整理・再構築します。
例:長いメソッドを分割する、重複したコードを共通化する、わかりにくい変数名をわかりやすいものに変更する。
📌 重要:混同注意!
「リファクタリング」は外部仕様を変えずに内部を改善。「ペアプログラミング」は2人1組で開発。両方ともXPのプラクティスです。試験では「外部仕様を変えずに」という表現がリファクタリングのキーワードになります。
7. リバースエンジニアリング
▲ リバースエンジニアリングの概念
リバースエンジニアリングとは、すでに存在しているソフトウェアを解析して、その仕様や設計を取り出す技術です。
なぜ必要か:
ソフトウェアの修正時、設計書が更新されないケースや、そもそも設計書がないケースがあります。すると、ソフトウェアのソースコードと書類に差異ができてしまい、設計書を見てもプログラムを把握できません。このような場合にリバースエンジニアリングを行い、古いプログラムから新しい設計書を作成します。
具体例:
- 既存のプログラムからUMLのクラス図を作成する
- 本番環境で稼働しているデータベースを分析してE-R図を作成する
8. フォワードエンジニアリング・リエンジニアリング
| 手法 | 方向 | 内容 |
|---|---|---|
| フォワードエンジニアリング | 設計書 → プログラム | 通常の開発工程。設計書からプログラムを作成する。 |
| リバースエンジニアリング | プログラム → 設計書 | 既存プログラムを解析して仕様・設計書を取り出す。 |
| リエンジニアリング | プログラム → 設計書 ↓ 新プログラム |
リバース+フォワードの組み合わせ。既存プログラムを解析してから、新たにプログラムを作り直す。 |
📝 ポイント:用語の覚え方
「リバース=逆方向(プログラム→設計書)」、「フォワード=順方向(設計書→プログラム)」、「リエンジニアリング=リバース+フォワード」で覚えましょう!
9. マッシュアップ
マッシュアップとは、複数のWebサービスを組み合わせて新しいサービスを作る手法です。
| 種類 | 内容 | 例 |
|---|---|---|
| プレゼンテーション マッシュアップ |
複数のWebサービスの表示を組み合わせる | 自社のWebサービスに、他サービスが提供する地図を組み込んでお店までの経路を表示する |
| データ マッシュアップ |
複数のWebサービスの出力データを統合して表示する | 複数のWebサービスから経済データを集めて、グラフにして表示する |
| ロジック マッシュアップ |
複数のWebサービスの出力を連結して表示する | あるWebサービスから宿泊施設リストを取得し、そのリストで別のWebサービスから空室状況を取得する |
📝 ポイント:マッシュアップ
マッシュアップは「複数のWebサービスを組み合わせて新しいサービスを作る」ことです。主にAPIを活用して実現します。
10. ソフトウェア構成管理(SCM)
▲ ソフトウェア構成管理とバージョン管理
ソフトウェア構成管理(Software Configuration Management:SCM)とは、ソフトウェアに関連する文書やプログラムへの変更を管理して、トラブルを未然に防ぐことです。簡単にいうと、ソフトウェアのバージョンを管理することです。
バージョン管理のメリット:
- 変更の履歴(版数)を管理できる(バージョン1、バージョン2…)
- 新しいバージョンに不具合があっても、一旦古いバージョンに戻すことができる
- 設計書とプログラムのバージョンを一致させて管理できる
| 分類 | 具体例 |
|---|---|
| システムソフトウェア関連 | OS、データベースマネジメントシステム、各種ミドルウェア |
| アプリケーションソフトウェア関連 | アプリケーションシステム、サブシステム、プログラム、モジュール |
| ファイル関連 | データベース、テーブル、レコード、フィールド |
| マニュアル関連 | 業務運用マニュアル、システム運用マニュアル、システム操作マニュアル |
📝 ポイント:構成管理の対象
構成管理のポイント:「文書とプログラムのバージョンを一致させて管理する」。試験では「構成管理の対象」として「プログラムのバージョン」が問われます。
11. 過去問チャレンジ!(6問)
🎯 記事冒頭の例題にチャレンジ!
【問題1(再掲)】スクラムのデイリースクラム
アジャイル開発手法のスクラムにおいて、開発チームの全員が1人ずつ「昨日やったこと」「今日やること」「障害になっていること」などを話し、全員でプロジェクトの状況を共有するイベントはどれか。
ア. スプリントプランニング
イ. スプリントレビュー
ウ. デイリースクラム
エ. レトロスペクティブ
✅ 解答・完全解説
正解:ウ (デイリースクラム)
解説:
スプリント期間中に毎日行われる15分のミーティングで、「昨日やったこと」「今日やること」「今の課題(障害)」を共有するのが「デイリースクラム」です。
ア(スプリントプランニング)はスプリント開始時、イ(スプリントレビュー)は終了時に成果物評価、エ(レトロスペクティブ)はレビュー後の振り返りです。
【過去問 その2】リバースエンジニアリング (問題13-1 平成9年度)
ソフトウェアのリバースエンジニアリングの説明はどれか。
ア. 開発支援ツールなどを用いて、設計情報からソースコードを自動生成する。
イ. 外部から見たときの振る舞いを変えずに、ソフトウェアの内部構造を変える。
ウ. 既存のソフトウェアを解析し、その仕様や構造を明らかにする。
エ. 既存のソフトウェアを分析し理解した上で、ソフトウェア全体を新しく構築し直す。
💡 解答・解説
正解:ウ
「既存のソフトウェアを解析し、その仕様や構造を明らかにする」のがリバースエンジニアリングです。
ア=フォワードエンジニアリング、イ=リファクタリング、エ=リエンジニアリングの説明です。
【過去問 その3】リファクタリング (問題13-2 平成29年度)
ソフトウェア開発の活動のうち、アジャイル開発においても重視されているリファクタリングはどれか。
ア. ソフトウェアの品質を高めるために、2人のプログラマが協力して、一つのプログラムをコーディングする。
イ. ソフトウェアの保守性を高めるために、外部仕様を変更することなく、プログラムの内部構造を変更する。
ウ.
動作するソフトウェアを迅速に開発するために、テストケースを先に設定してから、プログラムをコーディングする。
エ. 利用者からのフィードバックを得るために、提供予定のソフトウェアの試作品を早期に作成する。
💡 解答・解説
正解:イ
「外部仕様を変更することなく、プログラムの内部構造を変更する」のがリファクタリングです。
ア=ペアプログラミング、ウ=テスト駆動開発、エ=プロトタイピングモデルです。
【過去問 その4】XPのプラクティス (問題13-4 令和元年度)
XP(eXtreme Programming)において、プラクティスとして提唱されているものはどれか。
ア. インスペクション
イ. 構造化設計
ウ. ペアプログラミング
エ. ユースケースの活用
💡 解答・解説
正解:ウ
XPのプラクティスとして提唱されているのは「ペアプログラミング」です。インスペクションは公式なレビュー手法、構造化設計は設計手法、ユースケースはUMLの概念です。
【過去問 その5】構成管理に起因しない問題 (問題13-5 平成28年度)
ソフトウェア開発において、構成管理に起因しない問題はどれか。
ア.
開発者が定められた改版手続に従わずにプログラムを修正したので、今まで正しく動作していたプログラムが不正な動作をするようになった。
イ. システムテストにおいて、単体テストレベルのバグが多発して、開発が予定どおりに進捗しない。
ウ.
仕様書、設計書及びプログラムの版数が対応付けられていないので、プログラム修正時にソースプログラムを解析しないと、修正すべきプログラムが特定できない。
エ.
一つのプログラムから多数の派生プログラムが作られているが、派生元のプログラムの修正が全ての派生プログラムに反映されない。
💡 解答・解説
正解:イ
イの「単体テストレベルのバグが多発」は構成管理ではなく「ソフトウェア品質・テスト工程」に起因する問題です。ア・ウ・エは版数(バージョン)管理の不備に起因する構成管理の問題です。
【過去問 その6】構成管理の対象項目 (問題13-6 平成24年度)
ソフトウェア開発プロジェクトで行う構成管理の対象項目として、適切なものはどれか。
ア. 開発作業の進捗状況
イ. 成果物に対するレビューの実施結果
ウ. プログラムのバージョン
エ. プロジェクト組織の編成
💡 解答・解説
正解:ウ
ソフトウェア構成管理では、主に「文書とプログラムのバージョン(版数)」を管理します。「プログラムのバージョン」が正解です。進捗状況・レビュー結果・組織編成は構成管理の対象ではありません。
12. この章のまとめ
📌 ソフトウェア開発手法のまとめ
- ソフトウェア開発モデル: ウォーターフォール(上流→下流、後戻り不可)vs アジャイル(短期反復、柔軟対応)
- スクラム: アジャイル手法の1つ。スプリントを繰り返す。4イベント:①スプリントプランニング(開始)②デイリースクラム(毎日15分)③スプリントレビュー(終了時)④レトロスペクティブ(振り返り)
- XP(エクストリームプログラミング): 19のプラクティス。重要2つ:ペアプログラミング(2人1台)、リファクタリング(外部仕様変えず内部改善)
- リバースエンジニアリング: 既存プログラム→仕様・設計書(逆方向解析)
- フォワードエンジニアリング: 設計書→プログラム(通常の順方向)
- リエンジニアリング: リバース+フォワード(既存プログラムを解析して新プログラムを作る)
- マッシュアップ: 複数Webサービスの組み合わせ。プレゼンテーション/データ/ロジックの3種類
- ソフトウェア構成管理(SCM): 文書・プログラムのバージョン管理。変更履歴の追跡と旧バージョンへの復元が可能
学習難易度:★★☆☆☆(用語の意味が理解できれば得点しやすい)
この記事について
基本情報技術者試験の合格を目指す方のために、参考書の内容を初心者向けにわかりやすく噛み砕いて解説しています。ITの基礎をしっかり固めて、一緒に合格を目指しましょう!
