コンテンツにスキップ

Web制作のテスト設計

第23講 / 全32講読了目安 約55分
  • テストを「完成後にバグを探す工程」ではなく、要件を確認可能な形へする活動として捉える方法
  • 単体、コンポーネント、結合、E2E等のテスト範囲
  • Web制作特有のブラウザ・端末・レスポンシブ・API・キャッシュ・外部サービスの確認
  • 自動テストと手動テストをリスクに応じて組み合わせる方法
  • 不具合管理、回帰テスト、受入、公開判定の進め方

テストは、仕様通り動くかだけでなく、利用者の目的と事業要件を満たし、異常時にも受け入れ可能な動作をするか確認する活動です。

flowchart LR
    R[要件・利用者の目的] --> C[受入条件・テスト条件]
    C --> T[手動・自動テスト]
    T --> B[不具合・リスク]
    B --> F[修正・判断]
    F --> G[公開可否]

テストを公開直前に始めると、要件の曖昧さや設計の問題が大きな手戻りになります。

要件定義時に「どう確認するか」を考えることで、仕様の抜けや解釈差を早く発見できます。

決めた機能・表示・データが仕様通りであること。

予約、検索、問い合わせ、購入等の主要行動を完了できること。

個人情報漏えい、二重決済、公開事故、検索流入消失等の重大問題を防ぐこと。

改修時に既存機能が壊れていないこと。

残っている不具合・制約を把握し、公開可能か責任者が判断できること。

テスト件数を増やすこと自体が目的ではありません。

重要なリスクを優先し、結果を判断へ使えることが重要です。

「使いやすい」「高速」「適切に表示」では、合否を判断できません。

テスト可能な形へ具体化します。

検索結果を素早く表示する。

  • 通常条件で検索開始から2秒以内に結果または読み込み状態を表示する
  • 0件時に条件変更の案内を表示する
  • APIが10秒応答しない場合は再試行可能なエラーを表示する
  • 検索条件をURLへ保持し、戻る操作で復元する

数値が必要ない要件でも、利用者の操作と期待結果を記載します。

テスト条件は利用者の流れから作る

Section titled “テスト条件は利用者の流れから作る”
flowchart LR
    A[流入] --> B[情報を探す]
    B --> C[比較する]
    C --> D[入力する]
    D --> E[確認する]
    E --> F[完了する]
    F --> G[通知・後続業務]

主要な利用者フローごとに、次を確認します。

  • 正常に完了する
  • 入力を間違える
  • 該当データがない
  • 戻る・再読み込み
  • 途中離脱・再開
  • 二重操作
  • 通信が遅い
  • 外部サービスが停止
  • 権限がない
  • 期限・在庫・予約枠が変わる

画面単位だけでテストすると、複数画面・外部システムをまたぐ不具合を見落とします。

種類主な対象
静的解析ソース・設定型、構文、規約、秘密情報
単体テスト小さな関数・処理金額計算、入力変換
コンポーネントテストUI部品ボタン、フォーム、モーダル
結合テスト複数部品・API・DBフォーム登録、CMS取得
E2Eテスト利用者の一連の流れ検索から予約完了
ビジュアルリグレッション見た目共通部品変更による崩れ
クロスブラウザ・実機環境差Safari、Chrome、iPhone
性能テスト速度・負荷初期表示、API、大量アクセス
アクセシビリティテスト利用可能性キーボード、読み上げ、拡大
セキュリティテスト安全性権限、依存、設定、診断
コンテンツ・SEO確認情報・検索リンク、メタ情報、リダイレクト
計測確認分析データGAイベント、同意、重複発火

一つのテストで他の領域を代替できません。

E2Eテストが通っても、すべての表示・セキュリティ・アクセシビリティが正しいとは限りません。

小さな処理を外部依存から切り離して確認します。

例:

  • 日付表示
  • 税・割合計算
  • 検索条件の変換
  • URL生成
  • バリデーション
  • APIレスポンスの整形
  • 高速
  • 失敗箇所を特定しやすい
  • 多くの入力パターンを試せる
  • 改修時に繰り返しやすい
  • 実ブラウザ・API・画面の組み合わせは確認しない
  • テストの書き方が実装詳細へ依存しすぎる場合がある
  • 利用者が目的を達成できる保証にはならない

