TRACERY Lab.(トレラボ)

TRACERY開発チームが、要件定義を中心として、システム開発で役立つ考え方や手法を紹介します。

品質を支える4つの視点:外部品質・利用時の品質・内部品質・プロセス品質を体系的に理解する

シリーズ: システム開発の基礎

TRACERYプロダクトマネージャーの haru です。

システムの品質を考えるとき、まず注目されるのは「仕様どおりに正しく動くか」「不具合なく安定して動作するか」といった、動作の正確さや信頼性といったユーザーから見える品質です。

しかし、リリースを重ねるほど不具合が増えたり、修正に時間がかかるようになる背景には、ユーザーには見えないシステム内部のつくりや、開発プロセスそのものに問題がある場合があります。

本記事では、品質を捉えるための4つの視点(外部品質利用時の品質内部品質プロセス品質)と、それぞれの関係について説明します。

外部品質と利用時の品質

ユーザーから直接確認できる品質には、大きく「外部品質」と「利用時の品質」の2種類があります。

いずれもシステムの外側から評価される品質ですが、着目するポイントが異なります。以下にそれぞれ説明します。

外部品質

システムが「仕様どおりに正しく動作するか」「不具合なく安定して使えるか」といった点は、ユーザーが実際の利用を通じて確認できる品質であり、このように外側から観察できる特性を「外部品質」と呼びます。

動作の正確さ、安定性、セキュリティ、性能など、多くの場合、品質と聞いてまずイメージされるのがこの外部品質です。

具体的には、画面が正しく表示される、ボタンが期待どおりに反応する、といった目に見える品質のことです。

外部品質

利用時の品質

品質は「正しく動く」だけでは十分とはいえません。

そのプロダクトを使うことで、利用者が業務の効率化や成果の向上といった目的を達成し、価値を得られるかどうかという視点で評価される品質が「利用時の品質」です。

利用時の品質もプロダクトの外側から判断できますが、単なる動作の正確性ではなく、その利用によって価値が生まれるかどうかに着目する点が外部品質とは異なります。

その重要性から、利用時の品質は外部品質とは独立した視点として扱われます。

利用時の品質

内部品質

外部品質や利用時の品質は、ユーザーに直接評価される品質ですが、それを継続的に維持するためには、システム内部の構造的な品質、すなわち「内部品質」が欠かせません。

内部品質の代表的な特性として、保守性、再利用性、テスト容易性などが挙げられます。

これらは、設計の妥当性やコードの構造の健全性によって左右され、ソフトウェアの変更容易性や拡張性、そして品質の持続性を支える土台となります。

内部品質

内部品質が外部品質に与える影響

内部品質が低い状態、たとえば複雑で読みづらいコードや整合性の取れていない設計では、変更や修正のたびに不具合が発生しやすくなります。

さらに、修正の影響範囲が特定しづらくなるため検証に時間がかかり、開発生産性は大きく低下します。

生産性が下がった状態でビジネス上の都合を優先して無理にリリースを早めようとすると、十分な検証が行えないままリリースに至り、不具合が混入しやすくなります。その結果、外部品質の低下として顕在化します。

これは、内部品質の劣化が外部品質へと波及する典型的な悪循環です。

逆に内部品質が高いと、設計の一貫性やコードの見通し、依存関係が整理されているため、変更時に別の箇所が壊れにくい構造になります。

その結果、不具合が混入しにくくなり、外部品質の向上につながります。

このように内部品質はユーザーには見えないものの、長期的に外部品質に影響を与える重要な要素であり、外部品質を継続的に維持・改善するための前提条件といえます。

外部品質が十分に確保されていると、プロダクトは正しく動作し、必要な機能を期待どおりに利用できる状態になります。

外部品質が整うことでユーザーは目的の達成に集中でき、その結果として価値を得られる「利用時の品質」が実現されます。

プロセス品質

内部品質を高めるためには、開発プロセスの品質(プロセス品質)を高めることが不可欠です。

ここでいうプロセス品質とは、設計やプログラミングそのものの質に加え、要件管理、設計判断の基準、レビューの方法、記録や共有の仕組みといった、開発プロセスの進め方の品質を指します。

プロセス品質

プロセス品質が内部品質に与える影響

プロセス品質が低いまま開発を続けると、成果物の内部品質が下がります。

内部品質は「作ってみたら勝手に高くなる」ものではなく、どのような手順・考え方・基準で開発したかの結果として決まるからです。

プロセス品質が低いと、要件や設計の意図、前提条件が曖昧なまま実装が始まり、以下のような事が起こります。

  • 似た機能が複数箇所で別実装される
  • 命名や設計ルールがバラバラになる
  • モジュールやコンポーネントの役割や責務の分離が曖昧になる

その結果、設計の整合性が失われ、コードは複雑化し、影響範囲の特定も難しくなります。

先に説明した通り、内部品質の低下は、やがて性能や信頼性、安定性といった外部品質の劣化として顕在化します。

外部品質の低下は表面的な現象に過ぎず、その背景には内部品質の低下があり、さらにその根本原因となるのがプロセス品質の低さです。

逆にプロセス品質が高ければ、設計の一貫性や構造の健全性が保たれ、内部品質が向上します。

内部品質が高くなることで変更容易性が高まり、開発生産性向上と不具合の抑制が実現し、外部品質も継続的に維持・改善されます。

つまり、良いプロセスが内部品質を高め、内部品質が外部品質を支えるという好循環が生まれます。

品質を支える4つの視点の関係

最後に

本記事では、外部品質、利用時の品質、内部品質、プロセス品質という4つの視点から、品質をどのように積み上げていくかを説明しました。

ユーザーから見える部分の品質だけを整えても、内部品質やプロセス品質が伴っていなければ、変更のたびに不具合が発生するようになり、外部品質は維持できません。

