【初心者用】ソフトウェア開発工程について

ソフトウェア開発の工程について深く理解していないので、今回改めて開発からリリースまでの一連の流れを学びなおしたいと思います。

どの工程でどういう作業が必要なのか理解することで、開発の際にさらに意識して仕事を進めることができると思います。


今回は上記作業の一連の作業を表すV字モデルについてまとめていきたいと思います。

1. そもそもV字モデルって何?


V字モデルとは開発からテスト~リリースまでの一連の流れにおける、開発工程とテスト工程の対応関係を表したものがV字モデルといいます。

V字モデルの右側と左側でどの作業工程か表されており、V字の下の方へ工程が進みコーディングが完了すると開発工程が終了し、V字の頂点から折り返して上に工程が進むとテスト工程に移ります。


V字モデルは主にウォーターフォール型のソフトウェア開発とソフトウェアテストで用いられている基本的な方法として知られています。

V字モデルは開発工程とテスト工程の詳細さのレベルに応じて対になるように並べており、要件定義からテストまでの各工程の対応関係を明確にしているモデルになります。


同じ高さの開発工程やテスト工程であると、開発・設計された各工程の成果物に対してのテストのレベル・範囲・内容を適切に認識することができるので、プロダクトの品質を確保することに役立ちます。

確認方法としては実装工程で頂点から折り返して、左が開発工程の作業で右側がテスト工程をそれぞれ表しています。


開発工程とテスト工程を表している形がVに見えるため、この工程の表示方法はV字モデルと呼ばれています。

■V字モデル

 要件定義      →     システム/受け入れテスト
  
   基本設計    →    結合テスト
 
     詳細設計  →  コンポーネントテスト

           実装

■ウォーターフォールモデル

 要件定義
   基本設計
     詳細設計
       開発
         単体テスト
           結合テスト
             システムテスト

■アジャイル

   ↓ 開発 ←
 テスト    設計
   → 実装 ↑
      ↓
           リリース

2. V字モデルのメリット


V字モデルを使用したソフトウェア開発プロジェクトで活用すると、様々なメリットが得られる場合があります。

以下にV字モデルがソフトウェアの品質向上に繋がるメリットをまとめます。

2-1. テスト工程の進捗を管理しやすい

各テスト工程でどのように作業や検証をするのかという認識をプロジェクト間ですり合わせがしやすくなり、そのおかげで作業内容やスケジュールに対する認識のズレや計画の乖離が発生することが減少します。

また、各テスト工程での不具合の発生率やタスク・工数の修正など細分化してしゅみゅレーションすることで、工数やスケジュールなどの見積もりを行うことができます。

これにより、各工程の結果をもとにして後々の校庭の計画を修正することで、プロジェクトの進捗をより正確に把握又は予測をすることができます。

2-2. 全行程の手戻りリスクを軽減できる

ソフトウェア開発でコスト超過やスケジュール遅延の大きな要因として、作業の手戻りが大きな要因としてあげられます。

例えば、単体テストレベルでの不具合が後半のシステムテストなどで発見された場合は、詳細設計から見直しになる場合もあり、不具合の修正や影響範囲が非常に広範囲になる場合があります。

その場合は、手戻りで戻った分のコストや時間の大きなロスに繋がります。

2-3. 適切なテスト内容を決定しやすい

V字モデルを使用することにより、同じ高さの開発工程とテスト工程はお互いに対応しておりテスト工程においては同じレベルの成果物のテストを行うことができます。


例えると単体テストの成果物は、開発工程において対となっている詳細設計の成果物を対象にテストをします。

単体テストでは詳細設計書を元にテスト設計を行い、実装された機能単位で仕様通りの動作や表示をしているか確認を行います。


このように、テスト工程に応じて適切なテスト内容を決定するうえでV字モデルは有効な手段となります。

2-4. 不具合修正のコスト削減になる

テスト対象や内容を明確にすることにより、テストで検出された不具合の原因の特定や修正が簡単になります。

前述したように各工程で設計やテスト・不具合修正を行った場合は、不具合が起こった際には該当するレベルを確認することで解決することができます。

 
逆に言うとこのテストレベルを適当にして作業を行っていた場合は、不具合の発見にかかり又修正範囲も特定がしずらくなり、他の箇所にも影響が及ぶ場合があります。

ですので、レベルごとにテスト工程を明確にしておくことで、各レベルのテストで品質を積み上げることが重要になります。

3. 上流と下流の各工程の役割


各工程の詳細について上流工程と下流工程の役割についてまとめます。

3-1. 上流工程(開発工程)

■要求定義

要件定義とは違い顧客の要望に合わせた要求を定義することです。

システムの発注者である顧客のニーズや、ソフトウェア製品の企画者の要望を整理することにより、これによってソフトウェアの開発目標が明確になります。

■基本設計

基本設計は要求定義が決まった後に行い、要求定義で決めた要求項目を実現するための、必要なソフトウェアの機能や構成などの基本的な仕様を決定する工程となっています。

基本設計では要求をシステムとして実現できる方法を作成し、システム全体の基本設計書と機能仕様書を作成します。

■詳細設計

基本設計で定義した仕様を元に、システムを構築するために必要な処理の仕様を決定します。

詳細設計の範囲としては機能・モジュールごとで決められており、決定されたものを仕様として記述すると詳細設計書を作成することができます。

■コーディング

コーディングでは詳細設計で作成したものを参考にして、意図したとおりの動作をするソフトウェアの開発を行います。

3-2. 下流工程(テスト工程)

以下に開発工程後のテスト工程についてまとめます。

■単体テスト

単体テストでは詳細設計で作成した機能が動作するかテストを行い、コーディングで作成したソフトウェアが適切なものか確認を行います。

■結合テスト・機能テスト

機能テストではモジュール毎に1つの機能としてテストを行うことで、作成した機能が正しい役割として動作しているかの確認ができます。

結合テストでは各モジュールを組み合わせてテストをすることにより、詳細設計で定義されていたモジュール間の連携方法が実現されているか確認を行います。

■システムテスト

システムテストでは各モジュール毎の機能を統合し、要求定義の内容が実現されているかの確認を行います。

発注者や企画者、ユーザーの立場から、完成品の状態に近い状態でのテストを行うことで、様々な使い方を試すことで欠陥を発見します。

4. まとめ

テストをする際にV字モデルの必要性や意味に関して意識して作業をしていなかったので、今回まとめることにより今後のテストの意識が変わりました。

今後はテストの際に各テストレベルに関して意識して作業を行いたいと思います。