ボタン、入力欄、カード、モーダル等を、画面部品として確認します。

  • 表示状態
  • 操作
  • 入力
  • エラー
  • 読み込み
  • キーボード
  • イベント発火

デザインシステムや共通UIでは、部品単位のテストが多数ページの品質へ効きます。

ただし、実際のページ内での組み合わせ・レイアウトは別途確認します。

複数の機能・システムを組み合わせて確認します。

例:

  • フォームからAPIへ登録
  • CMSから記事を取得して表示
  • 決済完了後に注文状態を更新
  • 会員権限に応じてデータを取得
  • Webhookで検索インデックスを更新

外部サービスを実際に使うか、モックを使うかを目的で分けます。

モックだけでは、本番の認証・速度・制限・データ差を確認できません。

利用者に近い形で、ブラウザから一連の操作を確認します。

sequenceDiagram
    participant U as テスト利用者
    participant W as Web画面
    participant A as API
    participant D as データ・外部サービス

    U->>W: 条件入力・送信
    W->>A: リクエスト
    A->>D: 処理
    D-->>A: 結果
    A-->>W: レスポンス
    W-->>U: 完了・エラー表示
  • 最重要の利用者フロー
  • ログイン
  • 予約・購入・問い合わせ
  • 複数システム連携
  • 公開後のスモークテスト
  • 実行時間が長い
  • 外部サービス・データへ影響される
  • 壊れやすいテストになることがある
  • 原因特定が難しい
  • すべてをE2Eで網羅すると保守負荷が高い

重要な流れを絞り、下位レベルのテストと組み合わせます。

  • 同じ処理を繰り返す
  • 明確な合否がある
  • 多くの入力パターン
  • 主要フロー
  • リンク・構文
  • 回帰確認
  • 複数ブラウザの基本動作
  • 文章の分かりやすさ
  • 視覚的な違和感
  • 実機の操作感
  • 読み上げ内容の適切さ
  • 複雑な例外
  • 新機能の探索
  • 外部サービスとの業務フロー
  • 利用者の迷い

自動テストは高速・反復可能ですが、期待結果が間違っていれば誤った動作を合格にします。

手動テストは柔軟ですが、再現性・網羅性・記録が不足しやすくなります。

両方を組み合わせます。

テスト戦略はリスクから決める

Section titled “テスト戦略はリスクから決める”

すべての機能を同じ深さでテストしません。

flowchart TD
    A[機能・変更] --> B{失敗時の影響}
    B -->|大きい| C[多層の自動・手動テスト]
    B -->|中| D[重要条件を重点確認]
    B -->|小さい| E[基本・探索的確認]
    C --> F{変更頻度}
    D --> F
    E --> F
    F -->|高い| G[回帰自動化を優先]
    F -->|低い| H[手動・スポット確認も選択]

優先度が高い例:

  • 決済
  • 個人情報
  • ログイン・権限
  • 予約枠・在庫
  • 公開・削除
  • URL・リダイレクト
  • 全ページ共通部品
  • 大量アクセス箇所
  • 法令・契約に関わる表示

各画面・部品には、正常データ以外の状態があります。

状態確認例
読み込み中操作できるか、二重送信しないか
0件次の行動を案内するか
一部欠損レイアウト・意味が壊れないか
エラー技術情報を出さず復旧方法を示すか
遅延タイムアウト、キャンセル、再試行
権限なし情報を漏らさず案内するか
期限切れ予約・リンク・セッション
大量件数ページング・性能・上限
重複操作二重登録・二重決済
オフライン・通信切断入力内容・再送
外部障害代替表示・旧データ
キャッシュ不整合更新反映・再検証

デザインカンプで正常状態だけを作ると、実装段階で場当たり的な表示になります。

ブラウザ・端末・レスポンシブ

Section titled “ブラウザ・端末・レスポンシブ”

対応範囲を「主要ブラウザ」と曖昧にせず、バージョン方針を決めます。

  • Chrome
  • Safari
  • Edge
  • Firefox
  • iOS Safari
  • Android Chrome
  • アプリ内ブラウザ
  • 社内標準端末
  • 最小・最大幅
  • 縦・横
  • 高解像度
  • 文字拡大
  • ズーム
  • タッチ
  • キーボード
  • マウス
  • 通信速度
  • OS設定
  • ダークモード等

実機とエミュレーションは役割が異なります。

エミュレーションだけでは、Safari固有挙動、ソフトウェアキーボード、スクロール、カメラ・ファイル選択等を完全に再現できません。