長期的に品質を安定させるには、日々の開発プロセスを整え、内部品質を継続的に高めることが不可欠です。

内部品質が高まれば、不具合は入りにくくなり、開発生産性も向上し、その結果として外部品質も安定して改善されます。

良いプロセスが内部品質を生み、内部品質が外部品質を支えてこそ、持続的な品質向上が実現します。

その基本的な考え方を踏まえ、日々の開発に取り組んでいきましょう。

この記事を書いた人
haru

佐藤治夫。株式会社ビープラウド代表取締役社長。TRACERYのプロダクトマネージャー。エンジニアとして活動を始めて以来、モデリングを中心としたソフトウェアエンジニアリングを実践している。Xアカウント: https://x.com/haru860

システム開発の品質保証プロセスの進め方

シリーズ: システム開発の基礎

TRACERYプロダクトマネージャーの haru です。

V字モデルの右辺は、開発した成果物を検証し、品質を保証するためのテストプロセスを表しています。

テストは、V字モデルの底から上へと段階的に進め、単体テストからシステムテスト、運用テストへと範囲を広げながら、設計や要件どおりに動作するかを確かめていきます

品質保証プロセスの進め方

本記事では、この品質保証プロセスの内容と全体の流れを解説します。

各テストのプロセスの目的と主な検証内容

以下の表に各テストのプロセスの目的と主な検証内容を示します。

プロセス名 目的 主な検証内容
コードレビュー プログラムコードを第三者の視点で査読し、設計意図との整合性や内部品質を確認する。 可読性、保守性、命名や責務分離の妥当性、設計意図との整合性
単体テスト ソフトウェアを構成するモジュールやコンポーネント(関数・メソッド・画面・API、機能など)が単独で正しく動作するかを検証する。 入出力、ロジックの妥当性、エラー処理
結合テスト 複数のモジュールやコンポーネントを組み合わせ、連携が仕様や設計どおりに機能するかを検証する。 データの受け渡し、処理結果
システムテスト システム全体がシステム要件どおりに動作するかを検証する。開発者による最終テスト。 データの受け渡し、処理結果。機能、信頼性・性能・セキュリティなどの非機能
運用テスト(受け入れテスト) 業務要件の観点から、実際の運用が問題なく行えるかを検証する。業務担当者による最終テスト。 操作手順、運用ルール、帳票・通知などの業務成果物や、業務目的の達成度
運用・評価 実際にシステムを運用し、課題を解決し、想定した価値が実現しているか(=事業要件が満たされているか)を評価する。 KGIやKPIの達成状況、業務改善効果、システム利用状況

品質保証プロセスの進め方

品質保証プロセスの進め方を、コードレビューから運用テストと、運用・評価の2つに分けて説明します。

コードレビュー〜運用テストの進め方

品質保証プロセスは、粒度の小さな単位から順に品質を固め、範囲を広げながら全体の品質を積み上げていきます(下図)。

品質保証プロセスの進め方(コードレビュー〜運用テスト)

まず、コードレビュー単体テストで、モジュールやコンポーネントといった最小単位の要素に対し、内部構造(コード)と外部動作の両面から品質を固めます。

次に、結合テストで、品質が確認された要素同士を組み合わせ、データの受け渡しや処理のつながりが仕様や設計どおりに機能するかを検証します。

続くシステムテストでは、品質を固めたソフトウェアをハードウェアや外部サービスなどと組み合わせてシステムとして構成し、システム要件に基づいて、機能・性能・信頼性などを総合的に確認します。

最終段階の運用テストでは、実際の業務シナリオに沿って、業務が問題なく遂行できるかを検証します。

このように、システム開発の品質保証プロセスは「要素の正しさ」から始まり、「機能間の連携の正しさ」「全体のふるまい」「業務価値の実現」へと検証範囲を段階的に広げることで、品質を着実に積み上げていきます

この積み上げにより、テストの生産性システムの長期的な品質が安定的に高まります。

運用・評価の進め方(企画・開発とのフィードバックループ)

開発が終わったら、システムを実際に運用し、企画時点で想定していた価値が実現しているか(=事業要件が満たされているか)を検証し、評価します(下図)。

企画・開発と運用・評価のフィードバックループ

価値の評価は、KGI(Key Goal Indicator: 経営目標達成指標) *1KPI(Key Performance Indicator: 重要経営指標)*2といった定量的な指標を使用して、具体的な成果を数値で測定します。例えば、ユーザー数の増加率や操作ミスの減少率などが評価対象となります。

また、ユーザーから寄せられるフィードバックやサポートリクエストを分析し、使い勝手や性能に関する定性的な知見を収集します。ユーザーインタビューやアンケート調査の結果からは、満足度や改善の優先度といった具体的なインサイトが得られます。さらに、エラー率やダウンタイムなどの運用データを分析し、技術面からの評価も加えます。

こうして得られた業務面・技術面の両方の知見を次期開発の企画へと結びつけることで、システムは継続的に改善されます。この関係をV字モデルに当てはめると、下図のようになります。

企画・開発と運用・評価のフィードバックループ(V字モデル)

まとめ

品質保証プロセスは、コードレビューから運用テストまで、粒度の小さな単位から順に品質を積み上げることで、システム全体の安定性を高めることができます。

さらに、運用で得られるKGI・KPIやユーザーフィードバックを次の企画へ循環させることで、システムは継続的に改善されます。

次回の記事では、品質を積み上げる重要性について説明します。

tracery.jp

この記事を書いた人
haru

佐藤治夫。株式会社ビープラウド代表取締役社長。TRACERYのプロダクトマネージャー。エンジニアとして活動を始めて以来、モデリングを中心としたソフトウェアエンジニアリングを実践している。Xアカウント: https://x.com/haru860

