我们被分配了一个开源软件来测试!该软件有3个包,每个包有10个或更多的类,每个类可能有几十个方法。
我的问题是,在开始结构(白盒)测试之前,我需要理解软件中的每一行代码吗?
我需要从main()方法开始理解整个程序流程吗?
我应该采取什么方法?
发布于 2015-12-01 21:49:42
如果您对每个方法应该做什么有说明:指定输入的预期输出是什么,则不需要详细介绍这些方法的实现细节。正常情况下,这个应该写下来!
您可以编写单元测试,以检查方法是否满足预定义契约(如果存在)。
如果您没有规范,或者最近的趋势是“UserStories”,您需要“反向工程您的规范”:)您需要分析每个方法以了解它在做什么,接下来您将检查这些方法在哪里被调用,以便确定在方法调用中传递的可能值。此外,通过调用方法,您可能会了解到角落的情况是什么。还有那些你绝对想测试的。
……慢慢地,您了解了整个代码:)
发布于 2015-12-01 21:59:02
不,您不必理解每一行代码才能编写单元测试。我对单元测试还不太熟悉,但如果到目前为止,我看到的是测试每个(或大多数)方法,这些方法对某个输入(->参数、对象变量.)的响应不同。
所以你必须知道一个方法做什么,什么时候成功,什么时候失败。对于某些方法,甚至这些案例之间的转折点也是很重要的。
,例如
假设我们有一个方法,它与两个ints之和,必须等于或大于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;
}你能测试的是:
当然,这只是一个非常简单的例子。你测试什么取决于你的方法。对于这种方法,最后两个测试可能完全不需要。但是有些方法更复杂,这些方法可能很有用。
发布于 2015-12-01 22:18:48
有几种类型的测试。
BigInteger fact(int n)方法,您必须编写关于普通正整数、零整数、负整数和max/min值的测试。有几个库可以帮助您:JUnit、TestNG等等。经过软件行业的黑暗时代之后,社区终于出现了一些良好的单元测试实践:
https://stackoverflow.com/questions/34030571
复制相似问题