この記事では、アジャイルとリバースエンジニアリングについて、初心者にも分かりやすく、図解付きで丁寧に解説しています!
アジャイル
- アジャイルは小分けに開発を進めていき、少しずつ納品する開発手法。
- アジャイルの手法にはスクラムとXPがある。
スクラム
- スクラムチームには、プロダクトオーナー、スクラムマスター、開発者がいる。
- スクラムでは、1つのサイクルをスプリントと呼ぶ。
- スプリントでは、スプリントプランニング、デイリースクラム、スプリントレビュー、スプリントレトロスペクティブを行う。
- スクラムでは、プロダクトバックログ、スプリントバックログ、インクリメントを成果物とする。
- 1回のスプリントで作業できる量をベロシティと呼ぶ。
XP
- テスト駆動開発では、プログラム開発の前にテストの内容を決め、実際の開発はテストに合格できるように行う。
- ペアプログラミングでは、2人1組でプログラミングを行う。
- 継続的インテグレーションでは、少しずつ開発しながら、既に完成している成果物と結合する。
- リファクタリングでは、仕様を変えずに、既に開発したコードを分かりやすいように修正する。
リバースエンジニアリング
- リバースエンジニアリングとは完成しているシステムから設計や仕様を読み解く手法。
アジャイルの概要
アジャイルとはシステム開発の進め方の1つで、少しずつ機能を開発してリリース(納品)する、を繰り返す開発手法です。システムを完全に作り切ってからリリースするのではなく、出来た機能からちょっとずつリリースするのが特徴ですね。

アジャイルの特徴は、途中で仕様変更があるのは当たり前であると踏んだ上で開発を進めていく所です。そのため、大体の要件が決まった段階で開発を始めてしまいます。また、少しずつ開発・リリースを進めるので、素早くユーザーにシステムを提供出来ます。
アジャイル開発にはスクラムとXP(Extreme Programming)と呼ばれる手法があります。
スクラム
スクラムはアジャイル開発で最もよく使われる手法です。スクラムではチーム内のコミュニケーションを大切にします。スクラムでは3つの役割を持つ人達が5つのイベントを経て3つの成果物を作成します。
3つの役割を持つ人
スクラムチームにはプロダクトオーナー、開発者、スクラムマスターの3種類の人がいます。
プロダクトオーナー:システムの最終決定権と責任を持つ人。プロダクトバックログを作る
スクラムマスター:開発チームのリーダー。開発者たちにスクラムの価値観を教え、チーム内外問わず存在する問題を解決する
開発者:システムを実際に作っていく人
5つのイベント
スクラムでは、スプリントプランニング、スプリント、デイリースクラム、スプリントレビュー、スプリントレトロスペクティブの5つのイベントを行います。
アジャイルでは小さいサイクルを繰り返すことでシステム開発を進めていきますが、スクラムではその1サイクルをスプリントと言います。

スプリントの前には、スプリントで行うべき作業やゴールを決めるスプリントプランニングが行われます。また、各スプリントの終盤では、スプリントで作成した成果物の確認を行うスプリントレビューが行われ、スプリントの最後にはスプリントの振り返りを行うスプリントレトロスペクティブが行われます。また、スプリント中は毎日チームで集まり、進捗や次にするべき作業の確認を行うデイリースクラムと呼ばれるミーティングを行います。

3つの成果物
スクラムでは、プロダクトバックログ、スプリントバックログ、インクリメントを成果物とします。
プロダクトバックログ:開発する機能を優先順位と共にリスト化したもの
スプリントバックログ:スプリント内でやるべき作業をまとめたもの
インクリメント:成果物
バーンダウンチャート
バーンダウンチャートは案件全体やスプリントの進捗状況を表したグラフです。バーンダウンチャートを使えば、予定に対して進捗が進んでいるのか遅れているのかがすぐに分かります。