*1:企業やプロジェクトが達成すべき主要な目標を評価するための指標。KGIは、組織が目指す最終的な成果や成果を測定し、戦略の成功を評価するのに役立つ。例えば、売上の増加、マーケットシェアの拡大、顧客満足度の向上などがKGIとして設定されることがある。KGIは、全体的なビジネス目標や戦略の達成状況を示すため、重要なパフォーマンスの指標となる。

*2:組織やプロジェクトの進捗や成功度を測定するための具体的な指標。KPIは、特定の目標やタスクの達成状況を評価するために使用され、組織が戦略的な目標を達成するための進捗を追跡するのに役立つ。例えば、売上高、顧客獲得数、製品品質、作業効率、従業員満足度などがKPIとして設定されることがある。これらの指標は、数値や割合などの形で測定可能であり、進捗のモニタリングや改善のための意思決定に役立つ。

V字モデルのトレーサビリティで、開発プロセス全体の一貫性と品質を高める

シリーズ: システム開発の基礎

TRACERYプロダクトマネージャーの haru です。

システム開発では、各プロセスの成果物が互いに関連しながら、一連のプロセスとして整合性を保っています。

要求、要件、設計、プログラム、テスト設計・項目といった各プロセスの成果物が対応づけられ、内容の関連をたどれる状態をトレーサビリティ(traceability:追跡可能性)*1といいます。

トレーサビリティを高めることで、成果物間の関係を明確にし、変更や不具合の原因を追跡しやすくなります。結果として、開発プロセス全体の一貫性と成果物の品質を大幅に向上させることができます

システム開発におけるトレーサビリティは、大きく次の2種類に分類されます。

  • V字モデル左辺のトレーサビリティ:要件から仕様、設計、実装へと成果物が連続的につながる関係
  • V字モデル左辺と右辺のトレーサビリティ:テストのプロセスで、対応する要件や仕様、設計を確認・検証する関係

システム開発における2種類のトレーサビリティ

本記事では、システム開発におけるトレーサビリティの基本的な考え方と、トレーサビリティを高めることで得られる品質向上の効果について解説します。

V字モデル左辺のトレーサビリティ

V字モデルの左辺のトレーサビリティは、たどる方向の違いによって、次の2つに分類されます。

  • 実現の追跡上から下へたどり、上位の要求や要件がどのように設計や実装へ展開されているかを確認する。
  • 理由の追跡下から上へたどり、各設計や実装がどの要件や意図に基づいて存在しているのかを明らかにする。

この2つの視点によって、成果物間の整合性を保ち、開発内容の妥当性を検証できるようになります。

実現の追跡

「実現の追跡」とは、V字モデルの左辺を上から下へたどり、上位の意図や要求がどのように要件・設計・プログラムへと具体化されているかを確認することです。

実現の追跡

たとえば、「ユーザーが安全にログインできるようにしたい」という要求が、機能要件として「ユーザー認証機能の提供」に展開され、さらに仕様や、設計やコードとしてどのように形になっているかをたどります。

この追跡によって、上位で定義した内容が意図どおりに実装へ反映されているかを検証でき、成果物間の整合性と品質を確保することができます。

何を、どのように実現したのか」を明らかにするトレーサビリティといえます。

理由の追跡

「理由の追跡」とは、V字モデルの左辺を下から上へたどり、設計やプログラムがどの要件や目的に基づいて存在しているのかを明らかにすることです。

理由の追跡

たとえば、コード内にある特定の処理について、その根拠となる設計要素や要件、さらには実現したい価値までさかのぼることで、「なぜこのように作るのか(Why)」を理解できます。

この追跡により、成果物の背景にある意図を把握し、設計方針との不整合や不要な仕様の追加を防ぐことができます。

なぜそれが存在するのか」を明確にするトレーサビリティといえます。

V字モデル左辺と右辺のトレーサビリティ

V字モデルでは、左辺の各プロセスで作成された成果物を、右辺のテストプロセスで検証します。

右辺と左辺のトレーサビリティは、たどる方向の違いによって、次の2つに分類されます。

  • 検証カバレッジ追跡左から右へたどり、要件や設計で定義された内容が、どのテストで検証されているかを確認する。
  • 根拠追跡右から左へたどり、各テスト項目が、どの要件や設計に基づいているかを確認する。

以下の表は、各レイヤーの検証観点です。

V字の左辺 V字の右辺 検証観点
企画 運用・評価 課題を解決し、価値を創出しているか
業務要件定義 運用テスト 業務が運用できるか
システム要件定義 システムテスト システムの動作が正しいか
基本設計 結合テスト ソフトウェアの動作が正しいか
詳細設計 単体テスト 各コンポーネントやモジュールの動作が正しいか
プログラミング コードレビュー コード品質が基準を満たしているか

検証カバレッジ追跡

「検証カバレッジ追跡」とは、V字モデルの左側から右側へたどり、要件や設計で定義された内容が、どのテストで検証されているかを確認することを指します。

検証カバレッジ追跡

たとえば、要件定義で示された機能要件が、システムテストで確実に検証されているか、また設計で定義した仕様が、結合テストで十分に確認されているかを対応づけて確認します。

この追跡によって、定義された内容がテストで網羅的にカバーされているか(テスト漏れがないか)を明確にできます。

根拠追跡

根拠追跡」とは、V字モデルの右側から左側へと対応をたどり、各テスト項目がどの要件や設計に基づいて作成されているのかを確認し、テストが要件どおりに設計されていることを明確にすることを指します。

根拠追跡

たとえば、システムテストで用意されたテストケースについて、そのテストがどの機能要件を検証するためのものなのかを明確に対応づけることで、テストの目的を見失わず、検証の妥当性を確保できます。

