0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

🐞探索的テストの極意 〜Bugの洞察力を鍛える〜

1. はじめに:仕様書に書かれていないバグをどう見つけるか?

皆さんはこんな経験ありませんか?

  • 「単体テストも結合テストもパスしたのに、リリース後に致命的なバグが見つかった…」
  • 「ユーザーの変な使い方でバグが出たけど、再現方法がわからない…」

これらの多くは「仕様通りだけど、想定外」という領域のバグです。こういったバグを見つけ出すのが得意なのが、**探索的テスト(Exploratory Testing)**です。

本記事では、探索的テストの考え方と、実務で活用するためのスキル・ツール・マインドセットを体系的に紹介します。


2. 探索的テストとは?定義と誤解

✅ 定義(James Bachによる)

「テスト設計・実行・学習を並行的に行う、同時的で柔軟なテスト手法」

つまり、

  • 事前に詳細なテストケースをすべて定義するのではなく、
  • 実行しながら学び、仮説を立て、次の探索に活かす

というサイクル型のアプローチです。

❌ よくある誤解

誤解 実際は…
探索的テスト=行き当たりばったり → 意図と観察に基づく知的な活動です
自動化できない → 補助的にツールを使ってログ取得や操作記録も可能
時間がかかるだけ → 小さな時間単位(チャーター方式)で高速に回せる

3. 実践:チャーター方式で探索的テストを導入してみる

🧭 Step 1: テストチャーター(目的)を定める

タイトル: ログイン画面の脆弱性チェック
目的: 異常系入力やセッションの扱いを確認する
時間: 30分
対象機能: /login エンドポイント、クッキー処理

🔍 Step 2: 仮説と観察を記録しながらテスト

# 例:Python + requestsで異常系テスト
import requests

payloads = [
    {"email": "' OR '1'='1", "password": "anything"},
    {"email": "test@example.com", "password": "' OR ''='"},
    {"email": "", "password": "admin"},
]

for p in payloads:
    res = requests.post("http://localhost:8000/login", data=p)
    print(f"Payload: {p} => Status: {res.status_code}, Response: {res.text}")

結果をノートアプリやNotionで以下のように記録:

テストパターン 結果 気づき
SQL Injection風文字列 200 OK バリデーションがない?
空のemail 400 Bad Request 適切に制御されている

🧠 Step 3: 発見と学びを活かして次の仮説へ

→ 「レスポンス時間が一定以上だとタイムアウトする?」
→ 「入力フィールドのmaxlengthはクライアントとサーバ両方で定義されているか?」


4. 実務で使えるTips & よくある落とし穴

✅ 実務でのコツ

  • タイムボックスを明確に:30分単位で集中し、仮説と結果をすぐ記録
  • 画面録画+ログ収集:再現性ある形でチームに共有
  • 探索→自動化サイクル:発見されたシナリオを自動化テストに組み込む

❌ よくある失敗

失敗例 対策
探索が脱線し、目的を忘れる → チャーターをホワイトボードに書いて常に意識
「気合い」だけの操作 → 仮説→観察→記録を徹底する
チームに共有できない → 結果をMarkdownテンプレで簡潔に共有

5. 応用編:AIとの組み合わせで探索力を高める

最近では、探索的テストにもAIを活用する事例が増えています。

🤖 ChatGPTで異常系パターン生成

prompt = """
Webアプリのログイン画面における異常系入力のパターンを10個、JSON形式で出力してください。
"""

→ 出力例(部分):

[
  {"email": "a@b.c", "password": ""},
  {"email": "<script>alert(1)</script>", "password": "123"},
  {"email": "ユーザー名", "password": "パスワード"}
]

🤝 Exploratory + Generative Testing = 最強のバディ

  • エンジニア:仮説を持ち探索
  • AI:多様なパターン生成・記録支援
  • テスト自動化ツール:再現性ある形で回帰テストへ

6. まとめ:探索的テストは“考えるテスト”

🔎 探索的テストのメリット

観点 内容
柔軟性 要件が曖昧な場面で強い
洞察力 エンジニアの“気づき”が武器に
組み合わせやすさ 自動化やAIと併用しやすい

🧭 今後の展望

  • Exploratory Testing専用のメトリクスや可視化ツールの発展
  • QAチームと開発者の垣根を超えた「共同探索」
  • GenAIとの連携による“賢い探索”時代の到来

🔚 おわりに

探索的テストは、単なるバグ探しではなく、「ソフトウェアとの対話」です。
不具合を発見する力は、“洞察力 × 好奇心 × 構造化された行動”から生まれます。

まずは1チャーター(30分)から、あなたも探索してみませんか?


📚参考リンク


🧵 #探索的テスト #テスト戦略 #バグハンター思考

質問やフィードバックがあれば、ぜひコメントでお知らせください!

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?