パーフェクトソフトウェア

完璧なソフトウェアは作ることができませんし、作ろうとしてもいけません。
これは、ソフトウェア開発のテストに関する最も重要で基本的な事でありながら、中々理解されない事です。他のどんなものでもそうですが、作り手が人間である以上は完璧な物を作ることはできません。
ソフトウェアは形がないものですから、その品質を保証するためにはテストを行う必要があります。仮に「完璧な」ソフトウェアである事を保証するのであれば、「完璧な」テストが必要です。想定される環境すべてで想定されるすべての入力に対しテストする必要があるでしょう。通常は、そのコストを払うことは出来ません。したがって、絶対に不具合が起きないことは保証できません。
しかし、それはソフトウェアの品質が悪くても良いという事とはなりません。起動すらしない、通常の入力をしただけでプログラムが停止するなどといった状態ではまともなソフトウェアとは言えません。なので、「必要十分なテストを行い品質を担保する」事が重要な事です。
「必要十分なテスト」は、そのソフトウェアの性質や顧客の要求によって全く異なります。ミッションクリティカルなシステムであれば、稼働率99.99999... %という信頼性が求められるかもしれません。自社で運用するサービスで1日くらい落ちていても問題ないと判断したならば信頼性に関するテストをしないかもしれません。しかし、後者のソフトウェアは品質的には良くないかもしれませんが、コストや納期などを総合的に判断して、とりあえず動くレベルで良いという判断を下しているならば、ソフトウェアの利用者にとっては十分なソフトウェアです*1
また、「必要十分なテスト」を効率よく選択する技術が必要です。考えられるすべての入力値でテストすることは不可能です。したがって、いくつかの入力値をサンプルとして利用する事になります。サンプルの取り方としては闇雲に数を増やせば、品質が高くなるとも限りません。効率よくサンプルを抽出し、少ないテストケースで、より多くの不具合を検知することが、品質の向上に貢献するのです。
その為には、プログラマがプログラミング技法を学ぶ事と同じようにテスト技法も学ぶ必要があります。

パーフェクトソフトウエア

パーフェクトソフトウエア

*1:ただ、それを開発する開発者としては心が痛むケースがあります