これにより、テスト項目の目的や妥当性を支える根拠を明示でき、テストが定義された要件や仕様に基づいて正しく設計されていることを保証できます。

また、テストで不具合が発見された場合には、その原因を要件や仕様までさかのぼって特定することが容易になります。

まとめ

トレーサビリティは、システム開発において、各プロセスの成果物がどのように関連し、整合性を保っているかを明確にするための仕組みです。

V字モデルの左辺では、要求や要件がどのように設計・実装へと具体化されたかをたどる「実現の追跡」と、設計や実装がどの目的や意図に基づいているかを明らかにする「理由の追跡」により、開発内容の妥当性を確認します。

右辺では、テストを通じて左辺の成果物を検証します。

要件や設計がどのテストで確認されているかを明らかにする「検証カバレッジ追跡」と、各テスト項目がどの要件や設計に基づいているかを明確にする「根拠追跡」によって、テストの網羅性と正当性を保証します。

これら4つのトレーサビリティを確立することで、開発プロセス全体の一貫性と品質を高めることができます。

次回は、V字モデルにおける右辺の各プロセスの関係について説明します。

tracery.jp

この記事を書いた人
haru

佐藤治夫。株式会社ビープラウド代表取締役社長。TRACERYのプロダクトマネージャー。エンジニアとして活動を始めて以来、モデリングを中心としたソフトウェアエンジニアリングを実践している。Xアカウント: https://x.com/haru860

*1:考慮の対象となっているものの履歴・適用・所在を追跡できることを指す。不適合が発見された場合に、その原因をさかのぼって特定できる性質を意味する。システム開発に限らず、あらゆる品質管理の分野で用いられる概念である。(ISO 9000/JIS Q 9000「Quality management systems — Fundamentals and vocabulary」)

V字モデルの各レイヤー(プログラミング、コードレビュー編)

シリーズ: システム開発の基礎

TRACERYプロダクトマネージャーの haru です。

この記事ではV字モデルのレイヤーのうち、「プログラミング」プロセスと「コードレビュー」プロセスについて説明します。

V字モデルの各レイヤーの説明は以下の記事を参照してください。

tracery.jp

V字モデル上の「プログラミング」と「コードレビュー」

プログラミングコードレビューは、V字モデルの底に位置し、ソフトウェアの設計を実際のコードとして具現化するプロセスです。

V字モデルの底にあることが示すように、プログラミングとコードレビューはソフトウェア開発全体の品質を支える土台です。

以下では、V字モデルにおける「プログラミング」と「コードレビュー」の関係や重要性について解説します。

V字モデル上の「プログラミング」プロセスと「コードレビュー」プロセス

プログラミングプロセスとコードレビュープロセス

プログラミングでは、設計で定義された仕様に基づき、ソフトウェア本体のコードや単体テスト(UnitTest)のテストコードを実装します。

ここで作られるコードは、ソフトウェアの価値と品質を最も直接的に形づくる成果物であり、プログラミングは開発の成否を左右する中核的なプロセスといえます。

コードレビューは、その成果物を第三者の視点でコードを査読し、設計意図との整合性、可読性、保守性、命名や責務分離の妥当性といった内部品質の観点から検証するプロセスです。

手動テストやUnitTestは、外部仕様どおりに動作するかを確認するブラックボックステストですが、コードレビューはソースコードの構造や設計意図を直接確認するホワイトボックス的な品質保証活動です。

コードレビューで欠陥を早期に発見することで、結合テストやシステムテストなど後続プロセスでの手戻りを防ぎ、結果として開発の安定性とチーム全体の生産性を高めます。

プログラミングプロセスとコードレビュープロセスの対応

コードレビューが果たす役割

コードレビューの目的は、単なる不具合の検出にとどまりません。

レビューを通じて設計思想を共有し、チームの文化を育てることにもつながります。

他者のコードを読む経験は、開発者の理解を深め、属人化を防ぎ、チーム全体の開発力を底上げします。

コードレビューによって問題のあるコードを早期に修正出来ます。それ以上に、コードレビューをしてもらうという意識を持ってコーディングすることで、単に動けばよいという意識でコードを書いてしまう問題を防ぐことが出来ます。

コードレビューは「作るプロセス(Make)の質」を高める仕組みといえるでしょう。

最後に

本記事では、プログラミングプロセスとコードレビュープロセスの関係について解説しました。

今日、多くの事業はソフトウェアによって支えられています。ソフトウェアの品質を高めることは、事業の信頼性・継続性・競争力を維持する経営活動そのものです。品質が損なわれれば、顧客離れや開発コストの増大、さらにはサービス停止といった経営リスクに直結するからです。

コードは、ソフトウェアの価値と品質を最も直接的に形づくる成果物であり、ソフトウェアの本質はソースコードにあります。

コードの品質が低ければ、機能追加や改修のたびに不具合が再発し、システム全体の安定性を損ないます。結果として、組織のスピードと信頼の両方が失われます。

コードの品質を高める最も有効な手段が、コードレビューです。レビューは単なる不具合検出の仕組みではなく、開発者同士が知見を共有し、設計思想や品質基準を組織全体に浸透させる技術的学習の場でもあります。

このように、経営の観点から見てもコードレビューは非常に有効です。

まだコードレビューを実施していない組織は、ぜひ導入を検討してください。

次回は、V字モデルの左辺の各プロセスの関係性(トレーサビリティ)について説明します。

この記事を書いた人
haru

佐藤治夫。株式会社ビープラウド代表取締役社長。TRACERYのプロダクトマネージャー。エンジニアとして活動を始めて以来、モデリングを中心としたソフトウェアエンジニアリングを実践している。Xアカウント: https://x.com/haru860

V字モデルの各レイヤー(詳細設計、単体テスト編)

シリーズ: システム開発の基礎

TRACERYプロダクトマネージャーの haru です。

この記事ではV字モデルのレイヤーのうち、「詳細設計」プロセスと「単体テスト」プロセスについて説明します。

V字モデルの各レイヤーの説明は以下の記事を参照してください。

tracery.jp

V字モデル上の「詳細設計」と「単体テスト」

V字モデルでは、右側のプロセスが左側のプロセスの検証を行う役割を果たします。

詳細設計では、ソフトウェアを構成するコンポーネント、画面、API、機能などの詳細な構造、そしてそれらを構成する関数やメソッドなどのモジュールを実装可能なレベルまで具体化します。

単体テストでは設計どおりに各モジュールや機能が正しく動作するかを検証します。

V字モデル上の「詳細設計」と「単体テスト」

以下、それぞれのプロセスを説明します。

詳細設計プロセス

詳細設計は、基本設計で定義したソフトウェアの各コンポーネント(画面、API、機能)やクラス、データベース構造を、実装可能なレベルまで具体化するプロセスです。

モジュールやクラス、処理フロー、データ構造などをさらに明確にし、実装担当者が迷わずに実装できる状態にすることを目指します。

詳細設計プロセス

ただし、すべてをドキュメントで定義することが必ずしも効率的とは限りません。

開発チームのスキルや設計対象の機能によっては、コードを書きながら設計を具体化するほうが生産性や理解度が高い場合もあります。

一方で、複雑な処理や複数モジュールが連携する部分では、クラス図やシーケンス図などを併用して設計意図を共有することが有効です。

詳細設計は「必要な部分を明確に伝える」ことを重視し、状況に応じて設計と実装の最適なバランスを取ることが「すべて書く」事よりも重要です。

単体テストプロセス

単体テストは、ソフトウェアを構成する画面、API、機能、そしてそれらを構成する関数やメソッドなどのモジュールを対象に、それぞれが単独で正しく動作するかを検証するプロセスです。

画面では入力チェックやボタン操作などの個別動作、APIでは単一エンドポイントの入出力やエラー処理、モジュールでは内部ロジックや計算結果の正確性を確認します。

こうしたコンポーネント間、たとえば画面とAPIの連携のように複数要素が関わる動作は、結合テストの範囲として区別します。

単体テストプロセス

単体テストには、プログラムコードによる自動テスト(Unit Test)と、人による確認テスト(手動テスト)の両方があります。

自動テストでは、関数・メソッド・クラス単位で入力値と期待結果を定義し、仕様どおりに動作することをテスト用のプログラムコードで検証します。

一方、人による確認テストでは、画面の表示内容やメッセージ、操作感など、自動化が難しい要素を実際に操作して確認します。

単体テストの段階で品質を確実に積み上げることは、後続の結合テストやシステムテストを安定して進めるための基盤となります。

この段階で不具合を早期に検出し、モジュール単位で信頼性を確保しておくことで、上位工程では動作確認や統合検証に集中でき、結果としてソフトウェア全体の品質を高い水準で維持することが可能になります。

まとめ

本記事では、V字モデルにおいて対応する工程である詳細設計と単体テストの内容と、その関係について解説しました。

詳細設計では、画面・API・機能といったコンポーネントや、それらを構成するモジュールの構造や処理の流れを、実装できるレベルまで具体化します。

単体テストは、詳細設計で定義された内容をもとに、各コンポーネントやモジュールが設計どおりに正しく動作するかを検証します。

単体テストの段階で不具合を早期に検出し、モジュール単位で信頼性を確保することで、後続の結合テストやシステムテストを安定して進められるようになり、結果としてソフトウェア全体の品質を高める基盤となります。

このように、詳細設計と単体テストを確実に実施することは、ソフトウェア全体の品質を継続的に高めていくベースになります。

次回の記事では、V字モデルにおける「プログラミング」プロセスと「コードレビュー」の関係を説明します。

tracery.jp

この記事を書いた人
haru

佐藤治夫。株式会社ビープラウド代表取締役社長。TRACERYのプロダクトマネージャー。エンジニアとして活動を始めて以来、モデリングを中心としたソフトウェアエンジニアリングを実践している。Xアカウント: https://x.com/haru860

V字モデルの各レイヤー(基本設計、結合テスト編)

シリーズ: システム開発の基礎

TRACERYプロダクトマネージャーの haru です。

この記事ではV字モデルのレイヤーのうち、「基本設計」プロセスと「結合テスト」プロセスについて説明します。

V字モデルの各レイヤーの説明は以下の記事を参照してください。

tracery.jp

V字モデル上の「基本設計」と「結合テスト」

V字モデルでは、右側のプロセスが左側のプロセスの検証を行う役割を果たします。

V字モデル上の「基本設計」プロセスと「結合テスト」プロセス

基本設計は、ソフトウェア全体の構造を明確にし、各コンポーネント(画面・機能・APIなど)の責務や連携方法を設計するプロセスです。ソフトウェア全体としての整合性と拡張性を考慮しながら、後続の詳細設計や実装の指針となる仕様を設計します。

結合テストは、基本設計で定義したコンポーネント間の連携が意図したとおりに機能するかを確認するプロセスです。個々のモジュールを組み合わせ、データの受け渡しや処理の流れが設計仕様どおりに動作するかを検証します。最終的にソフトウェア全体の品質を保証することが目的です。

基本設計がソフトウェア全体の構造と連携の仕組みを定義するプロセスであるのに対し、結合テストは、基本設計で定義されたとおりにソフトウェアが正しく連携し、期待どおりに動作することを検証するプロセスです。これにより、ソフトウェア全体の整合性と信頼性を保証します。

