エクストリームプログラミングとは
エクストリームプログラミングは、アジャイル開発における開発手法の1つです。略してXPとも呼ばれます。
アジャイル開発とは、最初に綿密な計画を立てず、臨機応変に進める開発方法のことです。設計・実装・テストを短期間で何度も繰り返しながら開発を進め、その1サイクルをイテレーションと呼びます。
しかし、闇雲に開発を進めてもうまくいきません。そこで、アジャイル開発の指針となる手法があります。
その代表格がスクラムです。エクストリームプログラミングはスクラムほどではありませんが、アジャイル開発手法として知られています。スクラムが勢いよく製品を作る手法であるのに対し、エクストリームプログラミングは継続的な成長に主眼を置いています。
エクストリームプログラミング5つの価値
エクストリームプログラミングでは、以下の5つの価値が提唱されています。価値というより、開発を行う上で重視すべきポイントとして認識するとよいでしょう。
- コミュニケーション
- プロジェクトが失敗する原因の多くはコミュニケーション不足です。エクストリームプログラミングでは開発チーム内だけでなく、顧客とのコミュニケーションも重視します。
- シンプル
- 最初の設計を極力シンプルにします。基本的な機能だけを盛り込み、そのほかの機能が必要になれば、その都度対応します。
- フィードバック
- ソフトウェア開発において、不要な機能を盛り込むのは大きな無駄となります。顧客からのフィードバックを得て、必要な機能を洗い出すことが大切です。
- 勇気
- 最初に綿密な計画を立てないという特性上、途中で大胆な変更が求められることがあります。
- 尊重
- チームで開発する以上、ほかのメンバーを尊重する姿勢は欠かせません。
エクストリームプログラミングのプラクティス
慣習となっている手法を、ビジネスではプラクティスと呼びます。エクストリームプログラミングにおいては、以下のプラクティスが存在します。
共同プラクティス
共同プラクティスは、エクストリームプログラミングに関わる全員を対象としたプラクティスです。以下の4つのプラクティスからなります。
- 反復
- 1つのイテレーション(設計・実装・テスト)が約1~2週間で終わるような開発とし、これを何度も繰り返しながら開発を進めます。
- 共通の用語
- 用語集を作成することです。これにより、コミュニケーションの齟齬を防止します。
- 開けた作業空間
- 開発チームと顧客間で密なコミュニケーションをとりやすく、作業に集中できる環境を構築します。
- 回顧
- ミスが再発しないよう、作業状況を明らかにし、過去のフィードバックを活かします。
開発プラクティス
開発プラクティスは、プログラマーなどの開発チームを対象としたプラクティスです。6つのプラクティスに分けられますが、ここでは代表的な4つを紹介します。
テスト後に実装を行う「テスト駆動開発」
テスト駆動開発とは、実装よりもテストを先に作成することです。それにより、求められる機能が洗い出され、シンプルな設計が実現します。
そのテストを通過することを目標に開発を行うことで、途中でのブレも最小限に抑えられるでしょう。テストはユニットテストと受け入れテストからなり、どちらも自動テストであることが望ましいです。
2人1組で行う「ペアプログラミング」
ペアプログラミングは、2人1組でプログラミングを行うことです。1人がコードを記述し、もう1人はそれを確認・補佐します。
記述しながら確認を行うことで細々とした問題をその場で解決できるメリットがあります。また、記述されたコードを把握している人物が2人いることで、その後の問題発生時にも迅速な対応が可能になるでしょう。
内部構造を整える「リファクタリング」
リファクタリングとは、完成したコードをわかりやすく書き換えることです。外部の動作を変えることなく、内部構造だけを変更します。同じ動作をするコードでも、わかりやすいものにすることで、メンテナンス性の向上や不具合発生頻度の低下が期待できます。
必要なコードだけを記述する「YAGNI」
YANGIは「You Aren't Going to Need It」の略で「今必要なことだけをする」という意味です。つまり、必要なコードのみを記述することを意味します。
開発時には、後に必要になる機能のことも考えて、あれこれと盛り込みたくなるでしょう。しかし、そうした思惑は外れることが多く、結果として無駄になります。今必要だとわかっていることに注力することが大切です。
管理者プラクティス
管理者プラクティスは、管理者を対象としたプラクティスです。開発が適切に進行しているのか把握し、チームで共有する必要があります。
特に、チームの負荷が大きすぎないか常に確認することが求められます。エクストリームプログラミングは短期間で集中して作業を行う方法であるため、過度な労働は避けなければなりません。
顧客プラクティス
顧客プラクティスは、その名のとおり顧客を対象としたプラクティスです。
エクストリームプログラミングでは、顧客も開発に携わるチームメンバーとして扱います。ビジネス的な視点から必要な機能を考え、開発の優先順位を付けるのが顧客の役割です。
具体的にはストーリー(要求機能のコンセプトを短い文章にしたもの)の作成やリリース計画を立案します。また、イテレーションごとに開発チームとともに受入テストを行い、求めた機能が実現しているか確認します。
ソフトウェアの開発スピードを高める方法
ソフトウェア開発には膨大な時間と労力が必要になります。そこで有効なのが、開発ツールの導入です。
開発ツールとは、ソフトウェア開発を支援するITツールの総称です。そのため、一口に開発ツールといっても、さまざまな種類があり、それらによって何が実現するかが異なります。
たとえば、ノンプログラミングで開発できるツールがあります。これにより、メンバーのスキルによって製品の品質が左右されづらくなるでしょう。
また、デバッグツールで問題を自動で発見することもできます。自動化できる作業をツールに任せることで、開発が効率化するでしょう。
エクストリームプログラミングを理解して、開発を進めよう!
エクストリームプログラミングは、アジャイル開発における手法の1種です。以下の4つのプラクティスからなります。
- ■共同プラクティス
- ■開発プラクティス
- ■管理者プラクティス
- ■顧客プラクティス
特に、開発プラクティスにおけるテスト駆動開発やペアプログラミングが、エクストリームプログラミングの特色といえるでしょう。
以上を踏まえ、エクストリームプログラミングで開発を進めましょう。