ソフトウェアテストとは何ですか?
10 年以上前に JMP で働き始めたとき、ソフトウェア テストとは何かと聞かれたら、私はお気に入りの Web 検索 (または最近は AI LLM アシスタント) を使って、次のような答えを返していたでしょう。ソフトウェア テストとは、ソフトウェア アプリケーションまたは製品が意図したとおりに動作し、ユーザーの要件を満たしていることを確認するために評価するプロセスです。
しかし、同僚のジョセフ・モーガンとの多くの議論を通じて、私はソフトウェア工学におけるグレンフォード・マイヤーズ[1]が簡潔に述べた定義を採用しました。
「テストとは、エラーを見つけることを目的としてプログラムを実行するプロセスです。」
この定義はそんなに違うのでしょうか? 私としては違うと思います。Myers ら [1] はこの点について素晴らしい議論をしていますが、ほとんどの人にとって、何かが動作するか確認するように誰かに依頼することと、それを壊そうとすることの間には心理的な違いがあります。Myers の定義を採用することで、テスト エンジニアはエラーを見つけるという目標を持つことになります。これにより構造が提供されるだけでなく、これらのエラー (またはバグと考えることもできます) を早期かつ慎重に見つけて修正することで、意図したとおりに動作し、ユーザーの要件を満たすソフトウェアが完成します。
バグはどこにありますか?
もしあなたがまだ私の話を聞いていて、テストの定義に納得しているなら、次の自然な疑問は、ソフトウェアを破壊しようとする試みをどこから始めるべきかということです。これについては、Boris Beizer [2] に頼ることができます。
「虫は隅に潜み、境界に集まります。」
これを 2 つの部分に分けてみましょう。入力とは、ソフトウェアに反応を返したり、その情報を使って何かを実行したりするためにソフトウェアに与える何らかのデータまたは情報として扱います。
バグは境界に集中します。これは、バグはシステムが処理するように設計されている範囲の境界でよく見つかるということを強調しています。たとえば、関数が 0 から 1 の間の入力を受け入れることになっている場合、境界 (0 と 1) だけでなくそのすぐ外側もテストする必要があります。
バグは隅に潜んでいる: これは、バグは多くの場合、複数の入力が関係するシステムの部分に隠れていることを示しています。つまり、相互作用について考えるのと同じように、これらの組み合わせをテストしない限り、バグは見つかりません。
ここからどこへ行くのでしょうか?
今後数週間にわたって、検証 (適切な製品を構築しているか) とテスト (バグの発見、ソフトウェアの動作確認) に関連するさまざまなトピックについて、私と私の同僚からお話を伺います。私にとって特に興味深いのは、テストと実験計画 (私が話すのが好きなもう 1 つのトピック) の間に深いつながりがあるということです。
独自のアプリケーションを構築している方、独自のテスト課題に直面している方、あるいは単にこのトピックに関心がある方、ぜひ読み続けてください。取り上げてほしいトピックはありますか? コメントでお知らせください。
そして、写真がないとブログは完成しないと思われるので、1947 年にグレース ホッパーを含むハーバード大学のチームの一部が発見した最初の「コンピュータ バグ」の写真です。

海軍水上戦闘センター提供、バージニア州ダルグレンの 1988 年、 最初のコンピュータバグ、1945 年、パブリック ドメインとしてマーク、詳細はウィキメディア コモンズで
参考文献。
- G. Myers、C. Sandler、T. Badgett、 「The Art of Software Testing」、第3 版、ニュージャージー、John Wiley & Sons、Inc、2011 年。
- B. Beizer,ソフトウェアテストテクニック、Van Nostrand Reinhold 電気/コンピュータサイエンスおよびエンジニアリングシリーズ、1983
こんにちは、 @Ryan_Lekivetz さん!
この非常に素晴らしい紹介に感謝します。ソフトウェアをテストするためのカバーリング配列やその他の障害特定方法の使用について、もっと詳しく学ぶのが待ちきれません。