アジャイル開発にも種類がある?一般的な開発手法・特徴・メリット・デメリットまとめ

近年、多くのエンジニアに求められることとして 「最短最速でシステムを作り上げる」 ということです。 どんなサービスもシステムも、それが世の中に出てくるタイミングは非常に重要です。 たとえ優れたシステムであったとしても、同業他社が先にリリースし、大々的に広告宣伝を行っていれば、自社製品は二番煎じという印象が強くなります。 また、技術の進歩や変化も早いことから 「できるだけ早くリリースして、その後機能追加などをしていく」 という方法が一般的になっています。 そんな時代だからこそ「アジャイル開発」というものが注目されています。 今回は、このアジャイル開発とその手法について見ていきたいと思います。

アジャイル開発とは

アジャイル開発とは

アジャイル開発とは[/caption] アジャイル(Agile)とは『すばやい』『俊敏な』という意味です。 アジャイル開発は 「計画→設計→実装→テスト」 といった開発工程を機能単位の小さいサイクルで繰り返す開発手法のことを指しています。 そのため、アジャイル開発ではそれぞれの工程を複数回行うことになります。 ちなみに一般的な開発(ウォーターフォール開発)は、計画・設計・実装・テストのそれぞれの工程において、その工程の作業が全て完了してから次の工程に作業を進めます。 そのため、一般的な開発は、計画・設計・実装・テストの全ての工程を1回ずつ行うことになります。

アジャイル開発の特徴

アジャイル開発は、機能単位ごとに開発を行っていくため、機能ごとに実装する順番を選ぶことが出来ます。 メインとなる機能の開発だけを行いリリースした後に、他の機能をブラッシュアップしていくことも可能です。 また、ウォーターフォール開発はあらかじめ全ての機能に関しての要件定義や基本設計を完了させてから製作やテストに入るので、後からの仕様変更に対応し難いです。 一方、アジャイル開発は機能ごとに設計を完成させるので、他の機能に関して余白を残したまま製作を進めることができます。 そのため、後からの仕様変更に対応しやすい開発手法であるということが出来ます。

アジャイル開発が向いているプロジェクト

アジャイル開発に向いているプロジェクトについて解説していきます。

要件がはっきりと決まっていないプロジェクト

アジャイル開発に向いているプロジェクトとして、要件がはっきりと決まっていないプロジェクトを挙げることが出来ます。 一般的な開発において要件がしっかりと定まっていないのに、プロジェクトを開始させるということは珍しくありません。 全体として、大まかな機能や方針が決まっていれば、後から細かな機能修正等を行うことは難しくないからです。 アジャイル開発の機能ごとに開発していくという特性は、こういったプロジェクトには向いています。

状況によって優先すべき機能が変動する可能性が高いプロジェクト

リリースされているサービスの中には、WEBサービス、アプリ、スマホゲームの様にビジネスを取り巻く環境が変わるペースが速いため、求めるシステムの仕様が頻繁に変わるシステムがあります。 そういったシステムの開発にもアジャイル開発が向いていると言えます。 アジャイル開発は、「計画→設計→実装→テスト」の1サイクルを2〜3週間で行います。 そのため、ライバルが多く常に市場からのニーズを意識して柔軟に対応をしていく必要があるサービスに対応しやすいです。

リリースを早めたいプロジェクト

アジャイル開発が向いているプロジェクトとして、リリースを早めたいプロジェクトも挙げることが出来ます。 これは、アジャイル開発の「機能ごとに実装する順番を選ぶことが出来る」というメリットを用いることで可能になります。

非エンジニアが多いプロジェクト

エンジニア同士のプロジェクトの場合、ある程度細かい機能について事前に話し合うことは容易です。 しかし、非エンジニアの場合、 「システムを作る上で必要な情報とそうでない情報」 の精査が難しく、会議や話し合いが長くなる可能性が高いです。 そのため、非IT企業に対してシステム開発を行う場合などは、比較的アジャイル開発が向いていると考えられます。 一方で非IT企業であっても、情報システム部門にある程度開発が出来る人が在籍しており、且つ現場の人間と細かく社内で打ち合わせをしてくれる場合などは、仕様が予めしっかりと決まっている事もあります。

アジャイル開発の手法について

アジャイル開発の手法について

アジャイル開発の手法について[/caption] ここでは、アジャイル開発の手法に関して代表的な方法を3つ紹介します。