ベロシティ
ベロシティとは1つのスプリント内で作業できる量を表した指標です。ベロシティでは作業量をストーリーポイントを使って表します。ストーリーポイントとは、プロジェクトにおけるタスクや開発する機能の相対的な大きさや難易度を表す単位です。
ベロシティを使うことで、次のようなメリットを享受できます。
- 直近の行ったスプリントからベロシティを計算し、今回のスプリントでどこまでシステム開発を進めることができるか予想できる。
- スクラムチームの成長度を測ることができる。例えば、何個か前のベロシティと直近のベロシティを比較して、ベロシティが大きくなっていれば成長できていることが分かる。
XP(Extreme Programming)
XPは柔軟に仕様変更出来ることに重きを置いたアジャイルの開発手法です。開発者目線での方法論が多いことに特徴があります。XPでは5つの価値観と19個のプラクティス(開発方法論)を提唱しています。
5つの価値観
XPでは、コミュニケーション、シンプル、フィードバック、勇気、尊重の5つの価値観を大切にします。
システム開発では顧客やエンジニア等、様々な人が関わり合います。お互いの意見を尊重し、積極的にコミュニケーションを取ることがプロジェクトの成功に重要です。また、成果物を適切にフィードバックすることで、必要な機能が明確になり、無駄な開発をすることが無くなります。アジャイルでは仕様変更を想定内とするので、仕組みは出来るだけシンプルにしておきます。複雑な仕組みを後から変更するのは難しいからです。とは言え、仕様変更には大きなストレスが掛かります。そんな時、困難を恐れず、勇気を持って仕様変更を受け入れる姿勢が大切になります。
19個のプラクティス
XPでは19個のプラクティスが提唱されていますが、その中でも試験で出題されたことがあるテスト駆動開発、ペアプログラミング、継続的インテグレーション、リファクタリングを紹介します。
テスト駆動開発
プログラム開発の前にテストの内容を決めて、実際の開発はテストに合格できるように行います。
ペアプログラミング
ペアプログラミングでは2人1組でプログラミングを行います。1人がプログラミングを行い、もう1人が内容の確認・補佐をします。

2人でプログラミングをするので、ちょっとした問題点があってもすぐに相談し合えることや、コードを理解している人が2人いることで、問題が発生した時に迅速な対応が出来ます。
継続的インテグレーション
継続的インテグレーションでは、少しずつ開発して成果物と結合させてはテストを行うことを繰り返します。

「少しずつコードを作成→結合→テスト」を繰り返すので、不具合が発生した時、新たに追加したコードの部分が悪さをしていると直ぐに分かり、修正が楽になります。
リファクタリング
リファクタリングとは、プログラムの仕様を変えずに、既に完成しているコードを読みやすく改善することです。コードを読みやすくすることで、不具合が発生した時の原因調査もやりやすくなります。
リバースエンジニアリング
リバースエンジニアリングとは、既に完成しているシステムを分析して、その仕様やソースコードを明らかにする手法です。通常、仕様や構造を決めてからシステムを開発するのですが、その逆で完成したシステムから仕様や構造を明らかにします。そのため、「戻る」を意味する「リバース」を使ってリバースエンジニアリングと呼ばれます。

