こんにちは!

PRIME ORDERです。

システム開発を依頼しようとお考えの企業担当者からすると、「良いシステム」を「納期通り」に「不具合なく稼働する」よう納品してもらえれば開発手法は問わないという思う方も多いかもしれません。

しかしながら、作りたいシステム、求める要件によってシステム開発会社選びをするときに得意としている開発手法が何かを理解しておくことは大変重要です。

もちろん開発手法以前にシステム開発会社の営業担当がとても好印象だった、費用が安かったなど様々な軸でシステム会社選びは行われると思いますが、開発手法をしっかり理解しないまま発注をして失敗したという声をよく伺います。

現在はアジャイル開発と呼ばれる開発手法をよく聞くかと思いますが、実際どんな開発手法なの?と疑問を持たれる方も多いのではないでしょうか?。多くのシステム開発会社でアジャイル開発が利用されるようになりましたが、、今主流になっている開発手法だからこそ、皆さんの中にもこれからアジャイル開発を導入したいと考えている人が多いのではないでしょうか。

PRIME ORDERは月額制アジャイル開発サービスを提供しています。

しかし、世間ではアジャイル開発と言われても具体的にどのような手法なのか理解できていないままアジャイル開発という言葉だけで発注を決めてしまって失敗したというケースもあるようです。PRIME ORDERでは、アジャイル開発の概念に十分に理解、共感いただいたお客様にサービスをご提供しています。発注者が開発手法を理解していることは、プロジェクトの成否に関わる重要事項と考えるからです。

今回はアジャイル開発の概要や開発手法について解説し、加えてよく比較検討される従来型の開発手法のウォーターフォール開発との比較もしていきます。

そもそも開発手法って何?

開発手法とは、システム開発の工程を計画、制御することで効率的に作業を進めるための枠組み(フレームワーク)を指します。

今日までに様々な開発手法が考案されてきましたが、それぞれの開発手法には、メリットやデメリットがあります。プロジェクトの種類や状況に応じて最適な開発手法を選択することが、プロジェクトが成功するかの要因の1つになってきます。

アジャイル開発とは?特徴と手法

アジャイル開発 開発体制

発注者と開発者がコミュニケーションを重ねながら、システム開発を進めていく開発手法で、1990年代中頃から、発注者と開発者が緊密な協力関係を結ぶソフトウェアの開発手法が台頭し始め、現在「アジャイル開発」という名で広く知られる開発手法として提唱されています。

なぜアジャイル開発がこれだけ広まっているのか、まずはアジャイル開発の特徴と手法についてご説明します。

アジャイル開発の特徴

アジャイル開発のアジャイルには「素早い」「機敏」などの意味があります。これは「ウォーターフォール開発などと比較して」素早いとの意味を持っている開発論だということです。

大きな特徴として、「要求分析~テスト(リリース)」のサイクルを1週間~1ヶ月程度の短い単位で繰り返すことが挙げられます。従来のウォーターフォール開発に慣れている人は「要件定義や設計を繰り返すなど考えられない」と感じるかもしれません。しかし、アジャイル開発では開発やテストを含め、これらを何度も繰り返す点が特徴なのです。

ただ、アジャイル開発でもっとも注目したいポイントは「短いサイクルで」という部分です。例えばウォーターフォール開発の要件定義は数ヶ月かかるケースもありますが、アジャイル開発では1週間程度で小さい範囲の要求分析を完了します。その部分に対して「設計」「開発」「テスト」「リリース」を行い、リリースが完了した段階で次の要件を定義していくのです。

なお、テスト完了やリリースをするたびにクライアントにプログラムの確認をしてもらいます。そして、確認の過程で「思っていたのと異なる」「業務要件が変更になった」などの課題が発生していないか確認してもらうのです。何かしらの課題があれば、次の要件定義で吸収していく方向へと持っていきます。

そもそもプロジェクト進行中に要求変更が発生するのはあたりまえのことです。ですが、ウォーターフォール開発という手法はこの変更への対応が大変不向きでした。アジャイル開発では、こうした要求変更に柔軟に対応できるため、顧客自身が事業や業務の不確実性を自覚している場合にもっとも適した開発手法と言えます。

アジャイル開発の代表的な手法

アジャイル開発と一言でいっても様々な実践手法がありそれぞれの特色があります。代表的なものとしては、XP(エクストリーム・プログラミング)やスクラム開発があります。今回はそれらの手法の中でも代表的なものを3つピックアップしてご説明します。


