ソフトウェア開発におけるテストとはなにか

テストの目的

テストとはソフトウェア開発において、開発中のソフトウェアの品質を高めるために不具合の有無や、設計したとおりに動作するかどうかを確かめる行動のことを言います。テストを行うことで、運用時に発生する可能性のある不具合を先に発見することができます。テストで得た情報は、デバッグという不具合の修正を行う過程で利用されます。

テストの起源

元は製造業の品質制御のために用いられておりました。製造された部品が決まった条件を満たすか、差異が許容範囲内であることを確認するものです。今でもこの部品のテストを行う習慣はソフトウェア開発でも残っており、モジュールテスト/単体テストと呼ばれます。

テストのタイミング

https://www.ipa.go.jp/archive/publish/qv6pgp0000000yho-att/000005132.pdf 図2.1 V字型モデル
 テストの流れは、V字モデル表される流れで行われます。このV字モデルに従ったテストプロセスは、設計のプロセスと順番が逆です。設計のプロセスでは通常、顧客の要求がなにか分析して、それからシステム流れを設計したり、各モジュールの設計をしたりしますが、テストではその逆順で行います。まず単体テストと呼ばれるモジュールや関数などのテストを行い、次にそれらを結合させて動作するかどうか確かめる統合/結合テストを行います。その後、システム全体の動作を確認するシステムテストを行います。システムテストでは、ソフトウェアがユーザーのニーズや期待を満たすかどうか、機能や性能、安全性などの観点からテストを行います。最後に、ソフトウェアが完成したら、依頼者や利用者が受け入れるかどうかを判断する受入テストを行います。受入テストでは、ソフトウェアが契約や規格に沿っているかどうか、ビジネスロジックと一致しているかどうかなどの観点からテストを行います。

テストの心得

 テストの目的の章で書いた通り、テストは不具合があることを示すことしかできません。逆にテストは対象に未知のバグがないことを証明することは不可能です。現実での悪魔の証明に似た問題で、無いことの証明は不可能です。加えて、バグが一切ないシステムというのはごく単純なプログラムでもなければ不可能であり、テストでも全条件の組み合わせをテストすることは不可能であるため、すべての不具合を見つけ、修正しようとするのではなく、リスクが許容可能かどうかといったリスク分析や優先度付けを行うべきです。
 
参照
[ソフトウェアテストとは?20種類以上のテストを分類ごとに徹底紹介 | Applause (saaspresto.jp)]( https://applause.saaspresto.jp/blog/software-testing/ )
[品質とテスト - TestRail Blog (techmatrix.jp)]( https://blog.testrail.techmatrix.jp/quality-and-testing/ )