テストは安心して変更し続けるためにある。小さいテストを中心に、守りたいものは挙動で押さえる。


目次

  1. テストは変化できる能力のためにある
  2. 規模で分け、小さいテストを中心にする
  3. 壊れてほしくないものは挙動でテストする
  4. 大きなスイートが腐る道筋
  5. 人に残すもの

テストは変化できる能力のためにある

自動テストがあれば、信頼性を落とさずにコードを変え続けられる

  • デバッグが減り、リファクタリングに踏み切れる
  • 実行できる文書になり、レビューも軽くなる
  • 信頼できないスイートは無いより悪い。落ちたらすぐ直す

規模で分け、小さいテストを中心にする

範囲がどうであれ、できるだけ小さい規模で書く

規模許されること主な用途
小1プロセス内だけ依存をダブルにしたテスト
中1台のマシン内(DB も可)UI とサーバーの組み合わせ
大制約なしシステム全体の検証
  • 規模は行数でなく使える資源で決め、違反は道具で落とす(§11.2)

範囲は規模とは別の軸

範囲は検証するコードの量で、実行されるコードの量ではない

  • 広い範囲でも、依存をダブルにすれば小テスト
  • 1メソッドでも、ブラウザが要れば中テスト
  • 部品間の契約は狭いテストで確かめられない。範囲を混ぜる

壊れてほしくないものは挙動でテストする

壊れてほしくないものは、性能やアクセシビリティも含めすべてテストする

  • 無関係な変更で壊れたら、テストを足すのは自分の側
  • カバレッジは目標にした途端に意味を失う。穴探しの手がかりにとどめる
  • 質は「期待される挙動を守れているか」「安定しているか」で測る

大きなスイートが腐る道筋

大きなスイートは、脆さと遅さで腐る

  • 脆さ:モックの使いすぎで無関係な変更に落ちる(テストダブル)
  • 遅さ:決め打ちの sleep() をやめ、タイムアウト付きでポーリングする

人に残すもの

検索結果の質や込み入った脆弱性の発見は、人の判断が勝る

  • 人が見つけた欠陥は、自動テストに落として見張らせる

関連