パソナについて
記事検索

エクストリームプログラミングとは?

エクストリームプログラミングについて、特徴やメリットについて解説していきます。

エクストリームプログラミングとは?

エクストリームプログラミングについて、特徴やメリットについて解説していきます。

スキルアップ

2020/06/05 UP

ソフトウェアの開発にはウォーターフォールやアジャイルなど、規模や要件などにあわせてさまざまな手法があります。

開発方法によっては効率や精度に影響が出てしまい、開発に遅延が生じてプロジェクトが炎上する一因となることも。そのような開発手法を改善したい場合、エクストリームプログラミングを導入すると効率が上がる可能性があります。

ここでは、エクストリームプログラミングについて、特徴やメリットについて解説していきます。

エクストリームプログラミングとは?

日本の大規模なソフトウェア開発の現場では、さまざまな開発手法がとられています。開発手法は大きく、ウォーターフォール型とアジャイル型に分けられます。エクストリームプログラミング(XP)は、このアジャイル型ソフトウェア開発手法のひとつです。

ウォーターフォール型

ウォーターフォール型開発は「企画→要件定義→設計→プログラム開発→テスト」の開発工程を順番に進めていく開発手法で、各工程が100%完了するごとに順次工程を進めていくことから、上から下まで一気に流れる滝の流れに例えて名付けられました。

ウォーターフォール型開発は、数ヶ月以上かかるような大規模なプロジェクトであっても全体のスケジュールが立てやすく、予算や人員の手配がスムーズに行えるというメリットがあります。

その反面、ひとつずつの工程がしっかりと完了するまで次の工程に移れず、万一進行してから不具合が発見された場合、戻って作業工程をやり直す必要があります。これがプロジェクトの遅延や炎上の原因となってしまう場合が多いのです

アジャイル型

これに対しアジャイル型開発は、プロジェクトを細かく区切り、要件定義からテストまでを反復して何度も行うことで、精度を高めていく手法です。小規模から大規模までさまざまなプロジェクトで活用でき、プロジェクトに変更が加わった場合もウォーターフォール型開発よりも柔軟に対応できます。

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

エクストリームプログラミングはアジャイル開発手法のひとつで、プロジェクトが途中で変更されることを前提に、プロジェクト全体を非常に細かな部分に分け、ひとつずつの要素の開発サイクルを短くして開発を進めます。

柔軟性に優れており、スピード感と変化に対応することを重要とした開発手法で、素早いリリースを必要とする小規模な開発のため、10人程度の少人数でのチームを組む場合に最適な手法といわれています。

エクストリームプログラミングの5つの価値

エクストリームプログラミングを用いて開発を行う上で、重視すべき点として、5つの価値が定義されています。それぞれの要素がなにを指しているのか、具体的に見ていきましょう。

コミュニケーション

ソフトウェア開発で重要なのはコミュニケーションであり、失敗の要因の多くはコミュニケーション不足にあります。チーム内のコミュニケーションだけでなく、顧客とのコミュニケーションも大切です。プロジェクトに生じた要件や状況の変化を逐一共有し、素早く対応するために、相互のやり取りを密にすることが開発の成功のために重要な要素を占めます。

シンプル

素早い開発の進行と柔軟性を維持するため、設計はシンプルにします。その上で機能が必要になるなどの状況の変化に合わせて、設計に変更を加えていきます。最初から複雑な設計を行うと、変更を加える際に影響を受ける部分が増えるだけでなく、チーム内での共有が難しくなるため、顧客を含めたコミュニケーションに齟齬が発生します。

エクストリームプログラミングはスピードと柔軟性が大切であるため、すべてにおいて極力シンプルを心がけます。

フィードバック

最初に決めた方法がずっと正しいとは限らないため、顧客からのフィードバックをもらい、適宜修正していきます。エクストリームプログラミングは、このフィードバックと対応の繰り返しを細かなサイクルで繰り返すことによって、成果物の精度を高めるのです。

顧客から適切なフィードバックを受けるためにコミュニケーションが、素早いフィードバック対応するためにはシンプルな設計が必要となります。

