コンテンツにスキップ

アジャイル

ソフトウェア開発の現場では、開発の途中でお客様の要望が変わることが少なくありません。従来のウォーターフォールモデルでは、最初にすべての要件を決めてから順番に工程を進めるため、途中の変更に対応しにくいという課題がありました。

こうした課題を解決するために生まれたのがアジャイル(Agile)という開発の考え方です。アジャイルでは、短い開発サイクルを何度も繰り返しながら、少しずつ動くソフトウェアを作り上げていきます。この短い開発サイクルの1回分をイテレーションと呼びます。1回のイテレーションは通常1〜4週間程度で、その中で設計・実装・テストまでを一通り行います。

試験で出るポイント

イテレーションは「短い期間の開発サイクルを反復すること」です。過去問では「短い間隔でシステムの一部を開発・リリースし、それを繰り返していく手法」のように説明されます。

アジャイルマニフェスト ── アジャイルの根本にある価値観

Section titled “アジャイルマニフェスト ── アジャイルの根本にある価値観”

2001年に、アジャイル開発を実践する17名のソフトウェア開発者が集まり、アジャイルマニフェスト(アジャイルソフトウェア開発宣言)を発表しました。これはアジャイルの根本にある4つの価値観をまとめたものです。

重視することよりも
個人と対話プロセスやツール
動くソフトウェア包括的なドキュメント
顧客との協調契約交渉
変化への対応計画に従うこと

右側の項目にも価値はありますが、左側の項目をより重視するという宣言です。たとえば、完璧な設計書を作ることよりも、実際に動くソフトウェアを早く届けることを優先します。また、最初に決めた計画に固執するのではなく、変化する顧客の要望を素早く取り入れることを大切にします。

試験で出るポイント

「ドキュメントよりも動くソフトウェアを重視する」「変化する顧客の要望を素早く取り入れる」はアジャイルの特徴として頻出です。プロトタイピング(試作品による要件確認)とは異なる概念なので混同しないようにしましょう。

アジャイル開発では、要件を「機能仕様書」のような形ではなく、ユーザーストーリーという形で表現します。ユーザーストーリーとは、「〜として、〜したい。なぜなら〜だから」という利用者目線の短い文で、ソフトウェアに求められる機能を記述したものです。

たとえば、ECサイトの開発であれば次のようになります。

  • 「購入者として、商品をカートに入れたい。なぜなら、まとめて購入したいから」
  • 「管理者として、売上レポートを見たい。なぜなら、売れ筋商品を把握したいから」

ユーザーストーリーを使うことで、開発チームと顧客が「何のために、誰のために作るのか」を共有しやすくなります。

スクラム ── アジャイルの代表的な手法

Section titled “スクラム ── アジャイルの代表的な手法”

スクラムは、アジャイル開発で最も広く使われている手法(フレームワーク)です。ラグビーの「スクラム」のように、チームが一丸となって開発を進めることに由来します。

スクラムでは、開発をスプリントと呼ばれる固定の期間(通常1〜4週間)で区切り、スプリントごとに動くソフトウェアを作り上げます。スプリントはイテレーションの一種で、スクラムにおける呼び方です。

スクラムでは、チーム(スクラムチーム)を構成するメンバーに3つの役割を設けています。

役割担当する内容
プロダクトオーナー「何を作るか」の優先順位を決める責任者。顧客の要望を取りまとめ、プロダクトバックログを管理する
スクラムマスターチームがスクラムのルールを正しく実践できるよう支援する役割。障害の除去やチームの改善を促す
開発者実際にソフトウェアを設計・実装・テストするメンバー。自律的にタスクを進める

プロダクトオーナーは「何を作るか」を決め、開発者は「どう作るか」を決めます。スクラムマスターはチームの進行を助ける「サーバントリーダー」のような存在で、上司として指示を出す役割ではありません。

プロダクトバックログとスプリントバックログ

Section titled “プロダクトバックログとスプリントバックログ”

スクラムでは、作業内容を管理するために2つのリスト(バックログ)を使います。

プロダクトバックログは、製品に必要な機能や改善項目をすべてリストアップし、優先順位をつけて並べたものです。プロダクトオーナーが管理し、顧客の要望や市場の変化に応じて常に更新されます。

スプリントバックログは、1回のスプリントで取り組む作業項目をプロダクトバックログから選び出したリストです。開発者がスプリントの開始時に「今回のスプリントではここまでやる」と決めた作業の一覧になります。

試験で出るポイント

