システム開発では、開発からリリースまでの一連の流れを「上流工程」「下流工程」と分けて表現することがあります。
本記事では、上流工程とは何なのか、各段階の概要と、下流工程とどのように連動しているのかについて、まとめました。
「V字モデル」、「アジャイル開発」それぞれでの考え方をご紹介します。
- もくじ
1.システム開発における「上流工程」とは
システム開発における「上流工程」とは、開発を始める前段階の、企画から設計に相当する工程のことを指しています。
そのため、上流工程をおろそかにすると、開発工程全体でのスケジュールの遅延やコード(ソフトウェア)品質の低下などトラブルの原因となります。
特に、大規模なシステムの開発では、上流工程にて設計をしっかりと行う必要があるとされています。
高品質なシステムを開発するためには、「上流工程」からの動きが重要になることを覚えておきましょう。
2.V字モデルで見る「上流工程」と「下流工程」の関係
ここからは、V字モデルを基に、上流工程と下流工程の関係について考えていきます。
そもそも V字モデルとは左側を上流工程(設計・開発)、右側を下流工程(テスト・検証)とする考え方が一般的で、図にすると上記のようになります。
これは、ウォーターフォール型開発モデルを「実装」段階をポイントとして、前後に(V字形として)上流工程と下流工程を配置したものです。
2-1 V字モデルで見る「上流工程」と「下流工程」
上流工程はいくつかの段階に分けられます。その分け方について、いくつかの考え方がありますが、今回の記事では工程の時系列順に「要求定義・要件定義」「基本設計」「詳細設計」「実装」の4つに分けています。(詳細は3章)
下流工程は、上流工程の各段階と各テストを関連付けて考えます。
「単体テスト」では詳細設計の内容を確認しつつモジュール単位で作成したコードをテストし、「結合テスト」では基本設計の内容を確認し、「システムテスト」では要件定義の内容を確認し、「受入テスト」では要求定義の内容を確認するということです。
V字モデルでの品質管理の基本的な考え方として、‟フェーズ単位で品質を作り込む"というものがあります。
言い方を変えると、不具合を次工程に送らないようにレビューやテストを行うことが重要ということです。
2-2 上流工程に問題があると「下流工程」はどのような影響をうけるのか?
上流工程では、「設計からシステムを構成する各機能やモジュールのプログラミングまで」を、
下流工程では、「それら開発されたモジュールや機能が、正しく機能するかについて、単体テストからシステムテストまで」を行います。
下流工程でテストを行うことで、上流工程で開発されたモジュール単体や各機能の不具合、それらをシステムに組み込んだ後の不具合(スムーズな運用ができないなど)を洗い出すことができます。
しかし、上流工程に問題が多いと、下流工程やシステム自体の品質に悪影響を与えてしまいます。
例えば、完成したシステムに顧客から要望のあったモジュールや機能が組み込まれていなければ、顧客からクレームが来ます。
また、顧客からの要望をシステム開発に落とし込む要件定義に不備があれば、基本設計がやり直しになり、結果としてスケジュールの遅れが発生し、それを挽回するためのコストが増加することに繋がります。
さらに、スケジュールが遅れた結果、下流工程で十分なテストが行えなくなり、システムトラブルや品質の低下を招く恐れもあります。
このようなシステムでは、顧客企業の満足度も低くなりますし、開発ベンダーへの信頼や評判も低下し、win-winならぬlose-loseという結果になりかねません。
つまり、上流工程での抜け漏れは、スケジュールの遅延を招くだけでなく、下流工程でのテストの不足(抜け漏れ)、さらには顧客の満足度低下につながっていきます。
「いかに上流工程で品質を高めるか」が重要です。
3.V字モデルで見る「上流工程」の各段階
それではV字モデルでのシステム開発「上流工程」の各段階について見ていきます。
3-1 要求定義・要件定義
システム開発の最初の段階が「要求定義・要件定義」で、前掲のV字モデルでは左側最上段に配置されます。
要求定義は開発するシステムに求められるクライアント側の要求やシステムで実現したいことをまとめたものです。
クライアントニーズとしての「要求定義」に基づき、開発するシステムでどう実現するのか、クライアントや利用する対象となるエンドユーザーがどのようなことをしたいのかといった観点から、システムとしてどのような機能が必要なのかを「要件定義」として整理します。
具体的には「現状の課題」「目標とする状態」「実現するために必要なシステム(機能)」を想定し、具体的なシステムや機能の概要を決めます。
顧客によっては「何を実現したいのか?」が明確になっていない場合もあるため、開発ベンダーとも協力して必要な機能を洗い出す必要があります。
3-2 基本設計(機能設計・外部設計)
「基本設計」は、前段階のクライアントやユーザーニーズから作成された要求定義を反映した要件定義を前提として、開発するシステムに実装する機能を設計するものです。
この設計作業は、システムを構築するための要素としてプログラミング言語やデータベースといった幅広い領域の知識、そして実際のビジネスの知識が必要となります。
「基本設計」は、要件定義の成果を元に画面や帳票といったユーザーインターフェイスの設計に相当します。
基本設計の良し悪しはソフトウェアの品質に直結するため、重要な工程です。そのため、基本設計を成功させるためには顧客とのコミュニケーションが大切になってきます。
なお、「基本設計」は「機能設計」や「外部設計」と呼ばれる場合があります。
3-3 詳細設計
「詳細設計」では、基本設計で設計された機能について、開発者側からの視点でプログラムとして実現するようにシステムを設計します。
より具体的には「詳細設計」は、基本設計の成果を元に、機能単位のモジュールへの分割やモジュール間のインターフェイスを設計することに相当します。
システムの基本的な動作は詳細設計で定まります。基本設計では顧客とのコミュニケーションが必要でしたが、詳細設計は基本的に開発者側で進められます。
3-4 実装
「実装」段階ではいよいよ開発が開始されます。
詳細設計書を確認しながら、プログラマーが実際にコーディングを行い、システム開発を行います。
4.アジャイル開発における品質保証と「上流工程」の関係
ここまで従来のウォーターフォールモデルから派生したV字モデルにおける上流工程と、関係する下流工程について解説しました。
一方、昨今では「アジャイル開発」と呼ばれる開発モデルも用いられています。
少人数の開発チームで短期間で繰り返して行う開発を繰り返すアジャイル開発では、ユーザーストーリーをベースに開発サイクルとして要件定義、設計、プログラミング、テスト、本番環境へのデプロイのサイクルを繰り返します。
ウォーターフォールモデルとアジャイル開発は対照的に思えますが、実際の現場では両者をミックスしたスタイル(ハイブリッド開発)での開発も行われています。
一例を挙げると、上流工程での要求定義はウォーターフォール型、基本設計-詳細設計-実装-単体テストはアジャイル型、下流工程の結合テスト、システムテスト、性能テストなどはウォーターフォール型で進める、というような場合があります。
ウォーターフォールモデルの上流工程の考え方、特に要求定義や要件定義はアジャイル開発でも必要な要素です。
ソフトウェアを作る方法、進め方は異なりますが、出来上がった製品に対して求められる品質は同じです。
要求を分析して、設計に落とし込み、テストで確認することに違いはありません。
まとめ
システム開発における「上流工程」とは、開発を始める前段階の、企画から設計に相当する工程のことを指します。V字モデルでいうと「要求定義・要件定義」「基本設計」「詳細設計」「実装」の工程です。
システム開発は常に大規模化と複雑化していくものであり、それに伴いシステムの品質を保証することの難易度も上がってきています。もはやプログラマー各人が品質の高いコードを書くように心がける程度では、品質保証は難しくなっていると言えるでしょう。
また、品質を定量的に評価するためには、上流工程にQAチーム(Quality Assurance)を参加させるといったことも必要です。
上流工程と下流工程は、どちらもシステム開発の両輪です。成果物であるシステム全体の品質を高めるためには、なによりも上流工程の強化が求められると言ってよいでしょう。