【发布时间】:2010-11-23 14:11:06
【问题描述】:
我们的团队正计划在遗留代码库中重构一些模块。它是一个用 java 编写的 Web 应用程序。它根本没有单元测试。
我要求开发人员在重构之前为现有功能编写一个junit,但我相信这不会很广泛。
我可以采取哪些其他措施(黑盒/白盒/进程)来确保重构不会干扰任何现有功能。
目前的系统相当稳定,已经运行了8年多。
谢谢 灰色
【问题讨论】:
标签: refactoring qa
我们的团队正计划在遗留代码库中重构一些模块。它是一个用 java 编写的 Web 应用程序。它根本没有单元测试。
我要求开发人员在重构之前为现有功能编写一个junit,但我相信这不会很广泛。
我可以采取哪些其他措施(黑盒/白盒/进程)来确保重构不会干扰任何现有功能。
目前的系统相当稳定,已经运行了8年多。
谢谢 灰色
【问题讨论】:
标签: refactoring qa
在开始之前阅读 Michael Feathers 的 Working Effectively with Legacy Code。
当前状态下的代码很可能无法进行有效的单元测试(因为它可能不在单元中)。我所看到的运行良好的是集成级测试,它只需使用一些合理的输入运行并记录输出; Web 应用程序使这一点特别合适。编写这些,然后产生一些小方法和类——对所有新事物进行单元测试——同时保持这些高级测试正常工作。这比从一开始就正确执行 TDD 需要更多的工作,但它绝对是可行的。
【讨论】:
您可能会面临 2 个问题:代码在现代意义上不可单元测试,并且代码中存在尚未发现的错误。面对这种情况,我强烈建议您尽可能多地使用黑白盒测试。我理解,这是一个痛苦的过程,但有办法缓解它。
您的工程师能否分解出一些接口,以便您可以创建一些集成测试。也就是说,如果他们进行重构,他们能否围绕一些共同领域巩固并将应用程序划分为更小的块,这些块在可预见的未来将在开发周期中基本保持不变?这将允许您至少有一些更大的方法来执行更多测试。它还允许您,质量检查人员,询问现有代码的预期结果。
【讨论】:
除了写更多的junit,你总是可以record test scripts with JMeter. 包含断言以确保您获得预期的结果。
【讨论】: