はじめに
高凝集・低結合にする、デザインパターンを使う、設計書を詳しく書く。これらは設計を改善する手段ですが、実施しただけで設計品質が高いとは判断できません。
設計の良し悪しは、求められる機能や品質、予算や納期、既存環境などの条件に照らして判断します。この記事では、設計品質の意味と、設計を評価するための基本的な観点を解説します。
この記事で分かること
- 設計品質とは何か
- コード品質やシステム品質との違い
- 設計品質を判断する4つの観点
- 設計手法や指標を目的化してはいけない理由
設計品質とは
設計品質とは、設計上の判断が要求と制約に適合し、必要な機能と品質を実現できる度合いです。責務、依存関係、データの流れ、異常時の扱いなどが整理され、実装・テスト・変更・運用へつながる状態を目指します。
設計品質は、クラス数、設計書のページ数、原則やパターンの利用数では決まりません。同じ構造でも、短期間だけ使う社内ツールと、24時間停止できない決済システムでは、必要な品質と許容できるコストが異なります。
評価の前提となるのは、「何を実現するか」と「どのような品質で実現するか」です。詳しくは、機能要件と非機能要件の違いとは?システム設計で重要な考え方をわかりやすく解説で説明しています。
設計品質とコード品質・システム品質の違い
用語の範囲は組織によって異なりますが、本記事では次のように整理します。
| 対象 | 主に評価するもの | 例 |
|---|---|---|
| 設計品質 | 要求を実現するための構造と判断 | 責務、依存関係、データの流れ、異常時の扱い |
| コード品質 | 設計を実装したコードの状態 | 命名、重複、複雑さ、テストのしやすさ |
| システム品質 | 稼働するシステムが提供する結果 | 応答時間、安定性、安全性、使いやすさ |
三つは独立しているわけではありません。要求を設計へ変換し、コードとして実装し、稼働結果で確かめる関係にあります。
設計品質を判断する4つの観点
要求と制約に適合しているか
設計は、必要な機能と品質を実現し、前提となる制約に反していない必要があります。利用者数、応答時間、権限、外部システムとの接続条件、予算、納期、既存環境など、何を実現するための設計なのかを基準に評価します。
責務・依存関係・データの流れが明確か
各処理が何を担当し、どこへ依存し、データがどのように受け渡されるかを説明できる必要があります。構造を選んだ理由を要求や制約と結び付けられれば、担当者の好みではなく、設計判断として議論できます。
業務ルールと外部技術の責務を分け、ソースコード上の依存方向を整理する具体的な考え方としてクリーンアーキテクチャがあります。目的と適用時の注意点は、「クリーンアーキテクチャとは?業務ルールを外部技術から分離する設計の考え方」で解説しています。
変更や障害の影響を予測できるか
仕様変更でどこを修正し、どこまで確認するか、障害時にどの処理と情報を調査するかを追跡できることも重要です。凝集度と結合度は、この観点を確認する判断材料になります。詳しくは、凝集度と結合度の違い|高凝集・低結合が望ましい理由と判断方法を参照してください。
実装・テスト・運用で確認できるか
設計内容は、後続工程で利用できる具体性を持つ必要があります。「権限に応じて表示する」だけでなく権限ごとの閲覧範囲を決め、「高速に検索する」だけでなく対象データ量、応答時間、測定条件を決めます。
品質をすべて最大化することはできない
詳細なログは障害調査をしやすくしますが、保存容量や機密情報の管理が必要です。細かな権限制御は安全性を高める一方で、設定と運用を複雑にします。抽象化は変更を分離できますが、理解する構造が増えます。
重要なのは、すべての品質を一律に高めることではありません。目的と制約から優先順位を決め、その選択理由を説明できることです。詳しくは、設計とは、何を優先するかを決める仕事であるで解説しています。
注文履歴機能の設計品質を判断する例
注文履歴を検索する機能を例に、要求と設計判断、確認方法を対応させます。
| 要求・制約 | 設計上の判断 | 確認方法 |
|---|---|---|
| 通常の検索を2秒以内に完了する | 対象データ量を定め、検索範囲や取得件数を制御する | 想定データ量を使った性能テスト |
| 担当者と管理者で閲覧範囲が異なる | 権限ごとの閲覧条件と判定する場所を明確にする | 権限別の正常・異常テスト |
| 障害時に対象の注文を追跡する | 注文IDや処理結果を調査用ログへ残す | 障害を想定した調査手順の確認 |
| 将来、検索条件が追加される | 検索条件とデータ取得の役割を整理する | 条件追加時の修正箇所と回帰範囲の確認 |
特定の技術を採用したことではなく、要求に対する設計判断があり、その結果を確認する方法までつながっていることが重要です。
設計品質を評価するときの注意点
- 高凝集・低結合を目的にしない:分割しすぎると、処理の流れを追う負担が増えます。
- パターンの利用数で評価しない:パターンは問題に合う場合に使う解決候補です。
- 設計書の量で評価しない:判断理由や後続工程に必要な内容がなければ十分ではありません。
- 現在動いていることだけで判断しない:変更、障害、運用時の影響も確認します。
- 将来を予測して複雑にしすぎない:具体的な要求のない構造は、現在の理解と変更を難しくします。
設計品質は設計時点だけで確定しない
設計段階では、要件や制約との整合性、判断の不足、実現可能性、確認可能性をレビューします。具体的な進め方は、設計レビューとは?目的・進め方・確認観点をわかりやすく解説で説明しています。
実装とテストでは設計内容を同じ前提で利用できるかを確認し、運用開始後は実際の変更範囲、障害調査、性能、運用負荷から設計判断を見直します。問題が見つかった場合は、既存コードを小さく安全に改善します。詳しくは、リファクタリングとは?動作を変えずにコードを改善する考え方を参照してください。
まとめ
設計品質とは、設計上の判断が要求と制約に適合し、必要な機能と品質を実現できる度合いです。評価するときは、要求と制約への適合、構造の明確さ、変更・障害時の影響予測、後続工程での確認可能性という複数の観点を使います。
原則、パターン、設計書、指標は手段です。使ったかどうかではなく、今回のシステムに必要な価値を実現し、その判断と結果を確認できるかで評価することが重要です。


コメント