スクラム開発

スクラム開発とは

スクラム開発とは、アジャイル開発の中で最も代表的な手法であると言えます。 スクラム開発とは、ラグビーのスクラムの様に10人くらいのチームになり、一丸となってコミュニケーションを取りながら開発を行う手法になります。 メンバーの役割は、プロダクトオーナー、開発者、スクラムマスターの3つがあります。 プロダクトオーナーは、プロジェクトの責任者です。 製作する機能の優先度を考えたり、プロジェクト全体のスケジュールや予算の管理を行います。 クライアントとの打ち合わせ等もプロダクトオーナーが担当するケースが多いです。 開発者はその名の通り、開発を行います。 開発と言っても、製作だけを行うのではなく、「計画→設計→実装→テスト」といった全ての工程を行うケースが多いので、幅広い知識と経験が求められます。 スクラムマスターは、プロジェクト全体の調整を行う役割です。 チーム全体を導き、作業の障害となりえる原因を取り除きます。

スクラム開発のメリット

スクラム開発のメリットは、大きく分けて3つです。 1つ目は、チーム内での課題が見つけやすくなるという点があります。 スクラム開発の特徴であるコミュニケーションを密に行うことにより、課題や目標を確認しながら開発を進められます。 2つ目のメリットは、正確な工数の見積もりができるという点です。 一般的なウォーターフォール開発と比較した際に、1スプリントで行う規模が小さくなります。 小さくなる分、開発に掛かる時間の想定がしやすくなり、結果的に正確な工数見積もりができます。 3つ目のメリットは生産性が向上できる点です。 短い期間でコミュニケーションを密に行い、開発を行うのでスケジュールの遅れや課題がすぐに浮き彫りになります。 そのため、スクラム開発では生産性の向上が見込まれるでしょう。

スクラム開発のデメリット

スクラム開発のデメリットは、大きく分けて3つです。 1つ目は、メンバーに求められるスキルが高くなることです。 スクラム開発は、多くても10人くらいの少人数チームで開発を行います。 少人数で開発を行うとメンバーの中に初心者の方がいた時の他のメンバーに掛かる負担がウォーターフォール開発に比べ大きいです。 また、それぞれのメンバーに「計画→設計→実装→テスト」の一通りの知見が求められます。 そのため、スクラム開発のデメリットとして、メンバーに求められるスキルが高くなるという点があります。 2つ目は、コミュニケーション能力が求められる点です。 先述している通り、スクラム開発はコミュニケーションを密に行いながら進めていきます。 そのため、コミュニケーションに苦手意識があるエンジニアにとってストレスになるでしょう。 3つ目は、プロジェクト全体のスケジュールが遅れる可能性がある点です。 スクラム開発は、機能ごとに開発を行って行き、その都度変更点があれば柔軟に対応していきます。 そのため、機能の変更に時間をかけすぎてしまうと、プロジェクト全体で見たときにスケジュールが遅れてしまっているということも十分に考えられるでしょう。 例えば、1つの機能を開発していく中で、過去に既に完了したはずの機能との矛盾点が出てきてしまった場合。 ・1つのデータベースのカラムに対して複数の箇所から更新がかかっていた ・利用者の権限的に想定していなかったユーザーのアクセスが必要になった ・データベース内のフラグが複数の別の意味合いで利用されてしまっていた など、現在開発中の機能の修正だけでは収まらないような場合に、プロジェクト全体の遅延に繋がる危険性があります。

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

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

エクストリーム・プログラミングとはXPと略されることが多い開発手法で、特徴はクライアントとのコミュニケーションを重要視する点です。 クライアントとのコミュニケーションを密に行うことにより、作成する機能の順番にクライアントの意見を反映しやすかったり、機能改修を行うタイミングを早めたりすることが出来ます。 また、ペアプログラミングという1つのプログラムを2人で共同開発するという特徴もあります。 エクストリーム・プログラミングでは、以下の3つの項目に価値をおいています。 〇コミュニケーション 先述した通り、チーム内だけでなくクライアントとのコミュニケーションも重要視しています。 〇シンプル アジャイル開発の特性上、後ほど修正する可能性が高いので単純な実装を心がけます。 〇フィードバック 機能を搭載してもユーザが使用しないということは珍しくありません。 しかし、ユーザが使用しない機能を搭載しても作業コストの無駄になるだけです。 そういったコストの無駄を減らす為にもユーザからのフィードバックを反映しながら開発していくことが大切です。

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

