什么是软件测试?
十多年前,当我开始在 JMP 工作时,如果您问我什么是软件测试,我会去我喜欢的网络搜索(或者现在的 AI LLM 助手),然后得到类似这样的答案:软件测试是评估软件应用程序或产品以确保其按预期运行并满足用户要求的过程。
然而,通过与我的同事 Joseph Morgan 的多次讨论,我采用了软件工程中的一个定义,由 Glenford Myers [1] 简明扼要地表述如下:
“测试是为了发现错误而执行程序的过程。”
这个定义真的有那么不同吗?我认为是的。虽然 Myers 等人 [1] 对此进行了很好的讨论,但对于大多数人来说,要求某人检查某物是否正常工作与试图破坏它之间存在心理差异。通过采用 Myers 的定义,测试工程师的目标是发现错误。这不仅提供了结构,而且通过尽早和周到地发现和修复这些错误(或者我们可能认为是 bug),结果是软件按预期运行并满足用户要求。
虫子在哪儿?
如果你仍然听我讲,并且对测试的定义感到满意,那么下一个自然而然的问题就是从哪里开始尝试破坏软件。为此,我们可以求助于 Boris Beizer [2]:
“虫子潜伏在角落里,聚集在边界处。”
让我们将其分为两部分,我们将输入视为您提供给软件以获得反应或使用该信息执行某些操作的某种数据或信息。
错误聚集在边界处:这强调了错误通常出现在系统设计处理的边缘。例如,如果一个函数应该接受 0 到 1 之间的输入,我们应该测试边界(0 和 1)以及边界之外。
漏洞潜伏在角落:这表明漏洞通常隐藏在涉及多个输入的系统部分中。也就是说,就像我们对交互的看法一样,除非我们测试这些组合,否则我们不会发现漏洞。
我们接下来要去哪里?
在接下来的几周里,我和我的同事将讨论与验证(我们是否在开发正确的产品?)和测试(查找错误、确保软件正常运行)相关的不同主题。我特别感兴趣的是,测试和实验设计之间存在着深厚的联系(这是我喜欢谈论的另一个话题)。
无论您是在构建自己的应用程序、面临自己的测试挑战,还是只是对这个主题感兴趣,我都希望您继续阅读。您希望看到涵盖哪些主题?请在评论中告诉我们!
而且,如果没有图片,博客就显得不完整,这是第一张“计算机错误”的图片,就像 1947 年哈佛大学一个团队的一部分,其中包括Grace Hopper。

由弗吉尼亚州达尔格伦海军水面作战中心提供,1988 年。 第一台计算机漏洞,1945 年,标记为公共领域,更多详细信息请访问Wikimedia Commons
参考。
- G. Myers、C. Sandler 和 T. Badgett, 《软件测试的艺术》,第3 版,新泽西,John Wiley & Sons,Inc,2011 年。
- B. Beizer, 《软件测试技术》 ,Van Nostrand Reinhold 电气/计算机科学与工程系列,1983 年
嗨@Ryan_Lekivetz !
非常感谢这个非常好的介绍,迫不及待地想了解更多关于使用覆盖阵列或其他故障定位方法来测试软件的信息。