软件工程里的测试是一件很特别的工作,有别于其他的环节,测试更像是一种哲学而不是科学。
因为考量测试成功与否是很难量化的,当然你可以说我们有测试覆盖率呀,但是很多覆盖率高的项目并不成功,bug依然难以控制。
今天读了junit的最佳实践问答,令我茅塞顿开。有两点我特别想记下来。
第一是怎样判断测试是足够的呢?当你发现老是有新的bug出现就是测试不够,相反就是够了。如果发现测试代码很难写,也可能是系统设计的不好。
第二,怎么样的代码是太简单而不需要测试呢?答案是代码不会自己崩坏,如果出错一定是其他部分错而连带引起的,这时候就不用这对这个功能写测试代码。
单元测试的目的是我用最短最快的检查确保这小段的代码能带到原来的设计目的。
BDD的目的则不同,他要从用家的角度确保结果跟需求一致,这样就确保了我们在重构或者添加新功能时,不会破坏已经交付的功能。对庞大的系统来说,自动测试是高效且必须的,因为没有可能在每次更改后用手工检查每一个角落。