如何测试java软件?

时间:2015-12-01 21:31:11

标签: java unit-testing testing white-box-testing

我们已经分配了一个开源软件来测试! 该软件有3个包,每个包有10个或更多类,每个类可能有几十个方法。

我的问题是,在开始结构(白盒)测试之前,我是否需要了解软件中的每一行代码?

我是否需要了解从main()方法开始的整个程序流程?

我应该采取什么方法?

3 个答案:

答案 0 :(得分:1)

如果你有关于每个方法应该做什么的规范:指定输入的预期输出是什么,那么你不需要进入这些方法的实现细节。通常这应该写下来!

您可以编写单元测试来检查方法是否满足预定义的合同(如果存在)。

如果您没有规格或最近的趋势' UserStories'你需要对你的规格进行逆向工程。 :)您需要分析每个方法以了解它在做什么,接下来您将检查这些方法的调用位置,以便找出方法调用中传递的可能值。同样来自调用方法,您可能会了解角落情况。那些你绝对想要测试的人。

....慢慢地你学会了整个代码:)

答案 1 :(得分:0)

不,您不必了解编写单元测试的每一行代码。我对单元测试还不是很有经验,但到目前为止看到的是测试每个(或大多数)对某个输入做出不同反应的方法( - >参数,对象变量......)。

因此,您必须知道方法的作用,成功执行的操作以及何时失败。对于某些方法,即使这些案例之间的转折点也很重要。

例如

我们假设我们有一个总和两个整数的方法,必须等于或大于0:

public static int sumInts(int a, int b) {
    if (a < 0 || b < 0) throw new IllegalArgumentException("'a' and 'b' should be 0 or above!");

    return a + b;
}

你可以测试什么:

  • 如果a = 49且b = 16,它会返回65吗?
  • 如果a = -3且b = 4,是否会抛出异常?
  • 如果a = 5且b = -13,是否会抛出异常?
  • 如果a = -46且b = -13,是否会引发异常?
  • 如果a = 0且b = 0,它是否返回0?
  • 如果a = -1且b = -1,是否会引发异常?

当然,这只是一个非常简单的例子。您测试的内容取决于您的方法。对于这种方法,最后两次测试可能完全不需要。但是有些方法更复杂,可能会有用。

答案 2 :(得分:0)

有几种类型的测试。

  • 单元测试测试每种方法在输入数据的不同情况下的功能。就像,如果你有一个BigInteger fact(int n)方法,你必须在正常的正整数,零,负整数和最大/最小值上编写测试。有几个图书馆会帮助您:JUnitTestNG等。
  • 集成测试测试整个应用程序,所有包和类作为一个组。见Arquillian project
  • 此外,您可以使用Selenium编写黑盒测试。
  • 更多类型的测试,如回归测试,负载测试等。这是QA工程师的工作。

在软件行业黑暗时代之后,社区终于找到了一些好的单元测试实践:

  • Code coverage。我们将住在没有代码覆盖率指标的洞穴中。
  • Fault injection可帮助您构建更强大,更稳定的软件。
  • mocking usage编写更具体的测试,而不会对您应用程序的其余部分产生任何影响。