この記事ではアジャイルについてIT初心者にも分かりやすく解説します。
アジャイル
- アジャイルは小分けに開発を進めていき、少しずつ納品する開発手法。
- アジャイルの手法にはスクラムとXPがある。
- リバースエンジニアリングとは完成しているシステムから設計や仕様を読み解く手法。
基本情報ではアジャイルに関する問題が出題されます。是非最後までご覧ください。
ウォーターフォールモデルとは
システム開発の進め方には大きく2種類の方法があります。
ウォーターフォールモデルとアジャイルです。ウォーターフォールモデルを知っている方がアジャイルも理解しやすいと思うので、まず簡単にウォーターフォールモデルから解説します。
ウォーターフォールモデルとは、全ての機能を一気に、要件定義→設計→開発→テスト→リリースの順番で開発する手法です。ちなみに、ウォーターフォールには滝という意味があります。水の流れになぞらえて、要件定義のような最初の方の工程を上流工程、テストのような最後の方の工程を下流工程と言います。
ウォーターフォールモデルの分かりやすい身近な例は建築です。
家を建てる時、キッチンは広めが良いとかバルコニーが欲しいとか要望を設計者とすり合わせ(要件定義)、そこから設計図に落とし込み(設計)、実際に建築(開発)していきますよね。
なぜこの順番なのかと言うと、建築するためには設計図が必要で、設計図を作るためには要件が決まっている必要があるからです。要件を決める、設計図を作る等、各段階できちんと細部まで煮詰めてから次に進んでいくのがウォーターフォールモデルの特徴です。
しかし、ウォーターフォールモデルには弱点があります。最後の方の工程にならないと実際に完成する家のイメージが湧きにくい所です。設計書上では素敵な玄関に見えたけど、完成間近の家を見てみると微妙かも…なんてことが起こり得る可能性があります。しかも、完成間近で「やっぱり玄関を変えたい!」と言っても既に手遅れなんてこともあり得ます。
ウォーターフォールモデルのまとめ
【特徴】
上流工程から下流工程の順番で開発を進める。後戻りは出来ない。
【デメリット】
①下流工程にならないと完成イメージが湧き辛い
②後の工程では要件の変更がし辛い
③システムの完成までに時間が掛かる
アジャイルとは
アジャイルでは、ウォーターフォールモデルのように完全に仕様を決めてから一気に開発するのではなく、大体の仕様が決まった機能から小分けに開発を進めていき、完成した機能は少しずつリリース(納品)していきます。
アジャイルの特徴は、途中で仕様変更があるのは当たり前であると踏んだ上で開発を進めていく所です。ウォーターフォールモデルのように細部まで仕様を決めず、大体の要件が決まった段階で開発を始めてしまいます。また、少しずつ開発・リリースを進めるので、素早くユーザーにシステムを提供出来ます。
アジャイル開発の手法
アジャイル開発にはスクラムとXP(Extreme Programming)と呼ばれる手法があります。
スクラム
スクラムはアジャイル開発で最もよく使われる手法です。スクラムではチーム内のコミュニケーションを大切にします。
スクラムでは3つの役割を持つ人達が5つのイベントを経て3つの成果物を作成します。
3つの役割を持つ人
スクラムチームにはプロダクトオーナー、開発者、スクラムマスターの3種類の人がいます。
プロダクトオーナーはユーザーと開発するシステムの機能や要件をすり合わせ、その結果を管理し、開発者やスクラムマスターに共有します。
開発者は実際にシステムを作成します。
スクラムマスターは開発チームのリーダーで、開発者が効率良く作業を進められるように環境を整備します。
5つのイベント
スクラムでは、スプリントプランニング、スプリント、デイリースクラム、スプリントレビュー、スプリントレトロスペクティブの5つのイベントを行います。
アジャイルでは小さいサイクルを繰り返すことでシステム開発を進めていきますが、スクラムではその1サイクルをスプリントと言います。アジャイル開発中のスプリントの期間は常に一定で、1か月以内になるように設定します。
スプリントの前には、スプリントで行うべき作業やゴールを決めるスプリントプランニングが行われます。また、各スプリントの終盤では、スプリントで作成した成果物の確認を行うスプリントレビューが行われ、スプリントの最後にはスプリントの振り返りを行うスプリントレトロスペクティブが行われます。
また、スプリント中は毎日チームで集まり、進捗や次にするべき作業の確認を行うデイリースクラムと呼ばれるミーティングを行います。
3つの成果物
スクラムでは、プロダクトバックログ、スプリントバックログ、インクリメントを成果物とします。
プロダクトバックログは、成果を上げるために必要なことを優先順位と共にリスト化したものです。
スプリントバックログは、実際にどんな作業をすればよいかをまとめたものです。
インクリメントは、スクラムの成果物です。
XP(Extreme Programming)
XPは柔軟に仕様変更出来ることに重きを置いたアジャイルの開発手法です。開発者目線での方法論が多いことに特徴があります。
XPでは5つの価値観と19個のプラクティス(開発方法論)を提唱しています。
5つの価値観
XPでは、コミュニケーション、シンプル、フィードバック、勇気、尊重の5つの価値観を大切にします。
システム開発では顧客やエンジニア等、様々な人が関わり合います。お互いの意見を尊重し、積極的にコミュニケーションを取ることがプロジェクトの成功に重要です。また、成果物を適切にフィードバックすることで、必要な機能が明確になり、無駄な開発をすることが無くなります。アジャイルでは仕様変更を想定内とするので、仕組みは出来るだけシンプルにしておきます。複雑な仕組みを後から変更するのは難しいからです。とは言え、仕様変更には大きなストレスが掛かります。そんな時、困難を恐れず、勇気を持って仕様変更を受け入れる姿勢が大切になります。
19個のプラクティス
XPでは19個のプラクティスが提唱されていますが、その中でも基本情報で出題されたことがあるペアプログラミング、継続的インテグレーション、リファクタリングを紹介します。
ペアプログラミング
ペアプログラミングでは2人1組でプログラミングを行います。1人がプログラミングを行い、もう1人が内容の確認・補佐をします。
2人でプログラミングをするので、ちょっとした問題点があってもすぐに相談し合えることや、コードを理解している人が2人いることで、問題が発生した時に迅速な対応が出来ます。
継続的インテグレーション
継続的インテグレーションでは、少しずつ開発して成果物と結合させてはテストを行うことを繰り返します。
少しずつコードを結合するので、不具合が発生した時に原因箇所の特定が容易になります。
リファクタリング
リファクタリングとは、仕様を変えずに、完成したコードを分かりやすいように改善することです。分かりやすくすることで、障害が発生した時でも調査を迅速に行えます。
リバースエンジニアリング
リバースエンジニアリングと言う、アジャイルとは全く関係ありませんが、基本情報で出題される開発手法があります。リバースエンジニアリングも出題されることがあるので覚えておきましょう。
リバースエンジニアリングとは、既に完成しているシステムを分析して、その仕様や構造を明らかにすることです。通常、仕様や構造を決めてからシステムを開発するのですが、その逆でシステムから仕様や構造を明らかにするため、「戻る」を意味するリバースを使って、リバースエンジニアリングなんて呼ばれています。
基本情報技術者試験での出題例
令和6年度問12
基本情報技術者
科目A 令和6年度問12
アジャイル開発手法の一つであるスクラムで定義され,スプリントで実施するイベントのうち,毎日決まった時間に決まった場所で行い,開発チームの全員が前回からの進捗状況や今後の作業計画を共有するものはどれか。
ア スプリントプランニング
ウ デイリースクラム
イ スプリントレビュー
エ レトロスペクティブ
正解は”エ”
デイリースクラムはスプリント内で実施され、毎日決まった時間、決まった場所で進捗や予定を共有します。
サンプル問題問41
基本情報技術者
科目A サンプル問題問41
アジャイル開発のスクラムにおけるスプリントのルールのうち,適切なものはどれか。
ア スプリントの期間を決定したら,スプリントの1回目には要件定義工程を,2回目には設計工程を,3回目にはコード作成工程を,4回目にはテスト工程をそれぞれ割り当てる。
イ 成果物の内容を確認するスプリントレビューを,スプリントの期間の中間時点で実施する。
ウ プロジェクトで設定したスプリントの期間でリリース判断が可能なプロダクトインクリメントができるように,スプリントゴールを設定する。
エ 毎回のスプリントプランニングにおいて,スプリントの期間をゴールの難易度に応じて,1週間から1か月までの範囲に設定する。
正解は”ウ”
ア 1つのスプリントの中で、要件定義からコード作成を行います。よって×です。
イ スプリントレビューは成果物を確認する作業です。スプリントの終盤で行います。よって×です。
ウ プロダクトインクリメントとは成果物のことです。スプリントの期間で成果物をリリースできるようにゴールを設定する必要があるので〇です。
エ スプリントの期間は常に一定に設定します。
令和5年度問12
基本情報技術者
科目A 令和5年度問12
アジャイル開発手法のスクラムにおいて,開発チームの全員が1人ずつ”昨日やったこと”,”今日やること”,”障害になっていること”などを話し,全員でプロジェクトの状況を共有するイベントはどれか。
ア スプリントプランニング
ウ デイリースクラム
イ スプリントレビュー
エ レトロスペクティブ
正解は”ウ”
毎日の進捗や次にやることをミーティングするイベントをデイリースクラムと言います。
令和元年度秋期問50
基本情報技術者
午前試験 令和元年度秋期問50
XP(eXtreme Programming)において,プラクティスとして提唱されているものはどれか。
ア インスペクション
ウ ペアプログラミング
イ 構造化設計
エ ユースケースの活用
正解は”ウ”
ペアプログラミングはXPで提唱されているプラクティスの1つです。
平成30年度秋期問50
基本情報技術者
午前試験 平成30年度秋期問50
XP(Extreme Programming)のプラクティスの説明のうち,適切なものはどれか。
ア 顧客は単体テストの仕様に責任をもつ。
イ コードの結合とテストを継続的に繰り返す。
ウ コードを作成して結合できることを確認した後,テストケースを作成する。
エ テストを通過したコードは,次のイテレーションまでリファクタリングしない。
正解は”イ”
コードの結合とテストを継続的に繰り返す、継続的インテグレーションが提唱されています。
平成30年度春期問50
基本情報技術者
午前試験 平成30年度春期問50
エクストリームプログラミング(XP:eXtreme Programming)のプラクティスのうち,プログラム開発において,相互に役割を交替し,チェックし合うことによって,コミュニケーションを円滑にし,プログラムの品質向上を図るものはどれか。
ア 計画ゲーム
ウ テスト駆動開発
イ コーディング標準
エ ペアプログラミング
正解は”エ”
ペアプログラミングではお互いにチェックし合いながらプログラミングを行います。
平成29年度秋期問50
基本情報技術者
午前試験 平成29年度秋期問50
ソフトウェアのリバースエンジニアリングの説明はどれか。
ア 開発支援ルーツなどを用いて,設計情報からソースコードを自動生成する。
イ 外部から見たときの振る舞いを変えずに,ソフトウェアの内部構造を変える。
ウ 既存のソフトウェアを解析し,その仕様や構造を明らかにする。
エ 既存のソフトウェアを分析し理解した上で,ソフトウェア全体を新しく構築し直す。
正解は”ウ”
リバースエンジニアリングは既に完成しているソフトウェアを解析し、仕様や構造を明らかにします。
平成29年度春期問50
基本情報技術者
午前試験 平成29年度春期問50
ソフトウェア開発の活動のうち,アジャイル開発においても重視されているリファクタリングはどれか。
ア ソフトウェアの品質を高めるために,2人のプログラマが協力して,一つのプログラムをコーディングする。
イ ソフトウェアの保守性を高めるために,外部仕様を変更することなく,プログラムの内部構造を変更する。
ウ 動作するソフトウェアを迅速に開発するために,テストケースを先に設定してから,プログラムをコーディングする。
エ 利用者からのフィードバックを得るために,提供予定のソフトウェアの試作品を早期に作成する。
正解は”イ”
リファクタリングでは外部仕様を変えずに、コードを分かりやすく変更します。コードのことを内部構造と表現しているだけですね。
基本情報に関する他の記事
ハードウェア | ソフトウェア | システム構成 |
ネットワーク | データベース | 開発手法 | 情報セキュリティ |
開発手法に関する記事
プログラムについての記事
【基本情報】午前試験のアルゴリズムの苦手意識を克服する!
【基本情報】関数?手続?再帰的?プログラムの性質を解説!
データ構造についての記事
【基本情報】スタックとキューってなに?どこで使われている?
【基本情報】2分探索木を完全に理解する!
【基本情報】ハッシュ法を完全に理解する!過去問と一緒に解説!
開発の流れについての記事
【基本情報】UMLやDFDの全てをまとめて解説!
【基本情報】モジュール結合度について分かりやすく解説!
【基本情報】オブジェクト指向で出題されることをまとめた!
【基本情報】基本情報で出題されるテスト手法の全てを解説