##00. この記事の対象者
・開発モデルを用いたシステム開発の概要を知りたい方
・開発モデル(V字モデル & W字モデル)について学びたい方
##01. なぜシステム開発にテストは必要か?
システム開発において成果物の品質を保証することは必須事項です。そして、それらを保証するためにシステム開発に組み込まれるのが「テスト」です。しかし、必須であるはずのテスト工程は暫し開発業務の進行具合や締め切りと言ったさまざまな開発上の制約によって疎かになります。実際、初めから完璧なコードを書ける人であればシステム開発をする上でテストをする必要はありません。しかし、誰だってミスはしますよね?だからこそテストは重要だし、テストの質により成果物ができる過程も結果も大きく変わってきます。
##02. 開発とテストの流れ
システム開発のスタイルによって開発工程やテストが行われるタイミングは様々です。それ故この記事ではウォーターフォールモデルを根幹とする「V字モデル」と「W字モデル」の二つの考え方について説明していきます。
##03. ウォーターフォールモデル
V字モデルとW字モデル二つのモデルの根幹となるのが「ウォータフォールモデル」という考え方です。ウォーターフォールモデルとは各開発のプロセスの役割を明確に定義し、上流工程(Ex. 要件定義)から下流工程(Ex. テスト)に進めていくモデルです。このモデルでは一つの工程を完璧に仕上げた後に次の工程へ進め、前の工程への後戻りは原則許されていません。
##04. V字モデルとは
V字モデルとはウォーターフォールモデル型の開発モデルです。ウォーターフォールモデルでは「どの開発工程がどのテスト工程に対応している」のかが非常にわかりにくい物でした。それ故、V字モデルでは従来のウォーターフォールモデルの対応関係の分りくにくさを解消するために設計工程とテスト工程を抽象度に応じてリンクさせることで対応関係を明確にしました。それにより従来のウォーターフォールモデルに比べ確認・検証精度が高まりました。
##05. V字モデルの設計工程とテスト工程の対応関係について
####要件テスト・システムテスト
まず、要件定義でお客様の要望から機能や必要性能を調査、分析し、用件定義書の作成を行います。その後、システムテストで用件定義の際に作られた用件定義書の内容の確認・検証を行います。
テスト内容
・商品の品質レベルが基準値を満たしているかの検証
・お客様の用件通りの機能と性能を満たしているかの検証
####基本設計・結合/機能テスト
まず、基本設計でUIを設計し基本設計所の制作を行います。その後、結合/機能テストで基本設計所の内容が実現されていかどうか確認・検証を行います。
テスト内容
・機能テスト(テストケースの作成、検証、回帰などを含む、より広範なシナリオの機能テスト)
・負荷テスト(主に機能テストケースを使用して、負荷がかかった状態でのパフォーマンスの検証)
####詳細設計・ユニットテスト(単体テスト)
まず、詳細設計で基本設計で挙げられた必要機能実現のための詳細設計書の作成を行います。その後、単体テストで詳細設計書の内容が実現されているか確認・検証を行います。
テスト内容
・ユニットテスト(関数やメソッド単位で機能テスト)
1. ホワイトボックステスト(テスト対象の関数・メソッドの内部構造(Ex.条件分岐)のテスト)
2. ブラックボックステスト(テスト対象の関数・メソッドの外部(Ex.入出力)のテスト)
####実装
実装はプログラマが詳細設計書に沿ってプログラミングを行うフェーズのことです。
##06. V字モデルのメリット・デメリット
###メリット
確認・検証を行うべき内容が明確
V字モデルではどのようなテストが必要であるかを設計工程の際に洗い出すため、テスト工程の立ち上がりが早い。
役割分担が明確でプロジェクト進行が円滑
各工程での確認・検証を行う役割分担が明確に行われているため、各ポジションに必要なスキルを持ち合わせた人材を割り当てることができるためプロジェクトの進行が円滑に進めることを可能にします。
納品までの道筋がはっきりしている
V字モデルは決められた道筋の開発工程・テスト工程を行うため、納品までの道筋がはっきりしている。
###デメリット
変更要求に弱い
V字モデルでは開発工程を綿密に行うため、お客様からの急な要望の対処にコストがかかる。
上流工程の設計ミスは致命傷になる恐れがある
ウォーターフォールモデルの説明でも述べたようにウォーターフォールモデルを根幹とするV字モデルでは各工程が完璧であることが前提とされています。それ故、前の工程で間違いに気付かず進めてしまうと雪崩れしきにそれよりも後の工程で間違いが残ったままになります。特に上位の工程であればあるほど問題が起こった際のダメージは大きくなることが予想されます。
##07. W字モデルとは
W字モデルとはウォーターフォールモデル型の開発モデルで、V字モデルを発展させたものです。V字モデルでは実装の後にテスト設計とテスト実行を行い、明確に「上流工程=開発、下流工程=テスト」と分かれていましたが、W字モデルでは「要求定義」「設計」といった開発フェーズに「テスト設計」「開発側で作られた成果物のレビュー」といったテストプロセスを意識的に関わらせる考え方です。言い換えると、W字モデルでは「上流工程=開発、下流工程=テスト」のような分断した考え方ではなく、開発とテストを「並行」して進めていくようなモデルです。
##08. W字モデルのメリット・デメリット
###メリット
手戻りが少なくなる
W字モデルでは初期工程から各工程を「並行」しておこうため、通常のテスト工程(V字モデルでいう下流工程)での不具合の発生頻度が減り、結果的に手戻りが少なくなります。これはテストの精度向上、システムの品質向上にとどまらずコストカットや全体としての工数(特に修正工程)削減につながります。
上流工程での品質向上
W字モデルではテストエンジニアが上流工程から参画することで、テスタビリティの観点からも仕様書、設計書を検証することができます。加えて、早期段階からテスト設計を行うことで設計の漏れや矛盾点を早い段階で見つけることが可能になります。
テストエンジニアの観点からも開発初期段階から仕様の把握ができるため、通常のテスト工程を円滑に進めることができます。
###デメリット
導入するのが難しい
W字モデルの最大のデメリットとも言えるのが経験豊なテストエンジニアが必要不可欠という点です。W字モデルのメリットで早い段階で設計の漏れを見つけることができると言いました。しかし、これには経験豊かなテストエンジニアがいることを前提としています。実際、実物のない初期の設計段階から設計の漏れ、矛盾を見つけることは非常に難しいからです。また、チームとしても技術力が必要とされ、V字モデルのできないチームではW字モデルの導入は大変難しいです。
##09. まとめ
現在、どちらのテストモデルもさまざまなシステム開発に導入されています。もし、ウォーターフォール型の開発モデルをプロジェクトに導入するのであれば最終目的はW字モデルを用いてシステム開発を行うことだと思いますが、まずはV字モデルを用いたシステム開発を行い経験や考え方を自分の物にすることが最も重要なことだと思います。
##10. 参考記事
7 Reasons Why Software Testing is Important:
https://www.indiumsoftware.com/blog/why-software-testing/
V字モデル・W字モデルとは?テスト工程と開発の流れについて解説!
https://www.qbook.jp/column/20180427_626.html