基本設計と結合テストの関係

以下、それぞれのプロセスを説明します。

基本設計プロセス

基本設計は、ソフトウェア全体の構造を定義する設計と、各コンポーネントの具体的な仕様を定義する設計の2つに分類されます。

前者はシステムの骨格を形づくり、後者はユーザーが直接触れる機能やソフトウェアの振る舞いを設計します。

  • ソフトウェア全体の構造を定義する設計
    • ソフトウェアアーキテクチャ設計
      • コンポーネント間の連携方法、モジュールの責務分担、データや制御の流れを整理し、システム全体の構造と原則を定める。
    • クラス設計(ドメインモデル設計)
      • 業務上の概念やルールをクラスとして整理し、クラス間の関係をモデル化する。システムの静的構造を明確にし、オブジェクト指向設計の基盤を築く。
    • データベース設計
      • 永続化すべき情報をテーブルとして定義し、属性やリレーションをデータ構造として具体化する。
  • ソフトウェアを構成するコンポーネントの仕様を定義する設計
    • 画面設計
      • ユーザーが操作する画面の構成や画面間遷移、入力項目や表示内容など、UIの仕様を定義する。
    • API設計
      • コンポーネント間や外部システムとのインターフェースを定義し、入出力データ形式や処理内容、エラーハンドリング方針を設計する。
    • 機能設計
      • 画面やAPIに属さない業務処理(バッチ、スケジュール処理など)の動作仕様を定義する。システム全体の機能整合性を保つ役割を担う。

基本設計プロセス

結合テストプロセス

結合テストプロセスは、ソフトウェア全体としての連携機能とデータの整合性を確認し、品質を保証するためのプロセスです。

結合テストプロセスでは、画面・API・バッチ処理など、単体で動作確認済みのコンポーネントを順に結合し、インターフェース間のデータ授受や制御の流れが設計どおりに動作するかを検証します。

たとえば、会員がマイページで登録情報を更新した際に、その内容が運営側の会員管理画面に正しく反映されるかを確認します。ここでは、画面・API・データベースが連携して一連の処理を成立させていることを確かめるのが目的です。

結合テストを効果的に進めるには、関連性の高いコンポーネントから段階的に結合し、品質を積み上げていくアプローチが重要です。こうした漸進的な進め方により、不具合の発生箇所を特定しやすくなり、修正による副作用も抑制できます。

一方で、すべてのコンポーネントを一度に結合して動作を確認する「ビッグバンテスト*1」は、問題が発生した際に原因を切り分けにくく、修正の影響範囲も広がりやすい傾向があります。そのため、品質向上よりも不具合調査や再検証の負担が増大し、結果的に開発全体の効率と安定性を損ねるケースが少なくありません。

結合テストプロセス

まとめ

V字モデルにおける「基本設計」と「結合テスト」は、設計と検証が対となる関係にあります。

基本設計では、ソフトウェア全体の構造やコンポーネント(画面、API、機能)の仕様を定義します。

これに対して結合テストは、その設計内容が実際の動作として正しく機能するかを確認し、設計の妥当性を検証するプロセスです。

両者を対応づけて理解することで、設計段階での意図とテスト段階での確認が一貫し、ソフトウェア全体の品質を高めることができます。

次回の記事では、V字モデルにおける「詳細設計」プロセスと「単体テスト」の関係を説明します。

tracery.jp

この記事を書いた人
haru

佐藤治夫。株式会社ビープラウド代表取締役社長。TRACERYのプロダクトマネージャー。エンジニアとして活動を始めて以来、モデリングを中心としたソフトウェアエンジニアリングを実践している。Xアカウント: https://x.com/haru860

*1:「あらゆるモジュール・コンポーネントを一斉に結合してテストする」という実践方式が、「宇宙が一度に爆発的に誕生した」という宇宙論上の「ビッグバン理論(Big Bang)」のイメージに似ていることから付けられたと言われている。

V字モデルの各レイヤー(要件定義、運用テスト・システムテスト編)

シリーズ: システム開発の基礎

TRACERYプロダクトマネージャーの haru です。

この記事ではV字モデルのレイヤーのうち、「要件定義」プロセスと「運用テスト」「システムテスト」プロセスについて説明します。

V字モデルの各レイヤーの説明は以下の記事を参照してください。

tracery.jp

V字モデル上の「要件定義」と「運用テスト」「システムテスト」

業務/システムで、何を実現するかということに焦点を当てたWhatのレイヤーでは、「要件定義」プロセスと「運用テスト」プロセス、「システムテスト」プロセスを実施します。

Whatのレイヤーは、V字モデルのWhyレイヤー(企画のプロセスがある)の下にあり、「企画」プロセスで定めた「Why」を実現するためのレイヤーです。

V字モデル上の「要件定義」プロセスと「運用テスト」「システムテスト」プロセス

V字モデルでは、右側のプロセスが左側のプロセスの検証を行う役割を果たします。

要件定義は、大きく次の2つに分類されます。

  • 業務要件定義:事業の目的を達成するために、業務として「何を・どのように行うか」を明確にし、業務の目的・手順・ルールを整理する。
  • システム要件定義:業務要件を実現するために、システムとして「どのような機能・性能・制約で支援するか」を具体的に定める。

これら2つの要件定義は、開発後のテストプロセス(運用テスト、システムテスト)と対応します。

業務要件に基づいて実際の運用を確認するのが運用テスト、システム要件に基づいて動作を検証するのがシステムテストです。

それぞれの特徴を以下に整理します。

テスト名 主な観点 主な実施者
運用テスト - 業務要件の観点から、業務が実際に問題なく運用できるかを確認
- 操作手順や運用ルール、帳票・通知など業務成果物を検証
- 業務担当者
- ビジネス側責任者
システムテスト - システム要件の観点から、システム全体が仕様どおりに動作するかを確認
- 機能、性能、セキュリティなど非機能面も含めて検証
- システム開発者
- 品質保証担当者

