Skip to content
Latchkey

自動テストとは?

自動テストとは、ソフトウェアを使ってコードに対するテストを自動的に実行し、手作業なしに期待どおりに振る舞うかを検証することです。

自動テストは、アプリケーションを手動でクリックして回る遅くエラーの起きやすい作業を、数秒で振る舞いを検証するコードに置き換えます。頻繁で自信のある変更を可能にするセーフティネットであり、CIを価値あるものにするエンジンです。

それは何か

自動テストとは、ソフトウェアの一部を動かし、結果が期待どおりであることをアサートする小さなプログラムです。テストフレームワークはそのようなテストを多数実行し、passまたはfailを報告し、いずれかが失敗すれば非ゼロで終了します。これはまさにCIが変更をゲートするために必要とするシグナルです。

主な種類

  • ユニットテスト: 単一の関数やコンポーネントを分離して検証します。
  • 統合テスト: 各部品が連携して動くことを検証します。
  • エンドツーエンドテスト: アプリを通したユーザーフロー全体を検証します。
  • smoke test: 基本がまだ機能するかの素早いチェック。

実例

価格に税を加える関数には、10パーセントの税率で入力100が110を返すことをアサートするユニットテストがあります。誰かが価格計算のコードを変更するたびに、テストはミリ秒単位で実行され、計算が壊れれば即座に失敗します。顧客が誤った合計を目にするずっと前にです。

なぜCI/CDを支えるのか

継続的インテグレーションは、"この変更は何かを壊したか?"という問いへの信頼できる答えに依存します。自動テストはその答えを数分で提供します。テストがカバーする範囲が広いほど、自信を持ってマージしdeployでき、それが継続的デリバリーとデプロイメントを安全にします。

良い実践

  • 少数の遅いエンドツーエンドテストより、多数の速いユニットテストを優先します。
  • テストを独立させ、並列で実行できるようにします。
  • 失敗を明確にし、原因が一目でわかるようにします。
  • releaseの前だけでなく、変更のたびにスイートを実行します。

重要なポイント

  • 自動テストは手作業なしに数秒で振る舞いを検証します。
  • ユニット、統合、エンドツーエンド、smoke testはそれぞれ異なる目的に役立ちます。
  • 信頼できるテストこそがCI/CDを安全にします。

関連ガイド