スクラム開発

スクラム開発はアジャイル開発の中でも最も利用されている手法です。「スクラム」はラグビーのスクラムから取られていて、チームで連携して開発していく手法を指しています。

スクラム開発で重要視されるのは、 チームメンバーのコミュニケーションです。メンバー内で十分なコミュニケーションを取り、お互いにフォローしあったり役割分担を見直しながら開発を進めます。「朝会」「夕会」などを開催し、タスクの共有などをするのが一般的です。 

なお、コミュニケーションが面倒になるとスクラム開発は失敗してしまいます。チームメンバー全員が「コミュニケーションをとらなければならない」との意識を持って開発に臨まなければなりません。


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

エクストリームプログラミングでは開発中の柔軟な仕様変更を許容します。ウォーターフォール開発にはもはや必要な変更は受け入れられないものですが、エクストリームプログラミングでは可能な限り開発の現場で吸収するのです。

一般的にエクストリームプログラミングをする場合は、クライアントからも開発メンバーとして参画してもらいます。そのクライアントに積極的にプログラムの状況を確認してもらい、意見をもらいながらすぐに方向修正するなど対応していくのです。


ユーザー機能駆動開発

ユーザー機能駆動開発(FDD)は、ユーザー目線で品質の高いプログラムを開発する手法です。プログラムの開発に「ユーザーが求めているものが何か」を明確に定義して、それを踏まえプログラム開発ができるような体制を整えていきます。

こちらの開発手法の場合は、基本的にクライアントが利用できる状態のプログラムを定期的に提供していきます。そして、「本当にお客が求めるプログラムを作れているか」という観点から方向性を評価し、もしズレがあれば修正していきます。定期的にプログラムを提供し、そのプログラムについて評価を受けるという点がユーザー機能駆動開発(FDD)の特徴とも言えます。


アジャイル開発のメリットとデメリット

アジャイル開発のメリット・デメリットをまとめると、以下のような点が挙げられます。


アジャイル開発のメリット

・要求変更に柔軟に対応でき、ユーザーのニーズに最大限に応えられる

開発途中で発注者と開発者がコミュニケーションを取りながら、フィードバックして進むため、発注者の意見を取り入れやすい

・不具合が発覚しても解消が早い

ウォーターフォール型開発で不具合が発覚すると、設計書を全て作り変える必要があるために、要件定義や設計の段階まで戻って再度1から設計をやり直すケースが多いが、アジャイル開発は、機能ごとの部分的な設計しか行なっていないため、設計からやり直すにしても工数が少なく済む


アジャイル開発のデメリット

・全体スケジュールのコントロールが難しい

・全体の進捗状況の把握が難しい

イテレーションによって発注者のニーズに応え改善を繰り返し、追加や変更が重なってゆくため、スケジュールのコントロールや全体の進捗の把握が難しくなる場合がある。


アジャイル開発とウォーターフォール開発の違い

アジャイル開発とウォーターフォール開発にはどのような違いがあるのか4つの観点から比較してみます。

開発工程の違い

アジャイル開発は「要求分析~テスト」の工程を短く区切り、この工程を何度も繰り返します。それに対して、ウォーターフォール開発では基本的には1回ずつしかありません。

これが意味するのは、ウォーターフォール開発の場合1回で要件を全て洗い出さなければならないということです。アジャイル開発の場合は繰り返しの中で要件を洗い出せれば良いですが、ウォーターフォール開発ではそうもいきません。

作成物の違い

アジャイル開発は、極論ですが実際に動作するプログラムが仕上がってれば良いと考えられます。クライアントに実際に動作するプログラムを見せながら案件を進めますので、ドキュメントがなくてもクライアントの同意を得られるケースが多々あります。必要に応じてプログラムの補足説明としてドキュメントを作成するだけで、十分なケースがあるぐらいです。

それに対してウォーターフォール開発は、ドキュメント作成がほぼ必須です。工程ごとに「要件定義書」「基本設計書」など様々なドキュメントを作成し、そのドキュメントをもとにクライアントの承認を受けます。承認がなければ次工程に進めませんので、ドキュメントは作るしかないのです。

生産性の違い

アジャイル開発の中でも特にスクラム開発では、チームメンバーのコミュニケーションが多く求められています。そのため、コミュニケーションの過程においてスキル不足などに気づきやすすく、生産性の改善がしやすい特徴があります。スキルが不足しているメンバーのフォローなどができるのです。

