如何在遗留代码之上进行TDD?

@JimmyLv 2018-07-22 13:29:41发表于 JimmyLv/jimmylv.github.io

GitHawk Upload by JimmyLv

只要业务在发展,系统调整就是必然,因为处理不同量级的系统本质上就不是一个物种。真正挑战的是,怎么在高速行驶中,把奥拓改成奥迪。

似乎这也是TDD的痛,tdd更适合从无到有0到1,那1->better 1怎么做呢?

先给遗留代码写测试,然后再放心大概重构吗?

  1. 根据业务功能写一个测试(AT)
  2. 运行测试,测试通过,绿
  3. 快速写一个新的实现(通常可以复制),测试通过,绿
  4. 重构新的实现,做进一步改进
  5. 替换原有的实现,运行测试,绿

但是,

补测试是个无底洞,因为一直在开发新功能。就好比今天吃昨天的剩饭,明天吃今天的剩饭
因为之前的代码在编写时没有考虑可测试性,没有合理抽象和分离关注点,导致后期添加单元测试的成本较高
在已经手工测试过证明没有问题的代码上添加单元测试,也让人有画蛇添足的感觉
并且按照以前的习惯,在需求变更或修复Bug后会进行手动测试,现在还要修改单元测试代码,更会造成一种「单元测试维护成本很高」的误解
如果能保证新增的代码都有测试覆盖,整体测试覆盖率就会持续上升
利用TDD(测试驱动开发)的方式,在开发新功能,修复Bug,做需求变更前,先新增或修改单元测试,再修改实现代码,单元测试通过即代表工作完成,减少了大量的手工测试和 Debug时间,在完善的单元测试覆盖下还可以进行大胆重构,这样将极大提高开发效率和代码质量
@小波老嬉

Sent with GitHawk