エクストリーム・プログラミングの最大のメリットは開発に要する時間を短くすることが出来る点です。 エクストリーム・プログラミングは、クライアントとのコミュニケーションを大切にしているため、開発の途中段階をクライアントが把握しやすい開発手法であると言えます。 そのため、エクストリーム・プログラミングではクライアントからの手戻りが少なくなるので、結果的に開発に要する時間を短く出来るでしょう。 特に、多少システムに関する知識があるクライアントの場合には 「〇〇の製品だとこんな機能があるよね。それをイメージしていたのに、思っていたのとは違った」 といった事も珍しくありません。 顧客満足度を高めるためにも、クライアントの意向に最大限沿った開発は非常に重要になるのです。

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

エクストリーム・プログラミングでは、ペアプログラミングを用いることにより、下記のようなデメリットが生じます。 〇単純作業において効率が下がる 単純作業を行うにあたって、2人で方向性を話し合う必要があまりありません。 ここでいう単純作業というのは、単純なSQL文の作成や設計書などの作成のことを指しています。 そういった作業は2人で話し合いを行いながら進めるよりも、1人で作業を行った方が効率がいいケースもあり得るでしょう。 そのため、単純作業において効率が下がるでしょう。 〇2人のスキル差が大きいと効率が下がる 2人で作業を行うにあたり、新人とベテランがペアを組むと両者にとってストレスがかかるでしょう。 新人の方にとっては「ベテランの方の足を引っ張ってしまい申し訳ない」と感じ、ベテランの方にとっては「新人の方が自分の期待値を下回っている」と感じてしまう可能性があります。 この様に、お互いの立場によって違うストレスが掛かることにより、作業効率が下がってしまいます。 〇相性 ペアプログラミングという特性上、どうしても「性格的に合わない相手」と組んでしまう危険性があります。 ある程度人数がいれば、個々人の相性はそれほど重要ではなくなりますが、ペアで進めていく上で相性は非常に重要になってきます。 間に入ってコミュニケーションを取ってくれる人がいれば状況が変わるのに・・・。 こういったケースが出てくるでしょう。

ユーザー機能駆動開発(FDD)

ユーザー機能駆動開発(FDD)とは

ユーザー機能駆動開発(Feature Driven Development)とは、ユーザー目線で価値のある機能を中心に開発を進める手法です。 ユーザー機能駆動開発を用いて開発を行う際は、ユーザーが求める機能を明確にしてから、計画を行い開発を行っていきます。

ユーザー機能駆動開発(FDD)メリット

ユーザー機能駆動開発のメリットとしては、ユーザーの求める機能から製作するため品質が高いシステムを開発しやすい点です。 ウォーターフォール開発では、全ての工程が完了してからサービスのリリースを行うため、ユーザーの意見を反映しにくいという一面があります。 一方、ユーザー機能駆動開発では、最初の機能のリリース以降もユーザーの意見を反映しながら開発を行うことが出来ます。 そのため、ユーザーにとって品質の高いシステムを開発することが可能です。

ユーザー機能駆動開発(FDD)デメリット

ユーザー機能駆動開発のデメリットは開発のスケジュールに遅延が発生しやすいという点です。 一般的な開発は企業の担当が企画をして開発を行います。 一方、ユーザー機能駆動開発では、ユーザーが求める機能を優先的に開発を進めるため、ユーザーの意見を調べる時間が必要になります。 その意見を調べる時間分、スケジュールに遅延が発生しやすいです。

短期間でも品質を落としたくないし、費用も上げたくない。そんなときはAMELAに相談を

短期間でも品質を落としたくないし、費用も上げたくない。そんなときはAMELAに相談を

短期間でも品質を落としたくないし、費用も上げたくない。そんなときはAMELAに相談を[/caption] 今回は、システム開発における開発手法であるアジャイル開発とその細かい手法について見てきました。 どんどんとスピードが求められてくる時代ではありますが、開発の質を下げてしまっては意味がありません。 AMELAでは、オフショア開発により、比較的安価でしっかりとした品質のシステム開発を行っています。 もしもこれまで開発を依頼してきて ・満足いかなかった ・思ったよりも納期がかかった などがあれば、是非ご相談頂ければと思います。