透明思考


Transparent Thoughts


都是为了半夜能提交(一)

这是一个典型的JavaEE项目:SpringMVC,Maven;需要集成三个外部系统。除了我之外,就是两个嫩得不行的小孩。从一开始我就知道,我必须把规矩定好,不然再简单的东西新手们也能把自己玩死。大部分规矩还是老规矩,比如测试覆盖率100%,当然CheckStyle啦什么的就不用说了。

但是这个项目有个特别的trick:要集成的三个外部系统,有两个一到晚上(澳洲的晚上,北京时间也就6点来钟)就歇菜了。问了客户的人,人家说是他们依赖的某系统固定歇菜周期,具体是怎样还得花工夫去找。总之这个造成的结果就是,过了北京时间6点来钟就不能提交代码了,因为一提交build就会红,因为跟那两个系统集成的测试都会挂。

虽然说我们build的时间一直就不长(没有超过三分钟),但是我每次看见跑一堆跟依赖系统连接的集成测试就觉得心里不爽;再加上晚上不能提交代码,这就更加不爽了。我白天乱七八糟的破事太多,写会儿代码就会被打断,经常得到了晚上才有大块时间集中干点事,这一家伙晚上不让提交代码,还不把我憋死啊。

所以我的目标是:我要半夜也能提交代码!

我是有具体办法的。跟依赖系统连接的集成测试,其实只要每天跑一次就行了,毕竟那些外部系统接口很稳定不会怎么变。把集成测试拿掉之后,所有我自己程序里的逻辑应该不再依赖项目之外的任何东西。这样的测试跑起来又快,又不会因为外部依赖而变得不稳定,那我就可以半夜写代码了~

接下来我要讲的内容:

  • 集成点的测试策略
  • 没有外部依赖的开发环境
  • 如何达到100%测试覆盖率
  • 重构你的代码(和测试代码)

(本文作者熊节是ThoughtWorks的总监咨询师)