【新人必見】仕様書からテストケースを作る思考プロセス完全ガイド
はじめに
こんにちは!
新人エンジニアの皆さん、こんな経験ありませんか?
「仕様書を渡されて、『単体テスト仕様書を作って』と言われたけど、何から始めればいいか分からない...」
「正常系はわかるけど、異常系ってどこまで考えればいいの?」
「テストケースの抜け漏れが不安...」
私も新人時代、仕様書を読んでも「どうやってテストケースに落とし込むの?」と途方に暮れていました。
この記事では、仕様書からテストケースを作る思考プロセスを、ステップバイステップで解説します。
記事の最後に印刷して使えるチートシートも用意しました!
対象読者
- 単体テスト仕様書を初めて作成する新人エンジニア
- テストケースの抜け漏れが不安な方
- 仕様書からテストケースへの変換方法を知りたい方
この記事でわかること
- ✅ 仕様書の効率的な読み方
- ✅ テストケースの抽出方法
- ✅ 正常系・異常系・境界値の考え方
- ✅ 実務で使える思考プロセス
- ✅ すぐ使えるチートシート
目次
- 仕様書からテストを作る全体の流れ
- ステップ1:仕様書を3色でマーク
- ステップ2:テスト観点を洗い出す
- ステップ3:正常系テストを作る
- ステップ4:異常系テストを作る
- ステップ5:境界値テストを作る
- 実践例:ログイン機能のテストケース作成
- チートシート:机に貼っておこう
- よくある質問
- まとめ
仕様書からテストを作る全体の流れ
基本的な流れ(30分〜1時間)
1. 仕様書を読む(3色でマーク) ← 5分
2. テスト観点を洗い出す ← 5分
3. 正常系テストを作る ← 10分
4. 異常系テストを作る ← 10分
5. 境界値テストを作る ← 5分
6. レビュー&修正 ← 5分
ポイント:一度に完璧を目指さない。まず「骨格」を作って、後で肉付けする。
ステップ1:仕様書を3色でマーク
なぜマーキングするのか?
仕様書を読むだけでは、テストケースに必要な情報が頭に残りません。
3色でマーキングすると、テストケースが自然と見えてきます。
マーキングのルール
| 色 | マークする内容 | 例 |
|---|---|---|
| 🟡 黄色 | 入力値・条件 | 「ユーザーIDは6〜50文字」 |
| 🔵 青色 | 期待結果・挙動 | 「ホーム画面に遷移する」 |
| 🔴 赤色 | エラー条件・制約 | 「空白の場合はエラー表示」 |
実例:ログイン機能の仕様書
【機能名】ログイン機能
【概要】
ユーザーがユーザーIDとパスワードを入力してログインする。
【仕様】
1. ユーザーIDは6〜50文字の英数字とする。🟡
2. パスワードは8〜20文字の英数字記号とする。🟡
3. 正しいID・パスワードが入力された場合、ホーム画面に遷移する。🔵
4. IDまたはパスワードが間違っている場合、「ID/パスワードが正しくありません」と表示する。🔴
5. IDまたはパスワードが空白の場合、「IDを入力してください」または「パスワードを入力してください」と表示する。🔴
6. 連続3回ログイン失敗した場合、アカウントをロックする。🔴
マーキング後の気づき:
- 🟡 黄色:入力値の範囲が2つある(ID:6〜50文字、PW:8〜20文字)
- 🔵 青色:成功時の挙動が1つ(ホーム画面遷移)
- 🔴 赤色:エラーパターンが3つ(誤入力、空白、連続失敗)
ここから何がわかる?
→ 最低でも6つのテストケースが必要(正常1 + 異常3 + 境界値2)
ステップ2:テスト観点を洗い出す
テスト観点とは?
「何をテストするか」を簡潔にまとめたもの。
洗い出し方法
マーキングした仕様書から、以下の表を埋める:
| 番号 | テスト観点 | 分類 | 優先度 |
|---|---|---|---|
| 1 | 正しいID・PWでログイン成功 | 正常系 | 高 |
| 2 | 誤ったPWでログイン失敗 | 異常系 | 高 |
| 3 | ID空白でエラー表示 | 異常系 | 高 |
| 4 | PW空白でエラー表示 | 異常系 | 高 |
| 5 | 連続3回失敗でアカウントロック | 異常系 | 中 |
| 6 | ID最小文字数(6文字)で成功 | 境界値 | 中 |
| 7 | ID最大文字数(50文字)で成功 | 境界値 | 中 |
| 8 | ID文字数不足(5文字)でエラー | 境界値 | 低 |
テスト観点の優先度
高:必ず実施(基本フロー、よく使う機能)
中:できれば実施(境界値、頻度低いエラー)
低:余裕があれば実施(レアケース)
ステップ3:正常系テストを作る
正常系とは?
「仕様通りに動く」ことを確認するテスト
正常系の考え方
Q: 「この機能、どう使うのが正解?」
A: それが正常系
正常系テストケースの作り方
テンプレート:
■ テストID: XXX-001
■ テスト項目: ○○機能の正常系
■ テスト観点: 正常系
■ 前提条件: (あれば記載)
■ 入力値: 正しい値
■ 操作手順: 1. ××を入力 2. ボタンを押下
■ 期待結果: ✅ 仕様書に書かれた挙動
例:ログイン機能の正常系
■ テストID: LOGIN-001
■ テスト項目: 正しいID・PWでログイン
■ テスト観点: 正常系
■ 前提条件: ユーザー登録済み
■ 入力値:
- ユーザーID: testuser@example.com
- パスワード: Test1234!
■ 操作手順:
1. ユーザーIDを入力
2. パスワードを入力
3. ログインボタンを押下
■ 期待結果:
✅ ホーム画面に遷移すること
✅ ヘッダーにユーザー名が表示されること
ポイント:
- 期待結果は具体的に書く(「ログインできる」ではなく「ホーム画面に遷移」)
- 複数の確認項目があれば箇条書きで列挙
ステップ4:異常系テストを作る
異常系とは?
「エラーが正しく処理される」ことを確認するテスト
異常系の考え方
Q: 「この機能、どう使うと失敗する?」
A: それが異常系
異常系を見つける魔法の質問5つ
| 質問 | 異常系のパターン |
|---|---|
| 1. 空白だったら? | 必須項目が未入力 |
| 2. 間違った値だったら? | 不正な形式、存在しないデータ |
| 3. 権限がなかったら? | アクセス制御、認証エラー |
| 4. 同時にやったら? | 排他制御、二重送信 |
| 5. 何度もやったら? | 連続実行、リトライ上限 |
例:ログイン機能の異常系
■ テストID: LOGIN-002
■ テスト項目: 誤ったPWでログイン失敗
■ テスト観点: 異常系
■ 前提条件: ユーザー登録済み
■ 入力値:
- ユーザーID: testuser@example.com(正しい)
- パスワード: WrongPassword(誤り)
■ 操作手順:
1. 正しいユーザーIDを入力
2. 誤ったパスワードを入力
3. ログインボタンを押下
■ 期待結果:
✅ ログイン画面のまま
✅ エラーメッセージ「ID/パスワードが正しくありません」が表示されること
✅ 入力値はクリアされること(セキュリティ)
■ テストID: LOGIN-003
■ テスト項目: ID空白でエラー表示
■ テスト観点: 異常系
■ 前提条件: なし
■ 入力値:
- ユーザーID: (空白)
- パスワード: Test1234!
■ 操作手順:
1. ユーザーIDを空白のまま
2. パスワードを入力
3. ログインボタンを押下
■ 期待結果:
✅ エラーメッセージ「IDを入力してください」が表示されること
✅ ログイン処理が実行されないこと
ポイント:
- エラーメッセージの文言も具体的に記載
- セキュリティ要件(入力値クリア、情報漏洩防止など)も確認
ステップ5:境界値テストを作る
境界値とは?
「範囲の端っこ」をテストする
なぜ? → バグは境界で起きやすいから!
境界値分析の公式
範囲が「X〜Y」の場合:
【テストすべき値】
・X(最小値)
・Y(最大値)
・X-1(最小値の1つ下)← エラーになるはず
・Y+1(最大値の1つ上)← エラーになるはず
例:ユーザーID(6〜50文字)の境界値
| 値 | 文字数 | 期待結果 | テスト観点 |
|---|---|---|---|
| abcde | 5文字 | ❌ エラー | 境界値(最小-1) |
| abcdef | 6文字 | ✅ 成功 | 境界値(最小) |
| a×49回+b | 50文字 | ✅ 成功 | 境界値(最大) |
| a×50回+b | 51文字 | ❌ エラー | 境界値(最大+1) |
例:ログイン機能の境界値テスト
■ テストID: LOGIN-004
■ テスト項目: ID最小文字数(6文字)でログイン
■ テスト観点: 境界値
■ 前提条件: 6文字のユーザーID(abcdef)で登録済み
■ 入力値:
- ユーザーID: abcdef(6文字)
- パスワード: Test1234!
■ 操作手順:
1. 6文字のユーザーIDを入力
2. パスワードを入力
3. ログインボタンを押下
■ 期待結果:
✅ ホーム画面に遷移すること
■ テストID: LOGIN-005
■ テスト項目: ID文字数不足(5文字)でエラー
■ テスト観点: 境界値
■ 前提条件: なし
■ 入力値:
- ユーザーID: abcde(5文字)
- パスワード: Test1234!
■ 操作手順:
1. 5文字のユーザーIDを入力
2. パスワードを入力
3. ログインボタンを押下
■ 期待結果:
✅ エラーメッセージ「IDは6文字以上で入力してください」が表示されること
ポイント:
- 境界値は必ず4パターンテストする(最小、最大、最小-1、最大+1)
- 日付、数値、文字列など、範囲があるものは全て境界値テスト対象
実践例:ログイン機能のテストケース作成
仕様書(再掲)
【機能名】ログイン機能
【仕様】
1. ユーザーIDは6〜50文字の英数字とする。
2. パスワードは8〜20文字の英数字記号とする。
3. 正しいID・パスワードが入力された場合、ホーム画面に遷移する。
4. IDまたはパスワードが間違っている場合、「ID/パスワードが正しくありません」と表示する。
5. IDまたはパスワードが空白の場合、「IDを入力してください」または「パスワードを入力してください」と表示する。
6. 連続3回ログイン失敗した場合、アカウントをロックする。
テストケース一覧(全15ケース)
正常系(2ケース)
| ID | テスト項目 | 観点 | 入力値 | 期待結果 |
|---|---|---|---|---|
| LOGIN-001 | 正しいID・PWでログイン | 正常系 | ID: testuser@example.com PW: Test1234! |
ホーム画面に遷移 |
| LOGIN-002 | ログイン後のセッション維持 | 正常系 | ログイン後、別ページに遷移 | セッションが維持される |
異常系(7ケース)
| ID | テスト項目 | 観点 | 入力値 | 期待結果 |
|---|---|---|---|---|
| LOGIN-003 | 誤ったPWでログイン失敗 | 異常系 | ID: 正しい PW: WrongPW |
エラー「ID/パスワードが正しくありません」 |
| LOGIN-004 | 誤ったIDでログイン失敗 | 異常系 | ID: wrongid PW: 正しい |
エラー「ID/パスワードが正しくありません」 |
| LOGIN-005 | ID空白でエラー表示 | 異常系 | ID: 空白 PW: Test1234! |
エラー「IDを入力してください」 |
| LOGIN-006 | PW空白でエラー表示 | 異常系 | ID: testuser PW: 空白 |
エラー「パスワードを入力してください」 |
| LOGIN-007 | 両方空白でエラー表示 | 異常系 | ID: 空白 PW: 空白 |
エラー「IDを入力してください」 |
| LOGIN-008 | 連続3回失敗でロック | 異常系 | 誤ったPWで3回連続 | アカウントロック、エラー表示 |
| LOGIN-009 | ロック後のログイン試行 | 異常系 | ロック中に正しいID・PW | エラー「アカウントがロックされています」 |
境界値(6ケース)
| ID | テスト項目 | 観点 | 入力値 | 期待結果 |
|---|---|---|---|---|
| LOGIN-010 | ID最小文字数(6文字) | 境界値 | ID: abcdef(6文字) PW: Test1234! |
ログイン成功 |
| LOGIN-011 | ID最大文字数(50文字) | 境界値 | ID: a×50(50文字) PW: Test1234! |
ログイン成功 |
| LOGIN-012 | ID文字数不足(5文字) | 境界値 | ID: abcde(5文字) PW: Test1234! |
エラー「IDは6文字以上」 |
| LOGIN-013 | ID文字数超過(51文字) | 境界値 | ID: a×51(51文字) PW: Test1234! |
エラー「IDは50文字以内」 |
| LOGIN-014 | PW最小文字数(8文字) | 境界値 | ID: testuser PW: Test123!(8文字) |
ログイン成功 |
| LOGIN-015 | PW最大文字数(20文字) | 境界値 | ID: testuser PW: Test1234567890!@(20文字) |
ログイン成功 |
テストケース作成の所要時間
- 仕様書マーキング:5分
- テスト観点洗い出し:5分
- 正常系作成(2ケース):5分
- 異常系作成(7ケース):15分
- 境界値作成(6ケース):10分
合計:40分
チートシート:机に貼っておこう
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ 仕様からテストケースを作る思考プロセス ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
【ステップ1】仕様書を3色でマーク
🟡 黄色 = 入力値・条件
🔵 青色 = 期待結果・挙動
🔴 赤色 = エラー条件・制約
【ステップ2】テスト観点を洗い出す
□ 正常系:仕様通りに動くか?
□ 異常系:エラーが正しく処理されるか?
□ 境界値:範囲の端っこで動くか?
【ステップ3】正常系を作る
Q: この機能、どう使うのが正解?
→ それが正常系
【ステップ4】異常系を作る(魔法の質問5つ)
1. 空白だったら?
2. 間違った値だったら?
3. 権限がなかったら?
4. 同時にやったら?
5. 何度もやったら?
【ステップ5】境界値を作る
範囲が「X〜Y」なら:
✓ X(最小値)
✓ Y(最大値)
✓ X-1(最小値の1つ下)
✓ Y+1(最大値の1つ上)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
【テストケースの優先度】
高:基本フロー、よく使う機能
中:境界値、頻度低いエラー
低:レアケース
【テストケースのテンプレート】
■ テストID: XXX-001
■ テスト項目: ○○機能の××
■ テスト観点: 正常系/異常系/境界値
■ 前提条件: (あれば)
■ 入力値: 具体的な値
■ 操作手順: 1. ×× 2. △△
■ 期待結果: ✅ 具体的な挙動
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
【よくある見落とし】
⚠ エラーメッセージの文言確認
⚠ セキュリティ要件(入力値クリアなど)
⚠ 複数項目の組み合わせパターン
⚠ 日付の境界値(月末、うるう年など)
⚠ 権限による表示制御
⚠ 排他制御、同時実行
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
【時短テクニック】
✓ テンプレート行をコピペ
✓ 結合セルで共通項目を使い回し
✓ プルダウンで入力ミス防止
✓ フィルターで進捗管理
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
よくある質問
Q1: 正常系と異常系、どっちから作るべき?
A: 正常系から作るのがおすすめ
理由:
- 正常系を作ると「基本フロー」が見える
- その基本フローの「逆パターン」が異常系になる
- 異常系だけ作ると、正常系を見落とすことがある
Q2: テストケースはどこまで細かく作ればいい?
A: プロジェクトの方針による
目安:
- 超重要機能(決済、個人情報など): 100ケース以上も普通
- 通常機能: 20〜50ケース
- 小さな機能: 5〜10ケース
迷ったら、先輩やPMに「このレベルで大丈夫ですか?」と確認する。
Q3: 境界値テストって全部やらないとダメ?
A: 優先度をつけて、時間があればやる
優先順位:
- 最小値・最大値(必須)
- 最小-1、最大+1(できれば)
- その他の境界値(余裕があれば)
Q4: 仕様書に書いてないことはどうテストする?
A: 仕様書に書いてないことは「仕様確認」が必要
例:
- 「連続3回失敗でロック」→ ロック解除方法は?
- 「エラー表示」→ 表示位置は? 色は?
やること:
- 不明点をリストアップ
- 仕様書作成者(設計者)に質問
- 回答をもらってからテストケース作成
Q5: テストケースが多すぎて実施時間が足りない...
A: 優先度をつけて、高優先度から実施
対策:
- テストケースに優先度(高・中・低)をつける
- まず「高」を全部実施
- 時間があれば「中」「低」を実施
- 全部実施できなくても、優先度が明確なら問題ない
まとめ
仕様からテストを作る5ステップ
| ステップ | やること | 所要時間 |
|---|---|---|
| 1 | 仕様書を3色でマーク | 5分 |
| 2 | テスト観点を洗い出す | 5分 |
| 3 | 正常系テストを作る | 10分 |
| 4 | 異常系テストを作る | 10分 |
| 5 | 境界値テストを作る | 5分 |
合計:35分(慣れたら20分)
重要なポイント
-
仕様書をしっかり読む
- マーキングすると読み飛ばしが減る
- 不明点は必ず確認する
-
正常系→異常系→境界値の順で作る
- いきなり完璧を目指さない
- まず骨格を作ってから肉付け
-
テストケースは具体的に書く
- 「ログインできる」ではなく「ホーム画面に遷移する」
- 第三者が読んで理解できるレベルで
-
優先度をつける
- 全部やろうとしない
- 重要なテストから実施
-
テンプレートを活用
- コピペで効率化
- 共通項目は使い回し
次のステップ
- このチートシートを印刷して机に貼る
- 1つの機能でテストケースを作ってみる
- 先輩にレビューしてもらう
- フィードバックを受けてテンプレート改善
- 次の機能でもう一度試す
最初は時間がかかりますが、慣れたら30分で30ケース作れるようになります!
最後まで読んでいただき、ありがとうございました!
「仕様書を読んでもテストケースが思い浮かばない...」という悩みは、
正しい思考プロセスを知れば解決します。
この記事が、皆さんの単体テスト作成の助けになれば幸いです。
この記事が役に立ったら、LGTM(いいね)をお願いします! 😊
チートシート印刷用
仕様→テストケース作成チートシート
印刷して机に貼ろう!
📝 5ステップ(所要時間:35分)
ステップ1:仕様書を3色でマーク(5分)
🟡 黄色 = 入力値・条件
🔵 青色 = 期待結果・挙動
🔴 赤色 = エラー条件・制約
ステップ2:テスト観点を洗い出す(5分)
□ 正常系:仕様通りに動くか?
□ 異常系:エラーが正しく処理されるか?
□ 境界値:範囲の端っこで動くか?
ステップ3:正常系を作る(10分)
Q: この機能、どう使うのが正解?
→ それが正常系
ステップ4:異常系を作る(10分)
魔法の質問5つ
1. 空白だったら? → 必須項目未入力
2. 間違った値だったら? → 不正な形式、存在しないデータ
3. 権限がなかったら? → アクセス制御、認証エラー
4. 同時にやったら? → 排他制御、二重送信
5. 何度もやったら? → 連続実行、リトライ上限
ステップ5:境界値を作る(5分)
範囲が「X〜Y」なら、4パターンテスト:
✓ X (最小値) → 成功するはず
✓ Y (最大値) → 成功するはず
✓ X-1 (最小値の1つ下) → エラーになるはず
✓ Y+1 (最大値の1つ上) → エラーになるはず
⚙️ テストケースのテンプレート
■ テストID: XXX-001
■ テスト項目: ○○機能の××
■ テスト観点: 正常系 / 異常系 / 境界値
■ 前提条件: (あれば記載)
■ 入力値:
- 項目1: 値1
- 項目2: 値2
■ 操作手順:
1. ××を入力
2. ボタンを押下
■ 期待結果:
✅ 具体的な挙動を記載
✅ 複数ある場合は箇条書き
🎯 優先度の決め方
| 優先度 | 対象 | 実施タイミング |
|---|---|---|
| 高 | 基本フロー、よく使う機能 | 必ず実施 |
| 中 | 境界値、頻度低いエラー | できれば実施 |
| 低 | レアケース | 余裕があれば |
⚠️ よくある見落とし
□ エラーメッセージの文言確認
□ セキュリティ要件(入力値クリア、情報漏洩防止)
□ 複数項目の組み合わせパターン
□ 日付の境界値(月末、うるう年、2月29日)
□ 権限による表示制御
□ 排他制御、同時実行
□ 特殊文字(<script>、SQL注入など)
□ 文字コード(絵文字、全角半角)
💡 時短テクニック
✓ テンプレート行をコピペ
✓ 結合セルで共通項目を使い回し
✓ プルダウンで入力ミス防止
✓ フィルターで進捗管理
✓ 似た機能はシートごとコピー
📊 テストケース数の目安
| 機能の重要度 | テストケース数 |
|---|---|
| 超重要(決済、個人情報) | 100ケース以上 |
| 通常機能 | 20〜50ケース |
| 小さな機能 | 5〜10ケース |
🔍 境界値テストの対象
【対象になるもの】
✓ 文字数(6〜50文字など)
✓ 数値範囲(0〜100など)
✓ 日付範囲(2024/01/01〜2024/12/31など)
✓ ファイルサイズ(1MB以下など)
✓ 件数(最大1000件など)
【境界値の例】
・文字数6〜50文字
→ 5文字(NG)、6文字(OK)、50文字(OK)、51文字(NG)
・数値0〜100
→ -1(NG)、0(OK)、100(OK)、101(NG)
🛠️ 実践例:ログイン機能
仕様
・ユーザーIDは6〜50文字
・パスワードは8〜20文字
・正しいID・PWでホーム画面遷移
・誤入力時エラー表示
・連続3回失敗でロック
テストケース(15ケース)
【正常系:2ケース】
1. 正しいID・PWでログイン成功
2. ログイン後のセッション維持
【異常系:7ケース】
3. 誤ったPWでログイン失敗
4. 誤ったIDでログイン失敗
5. ID空白でエラー
6. PW空白でエラー
7. 両方空白でエラー
8. 連続3回失敗でロック
9. ロック後のログイン試行
【境界値:6ケース】
10. ID最小文字数(6文字)で成功
11. ID最大文字数(50文字)で成功
12. ID文字数不足(5文字)でエラー
13. ID文字数超過(51文字)でエラー
14. PW最小文字数(8文字)で成功
15. PW最大文字数(20文字)で成功
📝 仕様書のチェックリスト
仕様書を読む時、以下を確認:
□ 入力項目は全て把握したか?
□ 入力項目ごとの制約(文字数、形式)は?
□ 正常時の挙動は明確か?
□ エラー時の挙動は明確か?
□ エラーメッセージは指定されているか?
□ 前提条件(ログイン必要など)は?
□ 権限による違いは?
□ 不明点はリストアップしたか?
🚀 作業の流れ
1. 仕様書を読む(マーキング) 5分
2. テスト観点を洗い出す 5分
3. 正常系テストケース作成 10分
4. 異常系テストケース作成 10分
5. 境界値テストケース作成 5分
──────────────────────────
合計 35分
※慣れたら20分で完了
💬 困った時の質問リスト
【仕様が不明確な時】
→ 「○○の場合の挙動は?」と設計者に確認
【テストケースが多すぎる時】
→ 優先度をつけて、高優先度から実施
【境界値をどこまでやるか迷う時】
→ 最小・最大だけは必須、時間があれば±1も
【異常系が思いつかない時】
→ 魔法の質問5つを使う
作成者:YUKIKO | DXコンサルタント
このチートシートが役に立ったらシェアしてね!