代码改变世界

注重实效的单元测试(Pragmatic Unit Tesing)

2011-03-12 14:27  Tony Leung  阅读(152)  评论(0编辑  收藏  举报

一般原则:

测试任何可能失败的地方。

测试任何已经失败的地方。

对于新加的代码,在被证明正确之前,都可能是有问题的。

至少编写和产品代码一样多的测试代码。

针对每次编译都做局部测试。

签入代码之前做全局测试。

要回答的问题:

我如何知道代码运行是否正确呢?

我要如何对它进行测试?

还有哪些方面可能会发生错误?

这个问题是否会在其他的地方出现?

测试哪些方面:使用你的 RIGHT-BICEP

结果是否正确(Right)?

边界(boundary)条件是否正确?

是否可以检查反向(inverse)关联?

是否可以使用其他方法来跨检查(cross-check)结果?

错误条件(error condition)是否可以重现?

性能方面是否满足条件?

好的测试是一个 TRIP

Automatic(自动的)。

Thorough(全面的)。

Repeatable(可重复的)。

Independent(独立的)。

Professional(专业的)。

CORRECT 边界条件

一致性(Conformance) —— 值是否符合预期的格式?

有序性(Ordering) —— 一组值是该有序的,还是该无序的?

区间性(Range) —— 值是否在一个合理的最大值和最小值的范围之内?

引用,耦合性(Reference) —— 代码是否引用了一些不受代码本身直接控制的外部因素?

存在性(Existence) —— 值是否存在(例如,非null,非零,包含于某个集合等)?

基数性(Cardinality) —— 是否恰好有足够的值?

时间性,绝对的还是相对的(Time) —— 所有事情是否都是按顺序发生的?是否在正确的时间?是否及时?