首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何重构?

如何重构?
EN

Stack Overflow用户
提问于 2008-10-15 16:31:17
回答 13查看 1.7K关注 0票数 19

我想知道其他开发人员是如何开始重构的。你的第一步是什么?如果你重构不属于你的代码,这个过程(重构)会有什么不同?你会在重构的同时编写测试吗?

EN

回答 13

Stack Overflow用户

发布于 2008-10-17 11:48:08

你的第一步是什么?

第一步是运行单元测试以确保它们都通过。实际上,如果在修改代码之前就已经破坏了测试,那么您可能会浪费大量的时间来寻找哪些更改破坏了测试。

如果你重构了不属于你的代码,这个过程会有什么不同?

当重构不是我写的代码(或者我很久以前写的代码)时,我当然是在做较小的步骤。我还可以在继续之前验证测试覆盖率,以避免依赖于总是通过的单元测试……但这并不能测试我正在研究的领域。

你在重构的同时写测试吗?

我通常不会,但我可能会在以下情况下添加新的测试(列表不是详尽的):

新测试的想法在我的脑海中闪闪发光(“如果……会发生什么?”- write a test to know)

  • 发现测试覆盖范围中的漏洞

它还取决于正在执行的重构。当提取一个函数时,如果可以像以前一样以不同的方式调用它,我可能会创建一个新的测试。

以下是一些一般性的建议:

第一件事是维护在处理代码时注意到的code smells的列表。这可以让人从记住代码中看到的东西的负担中解脱出来。另外,

当单元测试没有完全通过时,金科玉律永远不会重构。

在代码稳定的时候重构,在添加一些你知道会受到未来重构影响的东西之前,在集成之前,最重要的是在说你的已经完成之前。

在没有单元测试的情况下,您必须对您想要重构的代码部分进行测试。如果单元测试很难改进,就像通常的情况一样,那么您可以按照每个Michael Feathers in 的建议创建characterization tests。简而言之,它们是端到端的测试,允许您确定代码的当前行为(并不是一直都能完美地工作)。

不要害怕一小步一步来。不要同时做两件事。如果你评论了一些需要重构的东西,把它记下来,不要马上修复它,即使它看起来很容易。

当测试通过时,经常检查。这样你就可以恢复一个糟糕的重构,而不会丢失之前做过的事情。

请记住,重构不会为您的客户增加价值(这一点可以讨论),但客户不会付钱让您重构。一条经验法则是在对代码进行更改或添加新功能之前进行重构。

票数 8
EN

Stack Overflow用户

发布于 2008-10-15 16:39:08

我接受垃圾,让它不那么垃圾。:-)

我是认真的。我不会重构来创建新的功能。重构发生在新事物之前。如果没有测试,我会编写测试以确保重构不会破坏任何东西。如果有测试,我会使用那些测试。如果测试不充分,我可能会编写更多的测试,但我会考虑将其与重构分开,并首先进行。

对我来说,第一步是注意到我可以抽象一些东西,使它更通用(在其他现在需要功能的地方也很有用),或者我注意到一些东西是不好的,可以更好(主观)。我不会无缘无故地重构为泛型。YAGNI principle适用。

我们有共享所有权的概念,所以代码始终是我的--我可能没有写过它,但在重构时我不会考虑这一点。如果目的不明确,在决定需要重构之前,我可能会尝试理解一些东西--尽管这几乎总是重构本身的理由。

票数 4
EN

Stack Overflow用户

发布于 2008-10-15 16:42:29

阅读Martin Fowler的书"Refactoring

顺便说一句,这是Martin Fowler自己的Amazon exec链接,如果你想知道:)

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/205426

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档