ソフトウェアテスト 【software testing】
概要
ソフトウェアテスト(software testing)とは、開発中のソフトウェア(コンピュータプログラム)が意図した通りに動作するかを検証すること。テストにより欠陥(バグ)が発見されると、原因箇所を探し出して修正するデバッグ(debug)作業が行われる。コンピュータプログラムの多くは人間がプログラミング言語を用いて記述するが、プログラムコードの単純な誤記から論理の誤り、仕様の誤った理解など、様々な原因により本来の意図から外れた欠陥箇所が生じる。試験や検査によりこのような欠陥を発見するのがソフトウェアテストの役割である。
テスト手法の分類
プログラムのソースコードを人間による目視や専用のソフトウェアによって解析し、誤っている箇所を見つけることを「静的テスト」(static testing)、実際にプログラムを実行してみて意図した通りに動作するかを確かめることを「動的テスト」(dynamic testing)という。狭義のソフトウェアテストは後者を指すことがある。
プログラムの機能が意図した通りに実装されているかを確かめるテストを「機能テスト」(functional testing)、実用上要求される性能を満たすかを確かめるテストを「性能テスト」(performance testing)という。性能テストのうち、極限的な高負荷への耐性を見極めるものは「ストレステスト」(stress testing)という。
プログラムの内部構造に着目し、すべてのコードを網羅するようにテストケースを作成して各部分の動作を検証する手法を「ホワイトボックステスト」(white-box testing)、内部構造は分からない前提で、外部から見た振る舞いが仕様などに照らして正しいかを確かめる手法を「ブラックボックステスト」(black-box testing)という。両者を組み合わせた「グレーボックステスト」(gray-box testing)が行われることもある。
テスト工程の分類
大規模なソフトウェア開発では全体を細かな機能単位に分割して開発することが多いが、その場合はソフトウェアテストも段階的に実施する。関数やメソッド、サブルーチンなど最小の機能単位を対象とする「単体テスト」(ユニットテスト/unit testing)、複数のモジュールを繋ぎ合わせて行う「結合テスト」(統合テスト/integration testing)、ソフトウェア全体を対象に行う「システムテスト」(総合テスト/system testing)といった順で進めていく。
結合テストは、下位のモジュールから上位に向けて順に結合していく「ボトムアップテスト」(bottom-up testing)と、上位のモジュールから下位に向けて結合していく「トップダウンテスト」(top-down testing)に分かれる。上位側が未完成の場合はダミーとして「テストドライバ」(test driver)を、下位側が未完成の場合は「テストスタブ」(test stub)をそれぞれ用意する。両者を同時に行う「ビッグバンテスト」(big-bang testing)が行われることもある。
ソフトウェアの受託開発の場合は、完成後に顧客側で納品を受け付けるかどうか検証する「受け入れテスト」(UAT:User Acceptance Testing)が行われる。一般に販売するパッケージ製品の場合には、既存顧客や一般から募った参加者にテスト版を配布して動作検証してもらう「アルファテスト」(alpha testing/開発途上版が対象)や「ベータテスト」(beta testing/発売直前版が対象)が行われることが多い。