Ubuntu 26.04 + .NET 10 で ASP.NET Core Razor Pages の CRUD アプリを構築し、
その成果物に対して作成した開発工程文書です。
実装済みのコードと実測値に基づいて記述しており、推測による記載は含みません。
Razor Pages 開発文書 の ⑨/全11回です。
シリーズ全記事(全11回)
- 【Razor Pages 開発文書 ①】要件定義書
- 【Razor Pages 開発文書 ②】基本設計書 (1/2) — システム構成・アーキテクチャ・画面設計
- 【Razor Pages 開発文書 ③】基本設計書 (2/2) — データ設計・外部IF・運用設計
- 【Razor Pages 開発文書 ④】詳細設計書 (1/4) — クラス構成・エンティティ・データアクセス層
- 【Razor Pages 開発文書 ⑤】詳細設計書 (2/4) — 画面制御層・起動処理
- 【Razor Pages 開発文書 ⑥】詳細設計書 (3/4) — 発行SQL・処理シーケンス
- 【Razor Pages 開発文書 ⑦】詳細設計書 (4/4) — ビュー・設定・実装上の留意点
- 【Razor Pages 開発文書 ⑧】単体テスト仕様書
-
【Razor Pages 開発文書 ⑨】結合テスト仕様書 (この記事)
- 【Razor Pages 開発文書 ⑩】総合テスト仕様書
- 【Razor Pages 開発文書 ⑪】受入テスト(UAT)仕様書
結合テスト仕様書
| 項目 |
内容 |
| システム名 |
BookListRazor(書籍管理システム) |
| 文書番号 |
TST-IT-001 |
| 版数 |
1.0 |
| 作成日 |
2026-07-24 |
| 検証対象文書 |
基本設計書(DES-001) |
1. 文書の目的
本書は 基本設計書 に定義した画面・URL・データの外部仕様が、
構成要素を結合した状態で正しく動作することを検証するテストケースを定義する。
単体テストが 1 メソッドの内部挙動を対象とするのに対し、本テストは
「ブラウザからの要求 → 画面制御 → データアクセス → データベース → 応答」という
経路全体を対象とする。
2. テスト方針
2.1 テスト対象
| 対象 |
検証観点 |
| 画面遷移 |
基本設計 4.2 の遷移図どおりに画面が繋がること |
| 画面とデータベースの結合 |
画面操作の結果がデータベースへ正しく反映されること |
| URL とメソッド |
基本設計 6.1 の URL 設計どおりに応答すること |
| 入力検証 |
クライアント側・サーバ側の二段検証が機能すること |
| 共通機能 |
CSRF 対策・エスケープ処理が全画面で有効であること |
| エラー処理 |
基本設計 8.1 の分類どおりの応答が返ること |
2.2 テスト方式
HTTP クライアントによりリクエストを送信し、応答ステータス・応答本文・
データベースの状態変化の 3 点で判定する。
判定にあたっては応答本文の目視確認に依存せず、データベースの件数と値の変化を
機械的に検証する。画面上のエラー表示のみで判断すると、検証属性の定義
(data-val-*)と実際のエラー表示を取り違える危険があるためである。
2.3 実施済みケースの扱い
本書のケースは 2026-07-24 に実測済みである。結果欄には実測値を記載する。
クライアント側の JavaScript を要するケースのみ未実施とし、その旨を明記する。
3. テスト環境
| 項目 |
内容 |
| 実行環境 |
Ubuntu 26.04 LTS(WSL2) |
| 起動方法 |
dotnet run --launch-profile http |
| 接続先 |
http://localhost:5271 |
| データベース |
BookList.db(SQLite) |
| 検証ツール |
HTTP クライアント(curl)、SQLite 直接参照 |
4. テストケース
4.1 画面遷移(IT-01)
基本設計 4.2 の画面遷移図を検証する。
| ID |
検証項目 |
手順 |
期待結果 |
結果 |
| IT-01-01 |
ホーム表示 |
GET / |
HTTP 200 |
合格(200) |
| IT-01-02 |
一覧表示 |
GET /BookLists |
HTTP 200 |
合格(200) |
| IT-01-03 |
登録画面表示 |
GET /BookLists/Create |
HTTP 200 |
合格(200) |
| IT-01-04 |
詳細画面表示 |
GET /BookLists/Details?id={有効ID} |
HTTP 200 |
合格(200) |
| IT-01-05 |
編集画面表示 |
GET /BookLists/Edit?id={有効ID} |
HTTP 200 |
合格(200) |
| IT-01-06 |
削除確認画面表示 |
GET /BookLists/Delete?id={有効ID} |
HTTP 200 |
合格(200) |
| IT-01-07 |
ナビゲーションリンク |
GET / の応答に /BookLists へのリンクが含まれる |
リンクが存在する |
合格 |
4.2 登録機能の結合(IT-02 / FR-02)
| ID |
検証項目 |
手順 |
期待結果 |
結果 |
| IT-02-01 |
正常登録 |
全項目に妥当値を入力し送信 |
HTTP 302、/BookLists へ遷移、件数 +1 |
合格(302・件数増加) |
| IT-02-02 |
登録内容の反映 |
登録後に一覧を取得 |
登録した値が一覧に表示される |
合格 |
| IT-02-03 |
日本語の登録 |
書名「ASP.NET Core 入門」、出版社「技術評論社」 |
文字化けせず保存・表示される |
合格 |
| IT-02-04 |
ID の自動採番 |
連続で 2 件登録 |
異なる ID が付与される |
合格 |
4.3 参照機能の結合(IT-03 / FR-01・FR-03)
| ID |
検証項目 |
手順 |
期待結果 |
結果 |
| IT-03-01 |
一覧の全件表示 |
複数件登録後に一覧を取得 |
登録済みの全件が表示される |
合格 |
| IT-03-02 |
0 件時の表示 |
データ 0 件の状態で一覧を取得 |
HTTP 200、エラーとならない |
合格 |
| IT-03-03 |
詳細の内容一致 |
詳細画面を取得 |
対象書籍の全項目が表示される |
合格 |
4.4 更新機能の結合(IT-04 / FR-04)
| ID |
検証項目 |
手順 |
期待結果 |
結果 |
| IT-04-01 |
編集画面の初期値 |
編集画面を取得 |
現在値がフォームに設定されている |
合格 |
| IT-04-02 |
正常更新 |
価格を 3800 → 4200 に変更し送信 |
HTTP 302、DB の値が 4200 になる |
合格 |
| IT-04-03 |
更新内容の反映 |
更新後に一覧を取得 |
変更後の値が表示される |
合格(4200 を確認) |
4.5 削除機能の結合(IT-05 / FR-05)
| ID |
検証項目 |
手順 |
期待結果 |
結果 |
| IT-05-01 |
削除確認画面の内容 |
削除画面を取得 |
削除対象の内容が表示される |
合格 |
| IT-05-02 |
正常削除 |
削除を実行 |
HTTP 302、DB 件数が -1 |
合格(残 0 件を確認) |
| IT-05-03 |
削除後の一覧 |
削除後に一覧を取得 |
削除した書籍が表示されない |
合格 |
4.6 入力検証の結合(IT-06)
| ID |
検証項目 |
入力 |
期待結果 |
結果 |
| IT-06-01 |
必須項目の未入力 |
Isbn・Title・Publisher を空 |
HTTP 200、登録されない、3 項目にエラー表示 |
合格(件数不変、The Isbn field is required. 他 2 件) |
| IT-06-02 |
数値項目の型不正 |
Price = "abc" |
HTTP 200、登録されない |
合格(The value 'abc' is not valid for Price.) |
| IT-06-03 |
日付項目の型不正 |
Published = 2026-02-30 |
HTTP 200、登録されない |
合格(The value '2026-02-30' is not valid for Published.) |
| IT-06-04 |
数値の型超過 |
Price = 2147483648 |
HTTP 200、登録されない |
合格 |
| IT-06-05 |
正常値の対照確認 |
全項目に妥当値 |
登録される |
合格(件数 +1) |
| IT-06-06 |
クライアント側検証 |
ブラウザで必須項目を空のまま送信 |
送信されず、項目横にエラーが表示される |
未実施(JavaScript 実行環境が必要) |
IT-06-06 はブラウザでの手動確認を要する。サーバ側検証(IT-06-01〜05)が
機能しているため、クライアント側検証が動作しない場合でも
不正データが登録されることはない。
4.7 CSRF 対策の結合(IT-07 / NFR-06)
| ID |
検証項目 |
手順 |
期待結果 |
結果 |
| IT-07-01 |
トークンなしの送信 |
トークンを付けずに POST |
HTTP 400 で拒否 |
合格(400) |
| IT-07-02 |
不正トークンの送信 |
無効な文字列をトークンとして POST |
HTTP 400 で拒否 |
合格(400) |
| IT-07-03 |
正規トークンの送信 |
画面から取得したトークンで POST |
正常に処理される |
合格(302) |
4.8 エスケープ処理の結合(IT-08 / NFR-07)
| ID |
検証項目 |
手順 |
期待結果 |
結果 |
| IT-08-01 |
スクリプトタグの登録 |
書名に <script>alert(1)</script> を登録 |
データベースには原文のまま保存される |
合格 |
| IT-08-02 |
出力時のエスケープ |
上記を含む一覧を取得 |
<script> へ変換され、実行可能なタグとして出力されない |
合格(生タグ 0 箇所) |
4.9 エラー処理の結合(IT-09)
基本設計 8.1 のエラー分類を検証する。
| ID |
検証項目 |
手順 |
期待結果 |
結果 |
| IT-09-01 |
詳細・ID 未指定 |
GET /BookLists/Details |
HTTP 404 |
合格 |
| IT-09-02 |
詳細・該当なし |
GET /BookLists/Details?id=99999 |
HTTP 404 |
合格 |
| IT-09-03 |
編集・ID 未指定 |
GET /BookLists/Edit |
HTTP 404 |
合格 |
| IT-09-04 |
編集・該当なし |
GET /BookLists/Edit?id=99999 |
HTTP 404 |
合格 |
| IT-09-05 |
削除・ID 未指定 |
GET /BookLists/Delete |
HTTP 404 |
合格 |
| IT-09-06 |
削除・該当なし |
GET /BookLists/Delete?id=99999 |
HTTP 404 |
合格 |
| IT-09-07 |
更新競合 |
存在しない ID へ更新を送信 |
HTTP 404、既存データは無変更 |
合格 |
4.10 データ永続性の結合(IT-10 / NFR-05)
| ID |
検証項目 |
手順 |
期待結果 |
結果 |
| IT-10-01 |
再起動後のデータ保持 |
登録 → アプリ停止 → 再起動 → 一覧取得 |
登録データが保持されている |
合格 |
| IT-10-02 |
再起動後の登録 |
再起動後に新規登録 |
正常に登録できる |
合格(302) |
5. 合否判定基準
| 項目 |
基準 |
| ケース単位 |
応答ステータス・データベース状態がともに期待結果と一致すること |
| 全体 |
未実施ケースを除く全ケースが合格すること |
| 未実施ケース |
ブラウザでの手動確認により後日実施すること |
6. トレーサビリティ
| 基本設計の節 |
対応するテストケース |
| 4.1 画面一覧・4.2 画面遷移図 |
IT-01 |
| 4.3 画面項目定義 |
IT-02、IT-03、IT-04、IT-05 |
| 5.2 テーブル定義 |
IT-02、IT-10 |
| 6.1 URL 設計 |
IT-01、IT-09 |
| 7.1 入力検証 |
IT-06 |
| 7.2 CSRF 対策 |
IT-07 |
| 7.3 XSS 対策 |
IT-08 |
| 8.1 エラー分類 |
IT-09 |
7. 実施記録
| 実施日 |
対象範囲 |
実施 |
合格 |
不合格 |
未実施 |
| 2026-07-24 |
IT-01〜IT-10 |
33 |
33 |
0 |
1(IT-06-06) |
不具合検出件数:0 件
未実施の IT-06-06(クライアント側検証)は、JavaScript を実行できる
ブラウザ環境での確認を要する。
8. 改訂履歴
| 版数 |
日付 |
内容 |
| 1.0 |
2026-07-24 |
初版作成。IT-06-06 を除く全ケースを実施し合格を確認 |
← 前:【Razor Pages 開発文書 ⑧】単体テスト仕様書 | 次:【Razor Pages 開発文書 ⑩】総合テスト仕様書 →