たとえるなら
自動車工場の検査です。部品ひとつずつの検査(単体テスト)、エンジンとタイヤを組み合わせた検査(結合テスト)、完成車で実際に走らせる検査(総合テスト)と段階を踏みます。いきなり完成車だけ検査すると、不具合がどの部品のせいか特定に苦労します。
もう少しくわしく
テストは、作ったプログラムが意図したとおりに動くかを確認する工程です。「正しい入力で正しく動くか」だけでなく、「間違った入力をされても壊れないか」「同時にたくさんの人が使っても耐えられるか」など、さまざまな角度から確かめます。開発の工程では実装のあとに置かれ、リリース前の関所の役割を果たします。
テストには段階があります。関数や部品ひとつずつを確かめる単体テスト、部品同士をつなげて確かめる結合テスト、システム全体を利用者と同じ操作で通しで確かめる総合テスト。小さい単位から順に固めていくことで、問題が見つかったときに原因の場所を絞り込みやすくなります。
かつてテストは人が手で行うものでしたが、いまはプログラムでテストを自動化するのが主流です。テスト用のプログラムを一度書いておけば、修正のたびに何百項目もの確認を数分で繰り返せます。「修正したら別の場所が壊れた」という事故をすぐ検知できるため、自動テストは安心して開発スピードを上げるための土台とされています。
現場での使われ方
「実装は終わったので、これからテストに入ります」
機能を作る工程が完了し、正しく動くかを確認する工程へ進む、という進捗報告です。
「テストで不具合が3件見つかりました」
リリース前の確認で問題を検出できた、という報告。本番で見つかるより、ずっと良い知らせです。
よくある質問
テストをすればバグはゼロになりますか?
なりません。テストは「用意した確認項目の範囲で問題がない」ことを示すもので、すべての使われ方を網羅することは不可能です。それでも、重要な部分を重点的にテストすることで、リスクを大きく減らせます。
テストは誰がやるのですか?
単体テストは実装したエンジニア自身が書くことが多く、総合テストは専門のテスト担当者(QAと呼ばれます)や、発注側の担当者が行うこともあります。プロジェクトの体制によってさまざまです。