如何确保重构后代码仍然有效(即变量名称更改后)?
在静态语言中,如果一个类被重命名但其他引用类不是,那么我将得到一个编译错误.
但是在动态语言中没有这样的安全网,如果你不够小心,你的代码可能会在重构期间中断.您可以使用单元测试,但是当您使用模拟时,很难知道名称的变化,因此,它可能没有帮助.
如何解决这个问题呢?
在开始重构之前,你应该创建能够测试你将要改变什么的测试 - 如果你说单元测试不会被采用,或者它们很难创建,那么通过一切手段创建更高级别的测试甚至可能超越您的整个产品.
如果您的语言具有代码覆盖率工具,则使用它们来衡量您创建的测试的质量 - 在达到相当高的值后,如果测试保持最新并且扩展,您将能够做任何事情使用您的代码非常有效,并确保事情不会走错方向.
我一直在教授关于单元测试,重构等的课程,这可能是大多数人都错了.重构的不只是改变了代码.它正在改变代码而不改变外部功能行为.这是非常重要的一点.
换句话说,您需要有一些方法来验证重构后外部功能行为是否完整.由于缺乏神圣的洞察力,我发现单元测试非常有用.在他关于重构的书中,Martin Fowler强调使用自动化测试进行验证.
如果您的代码是使用TDD开发的,那么您将拥有必要的测试套件,因为它是在代码本身的开发过程中开发的.如果您需要重构没有可用测试的代码,最好的方法是在对代码进行任何更改之前设置自动化测试.我意识到为现有代码设置测试可能很困难,但是在这样做时你会学到很多关于代码的知识.
您可能还想查看Bruce Eckel关于强类型与强测试的文章,因为它讨论了您从编译器获得的反馈与您从测试套件获得的反馈.