要件定義 / 基本設計 / 詳細設計
基本:共通仕様 / 機能一覧 / テーブル一覧 / 画面一覧 / 画面遷移
詳細:テーブル定義書 / 画面定義書 / イベント仕様書
Microsoft が MIT ライセンスで提供するサンプル データベース「Northwind」を題材に、
要件定義 → 基本設計 → 詳細設計 のドキュメント・フォワードを行い、
その詳細設計をコーディング・エージェントに渡して実装させることを目的とする。
したがって本成果物は「読み物」ではなく実装の入力であり、実装者が判断に迷う余地(行間)を残さないことを最優先とする。
README.md に記載されたモジュール一覧は検討の出発点であり、確定した要件は本書を正とする。
Northwind が表す「食品卸売業者」の業務を対象とした、社内向けの Web 業務アプリケーション。
受注を中心とした日常業務(登録・照会・更新)と、蓄積データの分析・可視化の 2 系統からなる。
| 項目 |
内容 |
| 利用者 |
自社の営業担当者・営業事務・管理者(社内利用) |
| 利用形態 |
ブラウザからのマルチユーザ利用 |
| 対象データ |
Northwind データベース(顧客・商品・仕入先・社員・受注・配送) |
| 想定データ量 |
顧客 100 件程度、商品 100 件程度、受注 1,000 件程度(サンプル規模) |
- 3 節のモジュール一覧に挙げた 9 モジュールの機能
- Northwind 原典のテーブル構造を保った DB 設計(Web 化に必要な最小限の追加を含む)
- 画面からの CRUD、検索、集計・分析の表示、印刷用の帳票画面
本システムはサンプルであり、次は対象外とする。
| 対象外 |
理由 |
| 認証・認可、ロールによる権限制御 |
サンプルとして過剰。全利用者が全機能を利用できるものとする |
| 多言語対応・多通貨対応 |
表示は日本語、金額は単一通貨として扱う |
| 外部システム連携(会計・EDI・決済) |
対象業務の外 |
| 変更履歴・監査ログ、論理削除 |
サンプルとして過剰 |
| 非同期処理(バッチ・ジョブ・帳票のサーバ生成)、データ・キャッシュ層 |
サンプルとして過剰。帳票は同期の印刷用画面とする |
| ワークテーブル・採番テーブル |
採番は IDENTITY を用いる |
| ドメイン駆動設計(DDD)に基づく設計 |
サンプルとして過剰 |
| 区分 |
内容 |
| データベース |
Microsoft SQL Server の Northwind サンプル DB。テーブル・列の削除や改名は行わない |
| 技術スタック |
特定のフレームワークに依存しない。詳細設計は一般的な Web アプリケーションの用語で記述する |
| 排他制御 |
複数利用者による同時更新があり得るため、更新系の機能は楽観排他とする |
| 顧客 ID |
Northwind の仕様どおり利用者が入力する 5 桁の英大文字コードとし、自動採番しない |
| 分析機能 |
集計はリアルタイムに DB へ問い合わせて算出する(集計済みテーブルや事前計算は持たない) |
| # |
モジュール |
コード |
主要テーブル |
区分 |
| 1 |
受注管理 |
ORD |
Orders / Order Details |
業務 |
| 2 |
顧客管理 |
CUS |
Customers / CustomerDemographics |
業務 |
| 3 |
商品管理 |
PRD |
Products / Categories |
業務 |
| 4 |
仕入先管理 |
SUP |
Suppliers |
業務 |
| 5 |
担当者管理 |
EMP |
Employees / Territories / Region |
業務 |
| 6 |
配送管理 |
SHP |
Shippers |
業務 |
| 7 |
売上分析 |
SLS |
Orders / Order Details(集計) |
分析 |
| 8 |
在庫分析 |
INV |
Products / Categories(集計) |
分析 |
| 9 |
パフォーマンス分析 |
PRF |
Employees / SalesTargets |
分析 |
「業務」モジュールは登録・更新を伴う。「分析」モジュールは原則として参照のみで、
例外はパフォーマンス分析の売上目標設定(登録・更新あり)。
| # |
要件 |
| ORD-R1 |
受注を一覧表示し、顧客・担当者・受注日の範囲・出荷状況で絞り込み検索できること |
| ORD-R2 |
受注 1 件の詳細(受注情報・明細・小計・送料・合計)を照会できること |
| ORD-R3 |
受注を新規登録できること。明細は複数行を追加・削除でき、金額は入力に応じて再計算されること |
| ORD-R4 |
受注および明細を編集できること。ただし出荷済みの受注は編集できないこと |
| ORD-R5 |
受注を削除できること。削除時は明細もあわせて削除されること |
| ORD-R6 |
出荷ステータス(出荷日・配送業者・送料)を更新でき、出荷を取り消せること |
| ORD-R7 |
受注 1 件について納品書・請求書を印刷できること |
| ORD-R8 |
廃番商品は新規の明細に指定できないこと |
| ORD-R9 |
出荷確定時に在庫数が引き落とされること |
| # |
要件 |
| CUS-R1 |
顧客を一覧表示し、会社名・担当者名・国・地域で絞り込み検索できること |
| CUS-R2 |
顧客の詳細(会社情報・連絡先)を照会できること |
| CUS-R3 |
顧客を新規登録・編集・削除できること。受注が存在する顧客は削除できないこと |
| CUS-R4 |
顧客の購買履歴(受注一覧と取引サマリ:累計受注件数・累計売上・最終受注日)を確認できること |
| CUS-R5 |
売上金額による顧客ランキングを、期間を指定して確認できること |
| # |
要件 |
| PRD-R1 |
商品を一覧表示し、商品名・カテゴリ・仕入先・廃番区分で絞り込み検索できること |
| PRD-R2 |
商品の詳細(仕入先情報・カテゴリ・単価・在庫数・発注済数・発注点)を照会できること |
| PRD-R3 |
商品を新規登録・編集・削除できること。受注明細が存在する商品は削除できないこと |
| PRD-R4 |
在庫数が発注点以下の商品を、一覧上で識別できること |
| PRD-R5 |
商品を廃番に設定・解除できること。廃番商品は新規受注に使用できないこと |
| PRD-R6 |
カテゴリを一覧表示し、登録・編集・削除できること。商品が存在するカテゴリは削除できないこと |
| # |
要件 |
| SUP-R1 |
仕入先を一覧表示し、会社名・国で絞り込み検索できること |
| SUP-R2 |
仕入先の詳細(担当者・連絡先・ホームページ)を照会できること |
| SUP-R3 |
仕入先を新規登録・編集・削除できること。商品が存在する仕入先は削除できないこと |
| SUP-R4 |
仕入先の取扱商品一覧を、在庫数・発注点とあわせて確認できること |
| SUP-R5 |
発注が必要な商品(在庫数 <= 発注点)を対象に、仕入先単位の発注書を印刷できること |
| # |
要件 |
| EMP-R1 |
社員を一覧表示し、氏名・役職・上司で絞り込み検索できること |
| EMP-R2 |
社員の詳細(連絡先・入社日・上司・担当テリトリー)を照会できること |
| EMP-R3 |
社員を新規登録・編集・削除できること。受注または部下が存在する社員は削除できないこと |
| EMP-R4 |
上司・部下の関係を木構造で表示できること |
| EMP-R5 |
社員が担当する受注の一覧と売上実績を確認できること |
| EMP-R6 |
社員へテリトリーを割り当て・解除できること |
| # |
要件 |
| SHP-R1 |
運送会社を一覧表示し、新規登録・編集・削除できること。受注が存在する運送会社は削除できないこと |
| SHP-R2 |
出荷ステータス(未出荷・出荷済・納期遅延)で受注を追跡できること |
| SHP-R3 |
運送会社ごとの実績(取扱件数・配送コスト合計・平均送料・納期遅延率)を比較できること |
| SHP-R4 |
配送先の国別に実績を集計して確認できること |
| SHP-R5 |
納期遅延は「出荷日 > 要求納期」、未出荷の遅延は「出荷日が未設定かつ要求納期 < 当日」と定義すること |
| # |
要件 |
| SLS-R1 |
期間を指定して売上サマリ(売上合計・受注件数・平均受注単価)を確認できること |
| SLS-R2 |
月次・四半期・年次の粒度で売上推移を確認できること |
| SLS-R3 |
商品カテゴリ別の売上構成比を確認できること |
| SLS-R4 |
出荷先の国別・地域別に売上を集計して確認できること |
| SLS-R5 |
前年同期比と成長率を確認できること |
| SLS-R6 |
売上は「受注明細の明細金額の合計」とし、送料を含めないこと。集計の基準日は受注日とすること |
| # |
要件 |
| INV-R1 |
在庫切れ(在庫数 = 0)および低在庫(在庫数 <= 発注点)の商品を一覧で確認できること |
| INV-R2 |
カテゴリ別の在庫金額(Σ 単価 × 在庫数)を確認できること |
| INV-R3 |
在庫回転率(期間内の出荷数量 ÷ 現在庫数)を商品別に確認できること |
| INV-R4 |
滞留在庫(指定期間に出荷実績がなく在庫がある商品)を確認できること |
| INV-R5 |
発注が必要な商品(在庫数 + 発注済数 <= 発注点)を発注候補として一覧できること |
| INV-R6 |
廃番商品を集計対象に含めるかを切り替えられること |
| # |
要件 |
| PRF-R1 |
担当者別の売上ランキングを、期間を指定して確認できること |
| PRF-R2 |
担当者別の受注件数と客単価(売上合計 ÷ 受注件数)を比較できること |
| PRF-R3 |
テリトリー別・地域別に実績を集計して確認できること |
| PRF-R4 |
担当者別・年月別の売上目標を設定・更新できること |
| PRF-R5 |
目標に対する実績の達成率と進捗を確認できること |
サンプルとして必要最小限に留める。
| 区分 |
要件 |
| 性能 |
一覧・検索は 20 件のページ単位で取得し、全件をメモリに読み込まないこと。分析画面の応答は想定データ量で 3 秒以内を目安とする |
| 同時実行 |
更新系機能は楽観排他により、他利用者の更新を上書きしないこと |
| 整合性 |
受注と明細のように複数テーブルを更新する処理は 1 トランザクションで行うこと |
| 可用性・運用 |
特段の要件を設けない(サンプルのため) |
| セキュリティ |
SQL インジェクション対策としてパラメータ化した問い合わせを用いること。認証・認可は対象外 |