【WEB運用ナレッジ】Agile開発とウォーターフォール開発の違い

a0800_001225

プログラマのKです。

Agile開発とウォーターフォール開発の違い」について話をさせていただきます。

「ソフトウェア開発」=「何かプログラムを書く」あるいは、「ソフトウェア開発」=「何かプログラムを書く」+「デバッグ」というイメージがある方もおられるかと思います。

デバッグはプログラムの不具合を修正する作業の意味です。

確かに適切なプログラムがないとコンピュータは動作しませんので、プログラムを書く作業は、ソフトウェア開発において必須の作業です。

ソフトウェア開発は、お客様の要求を聞く、あるいは自社開発であれば「企画書」を作成する所がスタートです。

さらに、お客様の要求通り動作するソフトウェアを納品した時点が終わりではなく、環境の変化や企業様のユーザニーズの変化に対応して改良・バージョンアップを行い、改良・バージョンアップでは用が足らなくなった時点が、その「ソフトウェア開発」の終了です。

まず、お客様の話を聴き、その内容をまとめます。

お客様の話を聴いた段階で、お客様が言葉にして直接要求しておられる「機能」だけでお客様のニーズが完全に実現できる場合と、言葉にして直接要求しておられる機能だけでは、お客さまのニーズを完全に満足できない場合とがあります。

直接要求しておられる機能だけで、お客さまのニーズが満たされる場合は、「要求仕様の定義」を行います。

直接要求しておられる機能だけでは、お客さまのニーズが満足されない場合は、「企画書」を作成し、お客様に提案し了承を得てから「要求仕様の定義」を行います。

要求仕様の定義は、具体的には「要求仕様書」と呼ばれるドキュメントの作成です。

以降ソフトウェア開発は、この要求仕様書に基づいて展開します。

要求仕様書には、そのシステムに要求される機能を全て列記します。

システムは、機能を担当するプログラムとデータで構成されます。

要求仕様書の内容を実現するために、データをどんな形で保持して、どのように扱うのかを明確にするとともに、各機能を機能単位に分割した上で、各機能間の関係を明確にする「設計」という作業を行います。

設計は「設計仕様書」と呼ばれるドキュメントにまとめられます。

「設計仕様書」と同時に「テスト仕様書」も作成されます。

ソフトウェアのテストは、単体テストと結合テスト、全体テスト・運用テストに分類されます。

設計が終了した時点で、各機能単位レベルでも、機能単位を組合せたレベルでも、標準的な動作例例外的な動作例の二つが明確になっています。

この動作例通り動作しなければ、そのソフトウェアは未完、または「バグ」・不具合が残っていると判断できます。

「テスト仕様書」は「テスト指示書」と呼ぶこともあります。

設計仕様書とテスト仕様書が完成しますと、設計仕様書にもとづいて「実装」の段階にはいり、実際にプログラムを書く作業を行います。

プログラムが書けたら、機能単位ごとに単体テスト、機能単位のプログラムを複数組合せた結合テスト、運用テストを行い、納品という事になります。

上記の「企画」→「要求仕様定義」→「設計」→「実装」→「テスト」の各段階を、左から右へ、後戻りせずに工程を進めるのが「ウォーターフォール開発」です。

実際には単体テストの段階で見つかった不具合は、実装の段階に戻らないと修正できませんから、「要求仕様書」→「設計」→「実装」⇔「単体テスト」→「結合テスト」→「全体テスト」と書いた方が良いかもしれません。

全体テストで不具合が見つかった場合、実装の問題ではなく、要求仕様を定義した時点で、勘違い・抜けがある場合があります。

この場合、要求仕様の定義以下の全ての工程がやり直しになります。

工程のやり直しを「手戻り」といいますが、手戻りは即、開発コストの増加、多くの場合納期の遅延を伴います。

ウォーターフォール開発では、要求仕様書作成時点で全てを抜けなく明確にしておく必要があります。

小規模で比較的単純なシステムであれば、ウォーターフォール開発でも問題がありません。

しかし、Webシステムのような複雑で、さらにデータベースまで含むような中規模以上のシステムの場合、ウォーターフォール開発では、短納期での納品は困難になります。

ウォーターフォール開発の問題点は、最初に全てを一度に定義してしまっているところにあります。

家の掃除でも、家全体を一気に掃除しようとしますと疲れます。

一気にやろうとせずに、まず今日は机の引き出し、次は机の掃除、次は右回りに書斎の本棚を順番にというように、小さな単位で作業を完結させながらすすめれば、意外に楽に予定通りに作業が進んだりします。

一気に全機能を実現するのではなく、機能単位毎あるいは関連の強い機能グループ毎に、「設計」→「実装」→「テスト」を繰返し、ソフトウェア開発を進めるのが、Agile開発です。

Agile開発では、小さな単位毎にテスト・デバッグを行います。

ここは確実にできた・クリアしたという実感がありますので、開発担当者のストレスが少なく、予定通りに工程を進めやすい効果があります。

さらに「ここまでできました。この部分についてこれでよろしいでしょうか」と企業様に確認できますので、企業様の意向を反映しやすいというメリットもあります。

ウォーターフォール開発では、設計以降の工程では変更・追加は非常に困難です。

またAgile開発で作成されたシステムは、完結した小さな単位の組合せでシステムが構築されています。

納品後も企業様を取り巻く環境の変化・企業様のユーザニーズの変化に対して、対応する機能単位の変更のみで対応可能です。

ソフトウェア開発の最後まで、納品後も企業様のニーズへの対応が可能です。

より企業様に寄り添うかたちでのIT技術の提供を行わせていただくために、当社ではAgile開発を積極的に取り入れさせていただいております。

(K)

お問い合わせはこちらお問い合わせはこちら