運用テストとシステムテストは、本番稼働前の最終テストです。

特に、実運用に近い環境でテストを実施することで、環境差による不具合や想定外の業務上の問題を早期に発見しやすくなります(下図)。

運用テストとシステムテストの違い

以下、それぞれのプロセスを説明します。

要件定義プロセス

以下の図に、要件定義プロセスの全体像を示しました。要件定義は、大きく業務要件定義システム要件定義に分類されます(下図)。

要件定義プロセス

要件定義プロセスについては、『要件定義とはそもそも何か』の連載で説明していますので、詳細をご参照ください(以下は連載の第1回です)。

tracery.jp

運用テストプロセス

運用テストは、業務要件の観点から、業務が実際に問題なく運用できるかを確認します。

操作手順や運用ルール、帳票・通知など業務成果物を検証します。

ビジネス側が開発側に依頼した開発内容を検証するためという目的も含まれるので、『受け入れテスト』と呼ぶこともあります。

運用テストの観点

運用テストの目的は、業務要件定義で定めた業務の流れやルールが、システム上で正しく再現され、実際の運用として成立しているかを確認することです。

主に次の観点からテストを実施します。

  • 業務フローに沿って、システムを用いながら業務を一連の手順として遂行できるか
  • ユースケース(システムを利用する具体的な場面)において、想定どおりの操作・結果が得られるか

これらの業務観点に加え、運用全体の妥当性を確認するため、以下の観点からも検証します。

  • 事業要件が実際に満たされ、業務を通じて事業上の価値が発揮されているか
  • システム要件(機能要件・非機能要件)が、運用に必要な品質レベルを満たしているか

これらを総合的に確認することで、システムが業務運用を安全かつ確実に支える状態にあるかを最終的に評価します。

運用テストプロセスの観点

システムテストプロセス

システムテストは、システム要件の観点から、システム全体が仕様どおりに動作し、期待した品質を満たしているかを確認します。

機能要件・非機能要件をもとに、画面操作やバッチ処理、外部システムとの連携などを総合的に検証します。

開発側が作成したシステムが要件定義書どおりに実装されているかを確認する工程であり、システムの完成度と品質を保証する役割を担います。

システムテストプロセスの観点

システムテストの目的は、システム要件定義で定めた機能・性能・制約が、システム全体として統合的に動作し、要求どおりの品質を備えていることを確認することです。 開発工程の最終段階として、システムの完成度と運用準備性を総合的に検証します。

主に次の観点からテストを実施します。

  • システム要件(機能要件・非機能要件)が、運用に耐えうる品質水準を満たしているか
  • ハードウェア、ネットワーク、外部システム、ソフトウェアなど、関連要素が相互に連携し、全体として安定して動作するか

これらのシステム観点に加えて、運用フェーズでの実効性を確認するため、次の視点からも検証を行います。

  • 想定した業務フローやユースケースに沿って、利用者が業務を正確かつ効率的に遂行できるか
  • システムの稼働により、業務上求められる成果や情報が確実に得られるか

これらを総合的に検証することで、システムが要件定義段階で期待された品質を満たし、業務運用に移行できる状態であることを確信する段階が、システムテストです。

システムテストプロセスの観点

最後に

この記事では、V字モデルにおける「要件定義」プロセスと、「運用テスト」「システムテスト」プロセスの関係について解説しました。

「要件定義」プロセスは、システム開発において何を作るのか(What)を明確にします。

これに対応して、「運用テスト」は業務要件が実際の運用で満たされているかを、業務担当者が最終的に確認するプロセス、「システムテスト」はシステム要件が仕様どおり実現されているかを、開発者が最終的に検証するプロセスです。

運用に耐えうるシステムをリリースするためには、業務担当者の視点(業務が確実に遂行できるか)と、システム開発者の視点(システムが安定して動作するか)の双方からテストを実施することが不可欠です。

そのうえで、業務・システムが連携し、事業要件を満たしながら持続的に価値を生み出す状態を目指すことが重要です。

次回の記事では、V字モデルにおける「基本設計」プロセスと「結合テスト」の関係を説明します。

tracery.jp

この記事を書いた人
haru

佐藤治夫。株式会社ビープラウド代表取締役社長。TRACERYのプロダクトマネージャー。エンジニアとして活動を始めて以来、モデリングを中心としたソフトウェアエンジニアリングを実践している。Xアカウント: https://x.com/haru860

要件定義と設計の関係を体系的に理解する【全体像まとめ】

シリーズ: 要件定義とはそもそも何か

TRACERYプロダクトマネージャーの haru です。

システム開発において、要件定義と設計は密接に連動するプロセスです。

要件定義で整理された「何を作るか(What)」という要件を基に、設計では「どのように実現するか(How)」を具体化していきます。

本記事では、これまでの連載で解説してきた内容を整理し、要件定義と各種設計(ソフトウェアアーキテクチャ設計、クラス設計、データベース設計、画面・API・バッチ処理設計)との関係を体系的に説明します。

要件定義と設計の関係、全体像

下図に、本連載で説明してきた要件定義と設計の関係を示します。

要件定義と設計の関係、全体像

要件定義の目的とゴールは『設計プロセスを円滑に進めるための明確で具体的なインプットを提供すること』です。

以降で要件定義で作成された成果物をもとに、ソフトウェアアーキテクチャ設計、クラス設計、データベース設計、画面・API・バッチ処理設計といった各設計にどのようにつなげていくのかを順に解説します。

要件定義とソフトウェアアーキテクチャ設計の関係

