此前,Joseph Morgan 详细讨论了 JMP 中的单元测试理念。以下是一些精彩内容:
为了使本博客简单易懂,我使用 Whittaker(2000)的术语来定义单元测试。
单元测试:输入域
“单元测试”一词指的是测试单个软件组件或组件集合。测试人员定义相关单元的输入域,并忽略系统的其余部分。
让我们关注第二部分,测试人员定义输入域。如果我们有一个想要测试的函数,但想将各个参数视为单位,该怎么办?
例如,以 JSL 中的 Beta 分布函数为例(脚本索引中的屏幕截图)。Beta 分布函数用于对介于 0 和 1 之间的随机变量进行建模,通常用于贝叶斯统计。

我们可能会将 alpha 和 beta 固定为 0.5 之类的值,并测试许多不同的 q 值。
alpha = 0.5;
beta = 0.5;
Beta Distribution( 0.5, alpha, beta );
Beta Distribution( -1, alpha, beta );
Beta Distribution( 0, alpha, beta );
现在,确定我们对 Beta 分布函数的每个函数调用的期望值本身就是一篇博客文章(称为 oracle 问题)。但是,假设我们知道我们的期望值(在本例中为 0.5、缺失值和 0),我们可以测试 q。每个输入都可以用这种方式单独检查,例如 alpha、beta,甚至 theta 和 sigma。
一次一个因素 (OFAT) 测试
如果我们一次只关注一个参数,这意味着什么?通过将其他参数设置为固定值(例如默认值)并更改一个参数的值听起来就像通过 OFAT 进行测试。
当介绍(典型的)设计实验时,我们讨论了 OFAT 的缺陷。特别是,由于资源效率低下和缺少交互,不鼓励使用 OFAT。我们可以看到这种测试方法存在同样的问题。但是,如果我们正在测试软件,我们可以稍后重用这些测试用例,因此创建这些测试和确定预期结果不一定是浪费测试资源。如果我们发现问题(即结果不是预期的),我们就知道是哪个输入发生了更改导致了问题。如果作为应用程序开发过程的一部分,这尤其有用,因为这些测试可以定期运行(同样,这是未来博客的主题)。
我们接下来要去哪里?
如果您读了这篇博客,并想知道为什么我们不一次更改多个输入,请放心,我们会的。事实上,未来的博客将讨论如何将这一测试挑战视为实验设计问题。敬请期待!
Whittaker, JA, 2000. 什么是软件测试?为什么它这么难?。IEEE软件, 17 (1),第 70-79 页。