在Codurance,除非有非常有说服力的解释,否则不管使用什么开发语言,都是从测试开始的。
如果直接空降到这样一个环境,四周所有的人都是这么做的,自然不会有太大的阻力。但在绝大多数工作环境中,真正这么做的还是凤毛麟角,那就要好好问问这个问题,为什么需要TDD。
在进行任何讨论前,都要从一个问句出发才能避免空对空的胡天海吹:要解决的是什么问题?
TDD,或者说软件匠艺要解决的是:如何才能让软件可以有长久的生命力,能够应对不断新增的需求,不拖业务的后腿,进而成为业务的推动力。
Agile、DevOps、软件匠艺其实都是为了解决这个问题。而TDD更多的是从技术角度来提供答案。
其中逻辑如此推演:
为什么软件在初期能够快速应对变化,但是少则一两年后就迅速疲于应对?因为随着临时方案的堆积(tech debt),代码很快会难以维护。
怎么解决?每次增加新功能时,都要审视现有代码,通过重构确保代码质量不下降。有句话:代码的结构需要能够支持新功能顺畅地滑进去(slide)。
为什么大多时候不敢重构&#x