スクラムの問題では、3つの役割(プロダクトオーナー・スクラムマスター・開発者)と、2つのバックログ(プロダクトバックログ・スプリントバックログ)の違いが問われます。「プロダクトバックログ=製品全体の要件リスト」「スプリントバックログ=1スプリント分の作業リスト」と整理しましょう。

ふりかえり(レトロスペクティブ)

Section titled “ふりかえり(レトロスペクティブ)”

ふりかえり(レトロスペクティブ)は、スプリントの最後にチーム全員で行う振り返りの活動です。「今回のスプリントでうまくいったこと」「改善すべきこと」「次のスプリントで試してみること」などを話し合い、チームの働き方を継続的に改善していきます。

ふりかえりは、ソフトウェアの品質だけでなく、チームの進め方やコミュニケーションそのものを改善するための仕組みであり、アジャイル開発の重要な特徴の一つです。

XP(エクストリームプログラミング)

Section titled “XP(エクストリームプログラミング)”

XP(エクストリームプログラミング)は、アジャイル開発のアプローチの一つです。スクラムがチーム運営の枠組みに重点を置くのに対し、XPは開発の「技術的なプラクティス(実践手法)」に重点を置いています。

XPでは、以下のような特徴的なプラクティスが定められています。

通常の開発では、プログラムを書いてからテストを行います。しかしテスト駆動開発(TDD:Test-Driven Development)では、この順番を逆にします。まず「このプログラムはこう動くべきだ」というテストコードを先に書き、そのテストが通るようにプログラムを実装します。

テストを先に書くことで、開発者は「何を作るべきか」を明確にしてからコードを書くことができ、不具合の少ないソフトウェアを効率的に開発できます。

ペアプログラミングは、2人の開発者が1台のコンピュータを使って共同でプログラミングを行う手法です。1人がコードを書く「ドライバー」、もう1人がコードを確認しながらアドバイスする「ナビゲーター」の役割を交互に務めます。

2人で作業するため一見非効率に思えますが、コードの誤りをその場で発見できたり、知識やスキルの共有が進むといったメリットがあります。

リファクタリングとは、ソフトウェアの外から見た動作(機能や仕様)を変えずに、内部のプログラム構造を改善することです。

たとえば、同じ処理が複数の箇所にコピーされている場合、それを1つの部品(関数)にまとめるといった作業がリファクタリングにあたります。外から見た動作は変わりませんが、コードが読みやすくなり、将来の変更や修正がしやすくなります。

リファクタリングで重要なのは、「バグ修正」や「新しい機能の追加」とは異なるという点です。あくまでも既存の動作はそのままに、コードの品質(保守性・可読性)を高める作業です。

試験で出るポイント

リファクタリングは「外部から見た動作を変えずに、内部構造を改善する」が定義の核心です。「機能仕様を変えずにプログラムの内部構造を改善すること」と問われたら、答えはリファクタリングです。バグ修正や機能追加と混同しないようにしましょう。

継続的インテグレーション(CI)

Section titled “継続的インテグレーション(CI)”

継続的インテグレーション(CI:Continuous Integration)とは、開発者が書いたコードを頻繁に(1日に何度も)共有のリポジトリに統合し、そのたびに自動でビルド(プログラムの組み立て)やテストを実行する仕組みです。

従来の開発では、各メンバーが別々に作業を進め、最後にまとめて統合するため、統合時に大量の不具合が見つかることがありました。CIを導入することで、問題を早期に発見し、小さいうちに修正できるようになります。

アジャイルとウォーターフォールの比較

Section titled “アジャイルとウォーターフォールの比較”

アジャイルの特徴をより理解するために、ウォーターフォールモデルと比較してみましょう。

観点ウォーターフォールアジャイル
開発の進め方工程を順番に進める短いサイクル(イテレーション)を反復
要件の変更変更しにくい変更を歓迎する
成果物の確認開発の後半で確認スプリントごとに動くソフトウェアを確認
ドキュメント各工程で詳細な文書を作成動くソフトウェアを重視
向いているプロジェクト要件が明確で変更が少ないもの要件が変化しやすいもの

試験で出るポイント

アジャイルの特徴は「短期サイクルの反復」「変化への柔軟な対応」「動くソフトウェアの重視」です。XPはアジャイルの「アプローチの一つ」であり、アジャイル=XPではありません。スクラムもアジャイルのフレームワークの一つです。また、スクラムとCMMI(ソフトウェアの成熟度モデル)は全く別の概念なので混同しないようにしましょう。

アプリで問題を解こう!