システム開発

【基本情報】アジャイル開発とリバースエンジニアリングを解説

お茶ん太
お茶ん太

この記事では、アジャイルとリバースエンジニアリングについて、初心者にも分かりやすく図解付きで丁寧に解説しています!

アジャイル

  • アジャイルは少しずつ機能を開発してリリースする、を繰り返す開発手法
  • アジャイル開発の手法にはスクラムとXPがある。
  • スクラムでは、スプリントプランニング・スプリント・デイリースクラム・スプリントレビュー・スプリントレトロスペクティブを経て成果物を作成する。
  • XPには、ペアプログラミング・継続的マイグレーション・リファクタリングなどの開発方法論がある。

リバースエンジニアリング

  • リバースエンジニアリングとは既に完成しているシステムを分析して、その仕様やソースコードを明らかにする手法。

アジャイルの概要

アジャイルとはシステム開発の進め方の1つで、少しずつ機能を開発してリリース(納品)する、を繰り返す開発手法です。システムを完全に作り切ってからリリースするのではなく、出来た機能からちょっとずつリリースするのが特徴ですね。

アジャイルの特徴は、途中で仕様変更があるのは当たり前であると踏んだ上で開発を進めていく所です。そのため、大体の要件が決まった段階で開発を始めてしまいます。また、少しずつ開発・リリースを進めるので、素早くユーザーにシステムを提供出来ます

アジャイル開発にはスクラムXP(Extreme Programming)と呼ばれる手法があります。

スクラム

スクラムはアジャイル開発で最もよく使われる手法です。スクラムではチーム内のコミュニケーションを大切にします。スクラムでは5つのイベントを経て成果物を作成します。スクラムでは成果物をインクリメントと呼びます。

5つのイベント

スクラムでは、スプリントプランニングスプリントデイリースクラムスプリントレビュースプリントレトロスペクティブの5つのイベントを行います。

アジャイルでは小さいサイクルを繰り返すことでシステム開発を進めていきますが、スクラムではその1サイクルをスプリントと言います。

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

XP(Extreme Programming)

XPは柔軟に仕様変更出来ることに重きを置いたアジャイルの開発手法です。開発者目線での方法論が多いことに特徴があります。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人のプログラマが協力して,一つのプログラムをコーディングする。

イ ソフトウェアの保守性を高めるために,外部仕様を変更することなく,プログラムの内部構造を変更する。

ウ 動作するソフトウェアを迅速に開発するために,テストケースを先に設定してから,プログラムをコーディングする。

エ 利用者からのフィードバックを得るために,提供予定のソフトウェアの試作品を早期に作成する。

正解と解説

正解は”イ”

リファクタリングでは外部仕様を変えずに、コードを分かりやすく変更します。コードのことを内部構造と表現しているだけですね。