你会先重构你的 SQL 吗?你的架构?还是你的代码库?你改变语言吗?您是否将所有东西都扔掉并从头开始?[不重构]
2 回答
我正在向大型遗留意大利面条代码库添加单元测试。
我的方法是,当被要求解决问题时,我尝试围绕与我当前任务相关的代码库部分创建一个新的包装器。这个新的包装器是使用 TTD 开发的(首先编写测试)。有时会调用未经单元测试的遗留代码。在其他时候,我制作一个现有模块的新副本并开始对其进行严重的暴力。有时我会从头开始重写功能。
但是由于我对其进行了很好的测试,因此我感觉很好。
我发现这个代码库是用太多的复制和粘贴来开发的,一旦我理解了一个特定的部分,并从中提取一些函数(这些函数是先测试完成的)......这些函数通常可以在许多其他地方使用,因此用我自己的、单元测试的库替换遗留代码的速度增加了。
我没有(也无权)尝试重写或添加测试到我当前问题未触及的部分代码(通常是我正在尝试修复的错误),但我确实有一个相当积极主动的立场在任何被触及的和可能相关的东西上。
更新:Penguinix 问道:“你用什么语言工作?你推荐一个特定的测试工具吗?”
现在我在……呃……腮腺炎!但同样的原则在任何地方都适用。
MinUnit 改变了我对 UT 的理解:http: //www.jera.com/techinfo/jtns/jtn002.html
当我看到 MinUnit 时,那对我来说是一种“禅”的启蒙时刻。它消除了我对单元测试是需要复杂的 OO 框架等复杂的东西的误解。我明白 UT 只是要编写一堆测试。您可以在大约 3 分钟内用您喜欢的任何语言编写自己的“线束”。继续做吧。
这真的取决于代码库的状态......是否有大量的类?一类有超级方法?这些类是紧密耦合的吗?配置是负担吗?
考虑到这一点,我建议阅读有效地使用遗留代码,找出你的问题,并应用这些建议。