W字モデルとは
組み込みソフト開発では、実装が終わってからテストで仕様の曖昧さが発覚し、大きな手戻りが生じることが少なくありません。V字モデルは開発工程とテスト工程の対応関係を示しますが、テスト設計に着手する時期までは規定していません。W字モデルは、このV字モデルを発展させ、上流工程からテスト設計を並走させる開発モデルです。本記事では、V字モデルとの違いと、組み込み開発における実践手順を解説します。
- W字モデルとは何か
- V字モデルとの違い - 対応関係の可視化か、並走による前倒しか
- 上流工程でテスト設計を並走させる効果
- 組み込みでの実践手順 - 工程ごとのテスト設計の並走
- 組み込み特有の難所 - テスト設計と実行のタイムラグ
- W字モデルのデメリットと導入の注意点
- まとめ
W字モデルとは何か
W字モデルは、V字モデルを発展させた開発モデルです。開発工程とテスト工程を、同時並行で進める点に特徴があります。V字モデルでは、要件定義や設計といった開発工程と、単体テストや結合テストといったテスト工程が、左右対称の関係で示されます。W字モデルは、この対応関係に加えて、上流工程の各段階でテスト設計を先行して実施します(「V字モデルで学ぶテスト工程と品質保証」参照)。
具体的には、要件定義の段階でシステムテスト設計に着手し、基本設計の段階で結合テスト設計に着手し、詳細設計の段階で単体テスト設計に着手します。開発を表すV字と、テスト設計を表すV字が並走し、図に描くとW字の形になることが、この名前の由来です。
従来のV字モデルの現場では、テスト設計はコーディングが終わった後に着手する運用が一般的でした。その結果、テスト設計にかけられる時間が短くなり、レビューが不十分なまま実行に進む問題が起きていました。W字モデルは、テスト設計の着手時期そのものを前倒しすることで、この問題を解消しようとする考え方です。
組み込み開発では、実装後に判明した不具合の修正が、ソフトウェアだけでなく、回路や部品の変更にまで及ぶことがあります。ハードウェアの修正は、ソフトウェアの修正に比べて、時間もコストも大きくなりがちです。上流工程でテスト設計を並走させ、実装前に問題を洗い出すW字モデルの効果は、組み込み特有の事情のもとで、一段と大きな意味を持ちます。
V字モデルとの違い - 対応関係の可視化か、並走による前倒しか
V字モデルとW字モデルの違いは、モデルが果たす役割にあります。V字モデルは、開発工程とテスト工程の対応関係を示すモデルです。どの設計書の内容を、どのテストで検証するのかを、明確にする役割を持ちます。
一方でW字モデルは、テスト設計を上流工程に前倒しして、開発工程と並走させるモデルです。V字モデルが対応関係を示すだけなのに対し、W字モデルはテスト設計に着手する時期まで踏み込んで規定します。この違いを理解しないまま、V字モデルの図を描くだけで、W字モデルを実践したつもりになっている現場も見受けられます。
対応関係の図を描いただけでは、テスト設計者が実装後に集められ、駆け足でテスト設計をおこなう進め方と、実質的に変わりません。W字モデルを名乗るのであれば、要件定義や設計のレビューに、テスト設計者が加わっているかどうかを、実態として確認する必要があります。
W字モデルは、V字モデルを置き換えるものではありません。開発工程とテスト工程の対応関係というV字モデルの骨格は、そのまま引き継ぎます。そのうえで、テスト設計に着手する時期という運用のルールを、具体的に定めたものがW字モデルだと捉えると、両者の関係を理解しやすくなります。
上流工程でテスト設計を並走させる効果
上流工程でテスト設計を並走させる狙いは、要求や設計の曖昧さを、早期に発見することです。テスト設計では、仕様書に書かれた条件を、具体的な入力値と期待結果に落とし込みます。この作業を要件定義や基本設計の段階でおこなうと、記述の矛盾や条件の抜け漏れが、テスト設計の過程で表面化します(「テスト設計レビューの基礎知識」参照)。
たとえば、「異常を検知したら安全に停止する」という要求仕様があったとします。この文章だけでは、どの信号をどのしきい値で異常と判定するのか、停止までの許容時間はどれだけかといった条件が定まりません。テスト設計者が、この仕様からテストケースを起こそうとした時点で、条件の未定義に気づき、仕様の確定を開発チームに促せます。
曖昧さが実装前に見つかれば、仕様や設計を修正するコストは小さく済みます。逆に実装後のテストで曖昧さが見つかると、コードの修正だけでなく、設計書の修正にまで手戻りが広がります。W字モデルは、この手戻りの範囲を、実装前の段階に閉じ込める狙いを持ったモデルです。
組み込み開発では、基本設計の段階で、使用するセンサや通信規格といったハードウェア構成が確定します。この段階でテスト設計を並走させておけば、テスト容易性の観点から、ハードウェア構成そのものを見直す余地も残ります。部品が確定した後では、テストのしやすさを理由に構成を変更することは、現実には困難です。
組み込みでの実践手順 - 工程ごとのテスト設計の並走
組み込み開発でW字モデルを実践する手順は、開発工程とテスト設計を対応づけることから始まります。それぞれのテストレベルが担う検証内容は、テストの種類によって異なります(「ソフトウェアテストの種類」参照)。具体的な対応は、次のとおりです。
- 要求仕様の段階で、システムテスト設計を並走させます。製品として満たすべき機能や性能の条件を、通信仕様や操作パネルの挙動を含めてテスト項目に落とし込みます
- 基本設計の段階で、結合テスト設計を並走させます。モジュール間のインターフェースや、通信プロトコルの仕様、割り込みの優先順位を、テスト条件に反映します
- 詳細設計の段階で、単体テスト設計を並走させます。関数やクラス単位の入出力条件、境界値や異常値の扱いを、テストケースに落とし込みます
各段階でテスト設計を担当する人員を、開発チームとは別に確保する必要があります。設計書のレビューにテスト設計者が加わることで、テスト観点からの指摘も得られます。設計者だけでは気づきにくい、操作順序の抜けや、異常系の考慮漏れが、テスト設計者の視点から指摘されることも珍しくありません。
並走させたテスト設計は、実装が終わった時点で完成品として存在します。実装チームは、コーディングと並行してテストケースのレビューを受けられるため、実装後の手戻りを、従来より小さく抑えられます。
要求仕様、基本設計、詳細設計と、各テスト設計の対応関係は、トレーサビリティマトリクスのような形で管理すると、抜け漏れに気づきやすくなります。仕様変更が発生した際にも、影響を受けるテストケースを、対応関係からたどって特定できます。
組み込み特有の難所 - テスト設計と実行のタイムラグ
組み込み開発でW字モデルを実践するとき、特有の難所になるのが実行のタイミングです。テスト設計を上流工程で終えても、実機が完成していなければ、テストを実行できません。基板の試作や量産部品の調達には時間がかかるため、テスト設計とテスト実行の間に、大きなタイムラグが生じます。
汎用ソフトであれば、テスト対象はサーバやPC上でそのまま動かせるため、設計が終わり次第、実行に移れます。組み込みソフトでは、対象がハードウェアと一体で動く機器であるため、実機の完成を待たなければ、テストを実行できない工程が残ります。この点が、組み込みでW字モデルを実践する際の、大きな課題になります。
このタイムラグを埋める手段として、接続機器や入出力信号をエミュレートして、実機を待たずにテストを始める方法があります。センサからの入力信号や、通信相手からの応答を疑似的に再現することで、単体テストや結合テストの一部を、実機の完成前から実行できます(「自動テストのメリットと役割分担」参照)。
ただし、疑似的な信号による検証には限界もあります。実際のセンサが持つノイズ特性や、実機の温度特性まで、忠実に再現できるとは限りません。実機での確認が必要な項目と、疑似信号での検証で十分な項目を、テスト設計の段階で仕分けておくことが重要です。
W字モデルのデメリットと導入の注意点
W字モデルには、デメリットもあります。導入する前に、次の点を確認しておく必要があります(「開発の全体像と手戻りを防ぐ設計」参照)。
- 上流工程の負荷が増えます。開発担当者は、テスト設計者からの指摘に対応する工数を、あらかじめ見込む必要があります
- テスト設計者を早期にアサインする必要があります。要件定義の段階から、設計内容を理解し、テスト設計ができる人材を確保しなければなりません
- 要求が固まらない案件では、うまく回りません。仕様変更のたびに、先行して作成したテスト設計を修正するコストが発生します
これらのデメリットを踏まえると、W字モデルは、すべての案件に適した進め方ではありません。要求の変更が頻発する案件では、テスト設計の手戻りが、かえって負荷を増やす場合があります。
対策としては、要求が固まりやすいシステムテストと結合テストの設計から先行して並走させ、詳細設計レベルの単体テスト設計は、通常のV字モデルのタイミングで進めるといった、部分的な導入も選択肢になります。案件の特性に応じて、並走させる範囲を調整する判断が求められます。
また、W字モデルを導入する際は、テスト設計者を早期にアサインする分だけ、人員計画を前倒しする必要があります。開発規模やスケジュールに応じて、どの工程からテスト設計者を参画させるかを、プロジェクト計画の段階で決めておくことが、混乱を避けるうえで欠かせません。
まとめ
W字モデルは、V字モデルを発展させ、開発工程とテスト設計を上流から並走させる開発モデルです。要求や設計の曖昧さを実装前に発見でき、手戻りを抑えられます。ただし組み込みでは実機が揃うまで実行できない難所があり、疑似信号による代替手段の検討が欠かせません。上流工程の負荷増加、および負荷がなるべく少ない方法の検討結果も踏まえ、案件の特性を見極めた導入が求められます。


