debugging - 处理神物

标签 debugging language-agnostic god-object

我在一个中等规模的团队中工作,我经常遇到这些令人痛苦的大类文件。我的第一个倾向是用刀去砍他们,但这通常只会让事情变得更糟,让我的精神状态变得很糟糕。

例如,假设您刚刚获得了一个 Windows 服务来工作。现在此服务中存在一个错误,您需要先弄清楚该服务的作用,然后才能有希望修复它。您打开该服务,发现有人决定只使用一个文件来处理所有事情。开始方法、停止方法、定时器、所有处理和功能都在那里。我说的是数千行代码。一百行代码以下的方法很少见。

现在假设您无法重写整个类,并且这些上帝类会不断出现,那么处理它们的最佳方法是什么?你从哪里开始?你首先要尝试完成什么?你如何处理这种事情而不只是想被刺伤。

如果您有一些策略来控制自己的脾气,我们也欢迎。

到目前为止的提示:

  1. 建立测试覆盖率
  2. 代码折叠
  3. 重组现有方法
  4. 记录发现的行为
  5. 以渐进式改进为目标

编辑:

查尔斯·康威推荐了一个播客,结果非常有帮助。 link

Michael Feathers(播客中的人)以这样的前提开始:我们太害怕简单地将项目脱离源代码控制并直接使用它,然后丢弃更改。我可以说我对此感到内疚。

他实质上是说拿走你想了解更多的东西,然后开始把它拆开。发现它的依赖关系,然后打破它们。无论它走到哪里,都跟随它。

很棒的提示 获取在其他地方使用的大类并让它实现一个空接口(interface)。然后使用该类获取代码并让它实例化接口(interface)。这将为您提供代码中该大类的所有依赖项的完整列表。

最佳答案

哎呀!听起来像是我以前工作的地方。

看看Working effectivly with legacy code 。它有一些关于如何处理残暴代码的精华。

DotNetRocks 最近做了一个 show关于使用遗留代码。没有什么 Elixir 可以让它发挥作用。

我听到的最好的建议是开始在测试中逐步包装代码。

关于debugging - 处理神物,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/361873/

相关文章:

debugging - PyCharm 是否调用 AppCode 进行 C++ 调试?

node.js - 更改TypeScript OutDir断点后,再也不会命中

debugging - 为 clang 的优化过程启用调试输出

unit-testing - 可以在不更改任何代码的情况下对最初未设计的单元测试代码进行测试吗?

c++ - 神物替换

c++ - 二维游戏开发 "God class"

javascript - 刷新应用程序时,Node-Inspector 不会在断点处停止

language-agnostic - 难道仅仅是避免继承的一种方法吗?

language-agnostic - 引导解释器?