基準画像と新しい表示を比較し、意図しない見た目の変化を検出します。

共通CSS・コンポーネント変更による広範囲な崩れを見つけやすくなります。

  • 動的日時・広告・画像で差分が増える
  • 1pxの差をすべて不具合にすると運用不能
  • 見た目が同じでも意味構造・操作は確認できない
  • 基準画像自体が正しい必要がある
  • レスポンシブ条件を選ぶ

差分を自動検出し、人間が意図した変更か判断する運用が必要です。

性能は公開直前だけでなく、設計・実装中に継続確認します。

  • 初期表示
  • 主要コンテンツの表示
  • 操作反応
  • レイアウト変動
  • API応答
  • 画像・動画
  • JavaScript
  • 外部タグ
  • 大量アクセス
  • ビルド時間

ラボ環境の測定と、実利用者データは異なります。

目標値、測定ページ、端末・通信条件、公開後の監視を決めます。

本番では次の外部要素へ依存します。

  • CMS
  • API
  • 検索
  • 地図
  • 決済
  • メール
  • CRM
  • 認証
  • 動画
  • 計測タグ
  • 広告
  • Cookie同意

確認する状態:

  • 正常
  • 遅延
  • 停止
  • 認証期限切れ
  • 利用制限
  • 不正レスポンス
  • 部分成功
  • 仕様変更
  • 本番・検証の差

外部サービス自体を修正できなくても、Web側の代替表示・タイムアウト・連絡は設計できます。

  • ローカル
  • 開発
  • Pull Requestプレビュー
  • ステージング
  • 本番

各環境で、CMS、API、認証、メール、計測、個人情報の接続先を確認します。

  • 最小・最大文字数
  • 長い名前・住所
  • 絵文字・多言語
  • 0件
  • 大量件数
  • 期限境界
  • 欠損
  • 権限別
  • 重複
  • 不正形式
  • 画像の縦横比
  • 実在しない個人情報

本番個人情報を安易に検証環境へコピーしません。

テストデータの作成・削除担当も決めます。

システム・利用者への影響です。

  • 致命的:漏えい、決済誤り、全体停止
  • 重大:主要フロー不可、広範囲の表示不能
  • 中:回避策はあるが利用へ影響
  • 軽微:限定的な表示・文言問題

いつ直すかの事業判断です。

公開日、影響人数、代替手段、修正リスク等を加味します。

重大度と優先度は同じではありません。

軽微でも全ページ共通でブランド影響が大きい場合や、公開初日に必須の文言は優先度が高くなることがあります。

最低限、次を記録します。

  • タイトル
  • 発生環境
  • URL・画面
  • 前提条件
  • 操作手順
  • 実際の結果
  • 期待結果
  • 画面・動画・ログ
  • 再現率
  • 重大度・優先度
  • 担当・期限
  • 原因
  • 修正版
  • 再確認結果
  • 類似箇所への影響

「崩れています」だけでは、再現・修正・確認ができません。

修正や追加によって、既存機能が壊れていないか確認します。

  • 共通ヘッダー
  • フォーム部品
  • API共通処理
  • 認証
  • CSS
  • CMSモデル
  • URL生成
  • 計測
  • 多言語

変更影響の大きい部分を自動化すると、反復確認しやすくなります。

不具合修正時には、同じ問題を再発させないテスト追加を検討します。

発注側・業務側が、要件と業務フローを満たすか確認します。

制作会社の内部テストとは目的が異なります。

  • 対象範囲
  • 環境
  • アカウント
  • テストシナリオ
  • 期待結果
  • 既知制約
  • 不具合登録方法
  • 期間
  • 判断者
  • 再確認期間

受入期間を「自由に触ってください」だけにすると、確認範囲と完了条件が曖昧になります。

公開時点ですべての不具合がゼロとは限りません。

公開判定では次を確認します。

  • 重大不具合の残数
  • 主要フローの結果
  • セキュリティ指摘
  • アクセシビリティ要件
  • 性能目標
  • 対応ブラウザ
  • コンテンツ
  • リダイレクト
  • 計測
  • バックアップ・切戻し
  • 既知制約
  • 公開後対応計画
  • 責任者承認

残課題は、内容、影響、回避策、対応予定を記録します。

  • 共通テンプレート
  • CMS一覧・詳細
  • リンク
  • フォーム
  • 検索
  • レスポンシブ
  • アクセシビリティ
  • SEO
  • 計測
  • リダイレクト

