如何识别软件中的错误而不是测试人员的错误?

时间:2014-03-20 08:04:03

标签: java unit-testing testing junit

我目前正在设置一个实验,我将研究修改某种测试技术如何影响测试人员发现的错误数量。我计划使用一个带有方法的库,我已经播种了一些特定的编程错误,当用户执行这些错误时会导致错误。通过ant脚本,我执行所有JUnit测试并解析创建的testreports的结果(测试套件的信息,传递/失败/错误的数量等)。

现在我的问题是,如果你知道如何识别失败(在其中一个测试中)是否真的是测试人员发现的错误,或者她是否在测试中犯了错误。

示例:我们假设我有一个简单的方法:

public int multi(int n1, int n2) { return n1 * n2; }

测试仪的要求是:"多功能需要两个整数并返回两个"的产品。

如果她写一个测试用例如:

assertEquals(8, multi(5,10));

这会导致测试失败,但这不是错误,而是测试人员做出错误的测试用例。

如果我宁愿使用以下方法,在乘法语句中将种子错误添加为1:

public int multiBug(int n1, int n2) { return (n1 * n2) + 1; }

如果测试人员将测试用例写为:

assertEquals(8, multi(2,4));

她会发现一个错误,因为她希望"正确"结果但测试仍然失败。

我想在实验后动态执行此操作并且不对此进行分析的原因是我想在测试会话期间给测试人员提供反馈。

有没有人知道如何解决这个问题?可以做一个"双重呼叫"当" bug-method"调用来验证结果"正确的方法"?因此,如果用户测试multiBug,我会使用相同的参数调用多功能并验证结果?

请记住,我确切地知道每种方法中存在哪些错误。

侨!

1 个答案:

答案 0 :(得分:1)

我认为如果测试的期望是错误的,那么在测试中找不到错误是不可能的。要找到这个错误,某人必须有不同的期望,这也可能是错误的。这将导致无限级联的期望。相反,我建议将测试视为规范/项目要求。我的意思是删除测试所依赖的任何冗余需求源。这些可能会导致测试中的错误。除了代码本身之外,将测试作为第二个最具体的规范,这是应用程序的最具体的规范。然后应用最佳测试驱动开发:对于应用程序必须满足的每个要求,首先编写测试。生成所有类和方法以使代码编译,仅此而已。观看测试失败。这是最重要的。如果它没有失败,那就不是测试。现在提供最愚蠢的实现来使测试成功。保持实施简单愚蠢是非常重要的。否则,您可以稍后运行成功的测试,而无需修改/添加代码。这是一个不好的迹象。每个测试都应该完全解决一个方面,不能少,不能更多。测试必须尽可能少做假设。否则它正在测试实现而不是测试要求。

我在此停止,因为如果我计算,它会导致博客文章或教程: - )