勇気

最初に綿密な計画を立てないという特性上、途中で大胆な変更が求められることがあります。その場合、すでに開発してきたものに対して、思い切った取捨選択や変更の勇気を持たなければならないことも。

行動する時は、強い意志と勇気が必要であり、勇気を持って行動することで解決策や信頼が強化されることに繋がります。そのため、積極的に意見を出し状況の打開をするための勇気が大切な要素となるのです。

尊重

チームで開発を行う上で、他のメンバーを尊重することは重要です。経験量に関係なく、積極的な意見交換や提案を行い、考えや行動を尊重する姿勢を持つことは、お互いのモチベーションの向上にも繋がり、生産性を高めます。

エクストリームプログラミングの4つのカテゴリ

エクストリームプログラミングを現場で実践するためには、前述の5つの価値を19のプラクティス(慣習となっている手法)として活用します。このプラクティスは、要素ごとに4つのカテゴリに分けることができ、それぞれについて理解を深めることでエクストリームプログラミングを効率的・効果的に採用することができます。

ここからは、それぞれ4つのカテゴリについて、具体的に解説していきましょう。

共同プラクティス

エクストリームプログラミングに関わる、開発チームと顧客全員を対象としたプラクティスです。

・反復

開発を細かな反復から構成します。開発期間を、1〜2週間程度の短期間(イテレーションと呼びます)に区切り、このイテレーションごとに設計・実装・テストを繰り返して、細かな部品をリリースしていくことで徐々にシステムの構築を行います。

・共通の用語

開発に用いる用語集を作成し、チーム全員で共有することで、概念や見解の不一致が生じないようにします。

・開けた作業空間

コミュニケーションが取りやすく、かつ作業に集中できる雰囲気と環境を作ります。また、頻繁に細かいフィードバックを行う必要があるため、可能な限り、顧客を含めて作業空間を構成します。

・回顧

状況の明確化と把握、フィードバックと対応を迅速に行い、細やかな振り返りが可能な環境と体制を構築します。

開発プラクティス

プログラマなどの開発チームを対象としたプラクティスです。

・テスト駆動開発

実装の前にテストを作成し、実装はテストをパスすることを目標として行います。先にテストを作成することで、必要とされる機能が明確化され、シンプルな設計に繋がります。

・ペアプログラミング

二人一組でプログラミングを行います。ひとりはコードを書くことに集中し、もうひとりがコードをチェックしながら仕様書の確認や全体を見通した構造を考え、プログラミングのナビゲートの役割を担う手法です。定期的に役割を交代しながら開発を進行し、ツーマンセルでプログラミングを進めることによって、問題解決の時間を短縮しながら常時コードレビューが行えます。さらにコードの詳細を理解したメンバーが二人以上居ることでコード共有が容易となるメリットもあるのです。

※ペアプログラミングについては、こちらの記事もあわせてご確認ください。

・リファクタリング

完成済みのコードでも随時改善の処置を行い、内部構造の見通しを良くして洗練されたものにしていきます。

・ソースコードの共同所有

制作者が誰であっても、開発チーム全員の共有物とみなし、断りなく修正を行えるものとします。代わりにすべてのコードに対し、全員が等しく責任を担います。

・継続的インテグレーション

イテレーション内でコードが完成するたびに、すぐに既存のコードと結合テストを行い、問題点や改善点を検証します。一日に1度以上の結合テストを行うほか、全体のコンパイル及び自動テストの実行のために、継続的インテグレーション専用のマシンを用意することが推奨されます。

・YAGNI

You Aren't Going to Need It.(必要なことだけ行う)の頭文字です。先取りして実装を複雑化させること回避し、無駄な機能は削除して今必要とされている機能だけのシンプルな実装を心がけます。これによって柔軟性を確保しながら、シンプルで安定性の高いコードを作成できます。

管理者プラクティス

プロジェクトの管理者を対象としたプラクティスです。開発が適切に進んでいるかを把握、共有して、チームの負荷が大きすぎないかを適宜確認することが求められます。