を組み合わせます。

全ページを同じ深さで目視せず、テンプレート全件・コンテンツ自動検査・代表ページ目視を分けます。

  • ログイン
  • 枠の変化
  • 二重操作
  • タイムアウト
  • 決済
  • 確認メール
  • 管理画面
  • 取消
  • 外部障害

等の業務シナリオを重点化します。

  • 件数一致
  • URL
  • 本文
  • 画像・PDF
  • カテゴリ
  • 公開日
  • 文字化け
  • リンク
  • リダイレクト
  • サイトマップ

は自動検査し、代表・異常データを目視します。

  • 要件ごとに確認方法・合否条件を定義している
  • 主要な利用者フローからテストシナリオを作っている
  • 正常、0件、エラー、遅延、重複、権限状態を用意している
  • 単体・結合・E2Eの役割を分けている
  • 自動化する対象を変更頻度とリスクで選んでいる
  • 対応ブラウザ、OS、端末、画面幅を明記している
  • 実機確認とエミュレーションを使い分けている
  • API・CMS・外部サービス停止時をテストしている
  • 本番相当のデータ件数・画像・通信で性能を確認している
  • アクセシビリティ・セキュリティ・SEO・計測を別観点で確認している
  • テスト環境と本番の差を把握している
  • 個人情報を使わないテストデータを準備している
  • 不具合の重大度・優先度・再確認を管理している
  • 受入範囲、期間、判断者、完了条件を合意している
  • 公開判定に残課題・切戻し・公開後対応を含めている

「テストは実装が終わってから始める」

Section titled “「テストは実装が終わってから始める」”

受入条件、異常状態、テストデータは要件・設計へ影響します。早い段階から設計します。

「E2Eテストを増やせば品質を保証できる」

Section titled “「E2Eテストを増やせば品質を保証できる」”

E2Eは重要ですが、遅く不安定になりやすく、原因特定も難しいため、単体・結合・手動確認と組み合わせます。

「自動テストが通れば目視確認は不要」

Section titled “「自動テストが通れば目視確認は不要」”

文章、操作感、視覚、読み上げ、実機、探索的な問題は手動確認が必要です。

「ステージングで動けば本番も同じ」

Section titled “「ステージングで動けば本番も同じ」”

環境変数、ドメイン、CORS、権限、データ量、外部サービス、キャッシュ等が異なることがあります。

「不具合ゼロになるまで公開できない」

Section titled “「不具合ゼロになるまで公開できない」”

ゼロを目指すだけでなく、残存リスクを可視化し、重大度・回避策・対応計画を責任者が判断します。重大な安全・業務問題は妥協しません。

Q1. テストを要件定義時から考える利点は何ですか。

Section titled “Q1. テストを要件定義時から考える利点は何ですか。”
回答と解説 合否条件を考えることで曖昧な仕様、異常状態、必要データ、責任範囲を早期に発見でき、公開直前の大きな手戻りを減らせます。

Q2. 単体テストとE2Eテストの主な違いは何ですか。

Section titled “Q2. 単体テストとE2Eテストの主な違いは何ですか。”
回答と解説 単体テストは小さな処理を高速・独立して確認し、E2Eはブラウザから複数システムをまたぐ利用者フローを確認します。範囲・速度・原因特定のしやすさが異なります。

Q3. 外部APIを使う画面で、正常応答以外に何を確認しますか。

Section titled “Q3. 外部APIを使う画面で、正常応答以外に何を確認しますか。”
回答と解説 遅延、タイムアウト、0件、認証切れ、利用制限、エラー形式、部分成功、再試行、古いデータ・代替表示等を確認します。

Q4. 自動テストへ向く対象を挙げてください。

Section titled “Q4. 自動テストへ向く対象を挙げてください。”
回答と解説 明確な合否があり、繰り返し実行し、変更頻度・事業影響が高い処理です。計算、主要フロー、共通部品、回帰確認等が候補です。

Q5. 公開判定で不具合件数以外に確認することは何ですか。

Section titled “Q5. 公開判定で不具合件数以外に確認することは何ですか。”
回答と解説 重大度、主要フロー、セキュリティ、アクセシビリティ、性能、対応環境、既知制約、切戻し、公開後対応、責任者承認等です。