ソフトウェアアーキテクチャは、システム構成図に示された各アプリケーションの構造を設計したものです。

コンポーネント間の連携方法、モジュールの責務分割、データの流れなど、ソフトウェア内部の構造を体系的に設計します。

この設計は、単に機能を実現するだけでなく、保守性・性能効率性・使用性・セキュリティといった非機能要件を実現することを目的とします。

適切なアーキテクチャ設計により、将来的な拡張や変更への柔軟性、安定した運用性が確保されます。

要件定義とソフトウェアアーキテクチャ設計の関係

詳しくは、以下の記事をご参照ください。

tracery.jp

要件定義とクラス設計の関係

クラスは、システム内で扱う「対象(オブジェクト)」を表現する基本単位です。

対象の性質を示す属性と、その動作を定義するメソッドによって構成されます。

クラス図は、これらのクラス同士の構造や関係を可視化したもので、システムの静的な設計構造を理解するための重要な設計図です。

その中でも、業務の中で扱う実体(顧客・注文・商品など)とその関係、業務ルールや振る舞いを表現したものを「ドメインモデル」と呼びます。

ドメインモデルは、システムが再現すべき業務の仕組みを明確にし、設計全体の中核となるモデルです。

これを適切に設計することで、業務ロジックが整理され、変更や拡張にも強い構造を実現できます。

また、ドメインモデルは要件定義と密接に結びついています。

要件定義で作成された成果物から、クラス・属性・メソッドの候補を抽出できます。

たとえば、概念モデル機能要件からはクラスや属性を、ロバストネス図状態遷移図からはメソッドや状態変化を導き出します。

このようにして、要件の意図をクラス図(ドメインモデル)として構造化し、業務の仕組みをシステム上で再現できる形に具体化していきます。

要件定義とクラス設計の関係

詳しくは、以下の記事をご参照ください。

tracery.jp

要件定義とデータベース設計の関係

データベース設計(ER図)は、クラス図を基盤として体系的に進めることができます。

クラス図で定義されたクラスのうち、永続化が必要なものをテーブルとして設計し、属性やリレーションを具体的なスキーマに落とし込みます。

また、要件定義で作成された成果物(概念モデル機能要件の記述、状態遷移図)は、クラス設計に反映されるだけでなく、データベース設計にも密接に関わります。

これらの要件の意図が、データ構造や制約設計にまで意図通りに反映されているかを検証することが欠かせません。

さらに、データベース設計では、性能効率、データ品質、セキュリティ、保守性といった非機能要件を十分に考慮する必要があります。

これらが軽視されると、応答遅延、データ不整合、情報漏えい、改修コストの増大など、運用上の重大な問題を引き起こすリスクが高まります。

要件定義とデータベース設計の関係

詳しくは、以下の記事をご参照ください。

tracery.jp

要件定義と画面設計、API設計、バッチ処理設計の関係

画面設計API設計バッチ処理設計はいずれも、要件定義で作成された機能要件非機能要件一覧システム構成図を基に進めます。

これらの設計では、システム構成図に示された技術要素(プログラミング言語、ミドルウェア、フレームワークなど)や通信方式を設計のベースとして進めます。 そのうえで、機能要件非機能要件に定義された条件を満たすよう、処理内容・性能・セキュリティ・運用性などの観点から設計を具体化します。

処理の入力・処理・出力を設計する際には、設計プロセスで作成されたクラス図(ドメインモデル)やER図を参照し、処理とデータの整合を確保します。

また、画面設計API設計バッチ処理設計を進める過程で、クラスや属性・メソッドの追加・修正、テーブルやカラムの追加・修正などが発生する場合は、クラス設計やDB設計にフィードバックし、全体の設計を精緻化していきます。

要件定義と画面設計、API設計、バッチ処理設計の関係

詳しくは、以下の記事をご参照ください。

tracery.jp

tracery.jp

tracery.jp

システムの視座から業務・事業の視座へ

設計、特に画面やAPI、バッチ処理といった機能単位の設計をする際には、その機能がどのような業務で利用され、誰の課題を解決し、事業全体としてどのような価値を生み出すのかまでを見通すことが重要です。

つまり、システムの視座*1から業務の視座へ、さらに事業の視座へと移動し、考えることが求められます(下図)。

これにより、事業の成果や顧客価値*2の創出につながるシステムを設計できるようになります。

業務、事業の視座へ移動する

視座を移動するためには、要件定義の重要ポイント〜要望・要求・要件を見極める - TRACERY Lab.(トレラボ)で説明したように、以下の2つの問いが有効です。

  • ユースケースはなにか?(業務レベルの視座に引き上げる問い)
  • その機能によって解決される問題や生まれる価値はなにか?(事業レベルの視座に引き上げる問い)

最後に

本連載で示したように、プロセスと成果物の関係を俯瞰し、頭の中に地図のように描いておくと、開発を進める中で「どの情報が足りないのか」「どの工程に戻るべきか」を素早く判断できるようになります。

それは、部分最適に陥らず、プロジェクト全体を見渡して判断する力につながります。

今回で「要件定義とはそもそも何か」全18回の連載は完結です。

本連載では、要件定義の考え方や進め方を体系的に整理し、現場で実践するための道筋を示してきました。

要件定義は、システム開発の成否を左右する重要なプロセスです。

この連載の内容が、皆さまのプロジェクトをより確かな成果へ導く一助となることを願っています。

この記事を書いた人
haru

佐藤治夫。株式会社ビープラウド代表取締役社長。TRACERYのプロダクトマネージャー。エンジニアとして活動を始めて以来、モデリングを中心としたソフトウェアエンジニアリングを実践している。Xアカウント: https://x.com/haru860

*1:物事を認識する時の立場のこと

*2:「アウトカム」ということが多い。