しかし、ウォーターフォール開発は要員を決めてとにかく開発していきます。個人任せになってしまうケースも多く、スキル不足がなどの問題があっても気づきにくいのが現実です。結果、スキル不足から生産性が落ちてしまい、スケジュールに影響する可能性があります。

人材育成の違い

アジャイル開発はメンバーそれぞれが幅広く開発業務を幅広く担当します。そのため、特定の業務に詳しい「 スペシャリスト」が育ちにくく、業務を幅広く理解する「オールラウンダー」が育ちやすい傾向にあります。

それに対してウォーターフォール開発では、それぞれが開発業務の中でも専門分野を持って担当します。そのため特定の業務に詳しいスペシャリストが育てやすくなっています。 

どのような人材が育つべきであるのかは一概には表現できません。大人数の場合はスペシャリストが多い方が良いと考えられますし、少人数の場合はオールラウンダーが多い方が良いと考えられます。人材育成の違いを理解し、状況に応じてどちらの手法が良いかは検討すると良いでしょう。

まとめ

今までのウォーターフォール開発とは異なり、アジャイル開発は短期間で小さな単位のプログラム開発を繰り返すため、クライアントと接する機会も多くなり、方向性を定期的に修正しながら求められているシステムを完成させることができます。。

アジャイル開発の中にも「スクラム開発」や「エクストリームプログラミング」、「ユーザー機能駆動開発」などいくつかの開発手法がありますが、アジャイル開発にはチームのコミュニケーションを重要視したスクラム開発がよく利用されます。「アジャイル開発=○○という開発手法」との方程式が成り立つわけではありませんので、その点は抑えておくとなお良いでしょう。

アジャイル開発が全てのプロジェクトにマッチするということはありません。プロジェクトの性質によってはアジャイル開発ではない従来型の開発手法がフィットする場合もあります。そして近い未来にアジャイル開発とはまた違った新しい開発手法が生み出されることもあるでしょう。システム開発をするとなった時に「より自分たちのプロジェクトにフィットした開発方法はなんだろう?」と考えてみてはいかがでしょうか。

PRIME ORDERのアジャイル開発の考え方

PRIMEORDERのアジャイル開発

アジャイル開発は、技法として語られることも多いですが、厳密には意識や態度であると定義されています。これをやっていればアジャイル、という厳密な正解はないため、アジャイル開発とひとえに言っても様々な取り組み方があります。

もし、発注者としてシステム開発会社にアジャイル開発を依頼する場合には、その会社のアジャイル開発がどのようなものなのか、しっかりと確認をすることが大切です。

たとえばわたしたちPRIME ORDERのアジャイル開発の特徴は次の通りです。

・要件定義は行いません。お客様の言葉で実現したいことを抽象度高めにリストアップしていきます。実現の選択肢に柔軟性をもたせます(ユーザーストーリー)

・4週間毎に、行うべき作業を宣言し、あらかじめお客様と認識統一を図ります。(イテレーション)

・スケジュール、コスト、品質、機能数のすべてを固定できないことを、お客様に十二分に理解いただいています(トレードオフスライダー)。

・4週間の成果としてプログラムのデモを行うとともに、お客様が自由に触って試せる環境にリリースいたします(ショーケース)。

・特定のメンバーに役割と責任を集中させず、チームとしてプロジェクトに当たります。情報の透明性を保つため、お客様とのお打ち合わせにエンジニアを始めとするメンバーが同席します。(自己組織化されたメンバー/成果責任と権限移譲)

・チームメンバー全員が、プログラムの完成ではなくプロジェクトの成功を目標にします。(インセプションデッキ)

・1週間単位で小さく作るを繰り返すことで、今取り組むべき重要項目にフォーカスして開発を進めます。(ウィークリーチェックイン/ジャストインタイム分析)

これらはあくまで一例で、それ以外にもいろいろな工夫をしています。アジャイル開発を採用している他の開発会社すべてが上記を取り入れているとは限りません。ただ、アジャイル開発について共通に言えることは、顧客と開発チームのコミュニケーションを重視していることです。開発会社の担当者がしっかりとアジャイル開発を説明してくれるかどうか、チェックすることが大切です。中には、ドキュメントを作らない、スケジュールを出さない、それをアジャイル開発だと謳っている質の低い開発ベンダーも散見されます。そのようなパートナーを選んでしまわないよう、十二分にコミュニケーションを取ってみてください。