Refactor - UnitTest - 遗留代码中的设计三难

时间:2011-11-27 15:59:50

标签: unit-testing refactoring legacy

在处理遗留代码时如何解决此问题

  • 您处理的课程设计不合理,需要进行一些严格的设计更改
  • 您处理的课程大多紧密耦合
  • 您没有足够的单元测试来进行多次重构
  • 您不添加新的单元测试,因为设计很糟糕,无论如何您都要更改
  • 您无法轻易更改设计,因为
    • 紧密耦合,没有足够的单元测试 - 东西可能真的错了,因为它需要同时为多个类设计新设计而没有任何安全网。

你从哪里开始?你如何解决这个问题?

2 个答案:

答案 0 :(得分:3)

鸡和蛋的问题。

如果由于耦合很少而无法编写一些不错的单元测试,那么更好的方法可能是从上到下工作

如果您还没有进行集成,系统和/或GUI测试,那么在开始创建单元测试之前创建它们是一个很好的理由。一旦你有了它们,你就可以开始重构代码来创建合适的单元测试,并且仍然相当确信你的所有罗盘测试都能捕捉到你最明显的错误。

请注意,在我个人看来,这些测试用例应该被创建为一旦您准备开始创建单元测试并重构代码就不必更改它们。

Michael Feathers必须阅读Working Effectively with Legacy Code这个主题。

  

<强>结论

     

我概述的策略适用于各种各样的变化,   但是有一些警告。有时唯一体面的变化   您可以找到一组类的点是系统边界。   在某些应用程序中,系统边界可能非常广泛:它   包含GUI,调用其他外部库,数据库,   在这些情况下,获得不变量的最佳方法是开始   写下史蒂夫麦康奈尔所谓的“烟雾测试”对抗其他人   系统

答案 1 :(得分:0)

首先要确保不要更改代码的行为。 如果编写断言代码当前行为方式的单元测试,那么您可以对代码进行更改并检查测试是否仍然通过,如果这样做,则代码行为没有改变。 然后,您可以根据需要重构代码。当您重构设计时,您也会重构测试,但不要更改它们所做的断言。