リバースエンジニアリングはアジャイルと関係ありませんが、試験でよく出題されるので一緒に覚えておきましょう。
応用情報技術者試験での出題例
令和5年度秋期問49
応用情報技術者
午前試験 令和5年度秋期問49
アジャイルソフトウェア開発宣言では,”あることがらに価値があることを認めないながらも別のことがらにより価値をおく”としている。”別のことがら”に該当するものの組みはどれか。
ア 個人と対話,動くソフトウェア,顧客との協調,変化への対応
イ 個人と対話,包括的なドキュメント,顧客との協調,計画に従うこと
ウ プロセスやツール,動くソフトウェア,契約交渉,変化への対応
エ プロセスやツール,包括的なドキュメント,契約交渉,計画に従うこと
正解は”ア”
アジャイルソフトウェア開発宣言では、次のことを宣言しています。
プロセスやツールよりも個人と対話を、包括的なドキュメントよりも動くソフトウェアを、契約交渉よりも顧客との協調を、計画に従うことよりも変化への対応を、価値とする。
よって、答えはアです。
令和5年度春期問48
応用情報技術者
午前試験 令和5年度春期問48
スクラムでは,一定の期間で区切ったスプリントを繰り返して開発を進める。各スプリントで実施するスクラムイベントの順序のうち,適切なものはどれか。
〔スクラムイベント〕
1:スプリントプランニング
3:スプリントレビュー
ア 1 → 4 → 2 → 3
ウ 4 → 1 → 2 → 3
2:スプリントレトロスペクティブ
4:デイリースクラム
イ 1 → 4 → 3 → 2
エ 4 → 1 → 3 → 2
正解は”イ”
スプリントでは、
スプリントプランニング→デイリースクラム→スプリントレビュー→スプリントレトロスペクティブの順番で行います。
令和4年度秋期問49
応用情報技術者
午前試験 令和4年度秋期問49
エクストリームプログラミング(XP:Extreme Programming)における”テスト駆動開発”の特徴はどれか。
ア 最初のテストで,なるべく多くのバグを摘出する。
イ テストケースの改善を繰り返す。
ウ テストでのカバレージを高めることを目的とする。
エ プログラムを書く前にテストコードを記述する。
正解は”エ”
テスト駆動開発では、プログラムを書く前にテストコードを記述し、テストに合格できるように開発をしていきます。
令和4年度秋期問50
応用情報技術者
午前試験 令和4年度秋期問50
スクラムのスプリントにおいて,(1)~(3)のプラクティスを採用して開発を行い,スプリントレビューの後にKPT手法でスプリントレトロスペクティブを行った。”KPT”の”T”に該当する例はどれか。
〔プラクティス〕
(1) ペアプログラミングでコードを作成する。
(2) スタンドアップミーディングを行う。
(3) テスト駆動開発で開発を進める。
ア 開発したプログラムは欠陥が少なかったので,今後もペアプログラミングを継続する。
イ スタンドアップミーティングにメンバー全員が集まらないことが多かった。
ウ 次のスプリントからは,スタンドアップミーティングにタイムキーパーを置き,終了5分前を知らせるようにする。
エ テストコードの作成に見積り以上の時間が掛かった。
正解は”ウ”
KPT手法とは、振り返りをするときに、
「良かったので継続したいこと(Keep)」と「解決すべき課題(Problem)」を洗い出した上で、「次に取り組むこと(Try)」を決定する手法です。
ア~エの中で、次に取り組むことを記載しているのはウのみです。
令和4年度春期問49
応用情報技術者
午前試験 令和4年度春期問49
アジャイル開発の手法の一つであるスクラムにおいて,決められた期間におけるスクラムチームの生産量を相対的に表現するとき,尺度として用いるものはどれか。
ア スプリント
ウ バックログ
イ スプリントレトロスペクティブ
エ ベロシティ
正解は”エ”
スクラムチームがスプリント内で生産する量をベロシティと呼びます。
令和3年度秋期問49
応用情報技術者
午前試験 令和3年度秋期問49
アジャイル開発におけるプラクティスの一つであるバーンダウンチャートはどれか。ここで,図中の破線は予定又は予想を,実線は実績を表す。

正解は”ア”
バーンダウンチャートとは、案件やスプリントの進捗状況を表します。よって答えはアです。
令和3年度秋期問50
応用情報技術者
午前試験 令和3年度秋期問50
アジャイル開発手法の一つであるスクラムでは,プロダクトオーナ,スクラムマスタ,開発者でスクラムチームを構成する。スクラムマスタが行うこととして,最も適切なものはどれか。
ア 各スプリントの終わりにプロダクトインクリメントのリリースの可否を判断する。
イ スクラムの理論とプラクティスを全員が理解するように支援する。
ウ プロダクトバックログアイテムを明確に表現する。
エ プロダクトバックログの優先順位を決定する。
正解は”イ”
スクラムマスタは開発者を支援します。