超初心者が解説するアジャイル開発

はじめに

ライフ事業部プラットフォーム部の川久保です。
中途で全く違う業界から来たので最初は「アジャイルって何?初めて聞いた。」というアジャイルのアの字もわかっていなかった状態からのスタートでした。出てくる用語を理解するのがやっとでしたが、トレーニングを終えた時にはアジャイルやスクラムの基礎的な部分を理解できたと感じています。 その中で今回は「アジャイル開発とは」ということでご紹介します。私のように初心者の方のお役に立てれば幸いです

アジャイルソフトウェア開発とは

アジャイルソフトウェア開発(アジャイルソフトウェアかいはつ、英: agile software development) は、ソフトウェア工学において迅速かつ適応的にソフトウェア開発を行う軽量な開発手法群の総称です。 Agileとは英語で「素早い」、「機敏な」、「頭の回転が速い」といった意味です。 具体的には、イテレーション(スプリント)と呼ばれる短いタイムボックスで要件定義・設計・実装・テストの反復を繰り返し、2週間~2か月というサイクルでリリースし、サービス提供をします。
アジャイルには様々な開発手法が存在します。以下は各開発手法の共通の特徴になります。

  • 反復(イテレーション)
  • 頻繁なコミュニケーション
  • 顧客思考(ユーザー思考)
  • シンプルさ(無駄がない)

「え、何を言っているの?」と私自身思いましたが、アジャイルを学んでいけばこの疑問は解消されます。

なぜアジャイル開発が生まれたのか

では、そもそもなぜアジャイルソフトウェア開発が生まれたのかについてご説明いたします。 アジャイルによる開発手法の採用が進んできた背景には、昨今のビジネスの不確実さ、変化の速さがあると思います。そのビジネスをサポートするために、ITシステム(情報システム)が積極的に変化に対応するといったことが求められていると思います。

従来はウォーターフォールモデルという手法が主流でした。これは文字通り「滝」を意味し、開発プロジェクトを時系列で作業工程に分割する手法です。 つまり、すべての工程を最初から決めてしまい、一度で終わらせる計画を立てて実行していくというものです。プロジェクトによっては何年単位での計画も珍しくありません。 これにはいくつか問題点が顕在化してきました。 以下にウォーターフォールの問題点をいくつか挙げます。

  • 膨大なドキュメント作成する必要がある
    要件定義書、設計書、テストケースなど、開発に必要な情報が全てドキュメントにまとまってないとプロジェクトが進められません。技術者は開発に注力することができずにドキュメントの作成に時間がとられ生産性が低下してしまう可能性があります。

  • 最初から完璧に要件定義をすることは不可能
    事前にすべての要求を出し切ることは初期段階ではかなり難しいことです。例えば、去年の誕生日に欲しかったものが来年も欲しいかといわれるとわかりません。このように状況が変わることがあるようにシステム開発においても同じことがいえると思います。

  • スコープクリープの発生
    プロジェクトが進行するにつれて、要件の追加・変更が発生し、スコープ(範囲)が管理されずに少しずつ肥大化する傾向があります。これをスコープクリープといいます。現実と計画が乖離していきプロジェクトの管理ができなくなるリスクがあります。

  • 手戻りの発生
    ウォーターフォールモデルでは工程を前から順に行っていきますが、後工程で発覚した問題(仕様漏れ等)は戻って作業します。それを手戻りといいます。これはわかりやすいと思いますが、手戻りが多いとスケジュールが遅延していきます。また、テストの段階で設計漏れが発覚すれば設計工程に戻ることになります。

  • 要件の追加・変更の後回し
    最初に全体の計画を立てるので、要件を追加・変更したい場合にはリリース後の対応となることが多いです。要望に対して柔軟に対応することができないということです。

などなど、問題点が顕在化されていきました。 そこでこれらの問題点を解決する手法として、アジャイル開発が注目されています。

アジャイルソフトウェア開発のメリット

それではアジャイル開発とはどのような物か具体的に見ていきます。 『要件定義→設計→開発→テスト→リリース』といった開発工程を機能単位の小さいサイクルで繰り返すのが最大の特徴だと思います。「プロジェクトに変化はつきもの」という前提で進められるので仕様変更に強くプロダクトの価値を最大化することに重点を置いた開発手法といえます。 先に挙げたウォーターフォールモデルのデメリットの部分を解消しているともいえます。

アジャイルソフトウェア開発宣言を読み解く

アジャイルソフトウェア開発を学ぶ上で絶対に登場するのが「アジャイルソフトウェア開発宣言」です。詳しくはこちらをご覧ください。

tech.mti.co.jp

「アジャイルソフトウェア開発宣言」12の原則の中で私なりにいくつかピックアップしてみました。

  • 顧客満足を最優先し、価値のあるソフトウェアを早く継続的に提供します。
    ここで重要なのが顧客にとって重要なこと(ビジネスゴール)はなにかという観点でソフトウェア開発を行うことだと思います。先に挙げたドキュメント中心のウォーターフォールのデメリットを解消している部分ともいえます。

  • 要求の変更はたとえ開発の後期であっても歓迎します。変化を味方につけることによって、お客様の競争力を引き上げます。
    先に挙げたサービス提供に至るまでの短いサイクルを繰り返しているので、途中の仕様変更や優先順位の変更に柔軟に対応できます。変化の速いビジネス環境にも対応することができます。
    必要なものは常に変化していくものです。1年前と今では必要な物が違うというのは容易に想像できると思います。 また、意外と見落としがちですが、開発するのが目的ではなく、開発したシステムを使ってお客様に価値を届けることが目的です。その目的を見失ってはならないと思います。

  • 動くソフトウェアこそが進捗の最も重要な尺度です。
    ソフトウェアを進捗の尺度としているので、ユーザーのフィードバックを受けて改善するというPDCAを効率的に回すことができると思います。 また、ドキュメントが重要であったウォーターフォールのデメリットを解消しているともいえます。

これら以外にも重要なことが詰まった内容となっています。これから学ぶ方は深堀することをお勧めいたします。

まとめ

今回はアジャイルシステム開発を超初心者の私なりに解説してみました。 アジャイル開発のメリットを述べてきましたが、ウォーターフォールモデルが向いているプロジェクトというのももちろんあります。アジャイルについての目的や概要を理解できたと同時にまだまだ学ぶべき内容がたくさんあると実感したトレーニングでした。

全体像を掴んで少しでも今後の学習のお役に立てれば幸いです。

画像出典