エクストリーム
プログラミング(XP)は、
ソフトウェア開発におけるアジャイル手法の一つで、
ソフトウェア品質の向上と変化する顧客の要求への迅速な対応を目的としています。この手法は、短い開発サイクルで頻繁に
ソフトウェアをリリースし、生産性を高めることを重視しています。また、開発プロセスにおけるチェックポイントを設け、新しい顧客の要求を柔軟に取り入れることを目指しています。
XPの特徴は、ペア
プログラミング、徹底したコードレビュー、ユニットテストの実施、必要となる機能のみを実装する「YAGNI(You Aren't Gonna Need It)」の原則、フラットな管理構造、コードのシンプルさと明快さ、顧客との頻繁なコミュニケーションなどが挙げられます。これらのプラクティスは、従来の
ソフトウェア開発手法の良い点を「極端な」レベルまで引き上げるという考えに基づいています。
歴史
XPは、1990年代後半に
ケント・ベックが
クライスラーの給与計算システム(C3)
プロジェクトで開発しました。ベックは1996年にC3
プロジェクトのリーダーとなり、既存の開発手法を
改善し、その成果を1999年に書籍『エクストリーム
プログラミング』として出版しました。C3
プロジェクトは、2000年に
クライスラーがダイムラー・ベンツに買収された際に中止されました。
XPのプラクティス自体は以前から存在していましたが、XPではそれらを極限まで徹底します。例えば、テスト駆動開発(TDD)は1960年代初頭のNASA
マーキュリー計画でも使用されていましたが、XPではより細かく、機能の小さなセクションごとに自動テストを記述します。
起源
1990年代の
ソフトウェア開発は、
オブジェクト指向プログラミングの普及とインターネットの台頭によって大きく変化しました。これにより、市場投入のスピードと
企業の成長が重視されるようになり、急速に変化する要件に対応する必要性が高まりました。
クライスラーのC3
プロジェクトは、オブジェクト技術の最善の利用方法を模索するために、SmalltalkとGemstoneを使用して開始されました。
ケント・ベックはシステムのパフォーマンスチューニングのために招かれましたが、開発プロセスに関する問題点も指摘しました。そこでベックは、
ウォード・カニンガムとの共同研究に基づいて、開発プラクティスの変更を提案しました。ロン・ジェフリーズも
プロジェクトに加わり、XPのプラクティスの定着を支援しました。
XPの原則とプラクティスに関する情報は、カニンガムのWikiWikiWebでの議論を通じて広まり、多くの開発者がアイデアを議論し、拡張しました。また、1999年頃には、XPのウェブサイトを通じて情報が提供されました。
現状
XPは、1990年代後半から2000年代初頭にかけて広く採用されましたが、当初の厳格なプラクティスは、現場の実情に合わせて緩和されることもありました。例えば、毎日の統合テストを週ごとのスケジュールに変更したり、テストの頻度を減らしたりするなどです。一方で、XPは進化を続け、2019年時点では他のアジャイルプラクティスを取り入れ、現場の経験に基づいて
改善を重ねています。
ケント・ベックは、2004年に書籍『エクストリーム
プログラミング』の第二版を出版し、より多くの価値とプラクティスを追加し、基礎プラクティスと周辺プラクティスを区別しました。また、持続可能な
ソフトウェア開発の理論も取り入れられ、チームが混乱に陥らずに成長できる理由を説明しました。
コンセプト
ゴール
XPは、より高品質な
ソフトウェアをより生産的に開発するために人々を組織化する手法です。XPでは、長い開発サイクルではなく、短い開発サイクルを繰り返すことで、要件変更のコストを削減します。また、変更を
ソフトウェア開発
プロジェクトの自然で避けられない側面と捉え、計画を重視します。
アクティビティ
XPでは、コーディング、テスト、傾聴、設計の4つの基本アクティビティを重視します。
コーディング: XPでは、コードをソフトウェア開発の最も重要な成果物と捉え、コードを通じて問題を解決し、プログラマー間のコミュニケーションを促進します。
テスト: テストはXPの中核であり、ユニットテストと受け入れテストを重視します。ユニットテストはコードの個々の機能が意図通りに動作するかを検証し、受け入れテストは顧客の要件を満たしているかを検証します。
傾聴: プログラマーは、顧客の要求を注意深く聞き、技術的な側面についてフィードバックを提供します。
設計: XPでは、シンプルさを重視し、システムの複雑化を防ぐために設計構造を作成します。良い設計は、システム内の依存関係を減らし、変更が他の部分に影響を与えないようにします。
価値
XPでは、コミュニケーション、シンプルさ、フィードバック、勇気、リスペクトという5つの価値観を重視します。
コミュニケーション: XPでは、文書ではなく、口頭でのコミュニケーションを重視します。共通の理解を促し、開発チーム内での知識の共有を促進します。
シンプルさ: XPでは、最もシンプルな解決策から始めることを推奨します。機能は後から追加できます。これは、「YAGNI」の原則に基づいています。
フィードバック: XPでは、システム、顧客、チームからのフィードバックを重視します。フィードバックを通じて、問題点を早期に発見し、改善につなげます。
勇気: XPでは、必要に応じてコードをリファクタリングし、変更に柔軟に対応する勇気を持ちます。また、不要になったコードを削除する勇気も必要です。
リスペクト: XPでは、チームメンバー同士がお互いを尊重し、高品質なソフトウェアを目指します。これにより、高いモチベーションとチームへの忠誠心を維持します。
ルール
XPには、計画、管理、設計、コーディング、テストに関する多くのルールがあります。これらのルールは、XPを効果的に実践するためのガイドラインを提供します。例えば、コードはすべてユニットテストを持ち、すべてのテストに合格する必要があります。また、バグを発見した場合、修正する前にテストを書くことが推奨されます。
原則
XPの原則は、フィードバック、シンプルさを前提に、変化を受け入れるという3つに基づいています。
フィードバック: XPでは、フィードバックを迅速かつ頻繁に行うことを重視します。これにより、早期に問題を発見し、
改善することができます。
シンプルさを前提に: XPでは、すべての問題を可能な限りシンプルに扱います。将来の要件を考慮するのではなく、現在のニーズに焦点を当てます。
変化を受け入れる: XPでは、変化を避けずに受け入れ、柔軟に対応することを重視します。
プラクティス
XPには、以下の12のプラクティスがあります。
詳細スケールフィードバック
ペア
プログラミング
計画ゲーム
テスト駆動開発
チーム全体
継続的プロセス
継続的インテグレーション
リファクタリング
小さなリリース
共有理解
コーディング規約
ソースコードの共同所有
シンプル設計
システムメタファー
プログラマーの福祉
持続可能なペース
物議を醸している側面
XPには、オンサイト顧客による非公式な変更要求が柔軟性を高めるという利点がある一方で、コストのかかる手直しや
プロジェクトのスコープ・クリープにつながる可能性があるという批判もあります。また、要件を自動受け入れテストとして表現すること、ペア
プログラミング、事前の大規模設計を行わないこと、顧客担当者が
プロジェクトに付き添うことなど、多くの議論の余地のある側面があります。
スケーラビリティ
ThoughtWorksは、最大60人の分散型XP
プロジェクトにおいて成功を収めています。2004年には、大規模で分散したチームでの作業を目的とした産業用エクストリーム
プログラミング(IXP)が導入されました。
分離可能性と対応
2003年には、書籍『Extreme Programming Refactored:The Case Against XP』が出版され、XPのプラクティスが相互依存的であるため、すべてのプラクティスを採用できない組織ではプロセス全体が失敗する可能性があると批判されました。しかし、XPは現在、必要な目標が満たされているのであれば、プラクティスの変更を受け入れています。また、他の方法論と組み合わせることも試みられています。
批判
XPは、初期の話題性とともに、ペア
プログラミングや継続的設計などの論争の的になっている教義のために、多くの批判を受けてきました。主な批判点としては、方法論が人によりけりであること、成果物が定義されていないこと、構造と必要な文書が欠如していること、上級レベルの開発者にしか適用できないこと、不十分な
ソフトウェア設計を包含していること、顧客が頻繁に会議に参加する必要があること、採用に多くの文化的変化が必要なこと、などがあります。また、詳細な要件文書がないため、スコープ・クリープのリスクが増大するという指摘もあります。
まとめ
XPは、
ソフトウェア開発におけるアジャイル手法の一つで、変化する顧客の要求に柔軟に対応し、高品質な
ソフトウェアを効率的に開発することを目的としています。多くの議論や批判があるものの、現代の
ソフトウェア開発において重要な役割を果たしています。