・責任の受け入れ

最終的な開発の責任が責任者にあることを受け入れます。

・援護

チームのメンバーの不足部分を補助し、開発の援護を行います。

・四半期ごとの見直し

四半期ごとに状況を見直し、開発の進行を調整します。

・ミラー

現在の全体状況を把握し、チームに共有することで、チーム全体がどこに居るのかを理解することを知らせます。

・最適なペースの仕事

チームの負荷が大きすぎる場合、状況を見て進行を調整します。

顧客プラクティス

顧客を対象としたプラクティスです。エクストリームプログラミングでは顧客もチームの一員として捉え、開発の優先順位を付けるのは顧客の役割であると位置づけています。

・ストーリーの作成

必要とする機能のコンセプトを、ストーリーカードと呼ばれるカードに短い文章で記述します。そのカードを元にして、開発者・責任者・顧客の全員を含むチームでミーティングを行い、実装の詳細を決定します。

・リリース計画

どのストーリーをどのイテレーションの対象とするのか、リリースの計画を主体となって積極的に提案し、チーム全員の合意の上で承認を行います。

・受け入れテスト

イテレーションごとに顧客の立場から受け入れテストを行い、ストーリーカードに記述した内容が実装されているか確認し、システムが希望にそっているかチェックします。万一不満がある場合、指摘する義務を負います。

・短期リリース

完動するソフトウェアを2〜3週間から最長でも2〜3ヶ月という短い期間でリリースします。

エクストリームプログラミングのメリット

このように、顧客と開発チームが二人三脚で短期間の開発に集中するエクストリームプログラミングですが、大きなメリットは「柔軟性」「問題の早期解決」「開発期間の短縮」の3つが挙げられます。

柔軟性がある

プログラミング作成の過程で顧客とのやり取りを頻繁に行うため、要望や仕様変更に柔軟に対応できます。これはエクストリームプログラミングの最大の特徴でありメリットです。

短期間でリリースする小規模なソフトウェアの場合、ある程度のイメージはあっても明確かつ固定化された要件定義が難しいこともあります。そのため、エクストリームプログラミングでは柔軟性を担保して全体像のイメージを共有しながら進めていきます。

問題の早期発見、解決ができる

従来の手法では、短期間でリリースを行う場合、テスト不十分による機能不足や致命的なバグの発生を避けられませんでした。

しかし、エクストリームプログラミングであれば、ペアプログラミングを始めとしたコードの共有や、細かなテストと実装を繰り返し、フィードバックを常に行うなど、問題の早期発見と解決が容易になるような仕組みが取り入れられています。

開発までの時間が短縮される

シンプルな設計を元にスピード感のある開発を進められるため、開発完了までの時間が短縮できます。結果として2週間から長くても3ヶ月程度の短期間でソフトウェアのリリースが可能になります。

エクストリームプログラミングを開発に役立てる!

エクストリームプログラミングを開発に役立てる!

エクストリームプログラミングは、導入できる条件が限られますが、ビジネス上の要求が刻一刻と変化したり、開発難易度が高く柔軟性が求められたりする開発に向いています。従来の開発手法ではどうしても効率化ができない場合、思い切ってエクストリームプログラミングを用いることで、開発の環境や状況を改善できる可能性は大いにあります。

エクストリームプログラミングは、チーム全体が細かなプラクティスにそって頻繁な反復を行い、緻密なコミュニケーションを取ることによる個人の責任と勇気を重んじた人間中心の開発手法です。少数精鋭のチームで素早い開発を行いたい場合、ぜひ一度試してみてはいかがでしょうか。

【執筆者】
太田勇輔(おおた・ゆうすけ)

【保有資格】
ネットワークスペシャリスト
情報セキュリティスペシャリスト

【プロフィール】
インフラエンジニアとして官公庁や銀行などのシステム更改をメインに10年従事した後、IT関連ライターとして活動中。プログラミング、ネットワーク、セキュリティなどの解説記事を中心に執筆している。