luikore
2013-09-10 00:58:04 +08:00
不管是升级依赖的库版本, 还是重构, 或者优化, 先要有测试, 有了测试怎么玩都可以. tdd 更容易保证测试和实现是两套不同的 mind set (测试是用户视角, 实现是程序逻辑视角), 以及实现不冗余. 但就算是测试后行, 也胜过没有测试.
如果说没时间写测试, 那只有两种可能:
错误估计了需要花费的时间, 你的"重构"是能搞完, 但是之后还有一大堆 bug 等着修.
或者是之前缺乏测试, 浪费在修 bug 上的时间已经太长了, 造成了恶性循环.
测试容易落入的两个误区:
1是有些语言(先天缺陷, 尤其是java, c#)和环境(设计模式粉的架构)很难搞自动化的功能测试和集成测试, 所以很多人只写点皮毛的单元测试了事 -- 这样的测试用处就很小了 -- 但就算很难写, 写出来以后就是沉淀在那里的价值了. 多数老公司还有很多专门的测试人员去手动做集成/验收测试, 那么你重构以后必须让测试人员去各种点一遍...
2是测的东西体现了太多关于实现的知识, 不得不使用很多 mock 和 stub (多见于后行的测试). 测试时最好换位思考, 从使用者角度去想问题, 或者直接换个人写测试.