在重构项目以提高可维护性时,目标是什么?

时间:2009-11-05 18:37:56

标签: refactoring maintainability

我有一个项目(大约80K LOC)正在进行中,我已经有近整整一个月的奢侈品重构,并且在发布之前增加时间,只要我小心不要打破任何东西。话虽如此,我该怎么做才能提高可维护性。请注意,这个项目没有进行单元测试,我并没有真正计划为此添加单元测试,但是如果这是我将考虑的共同共识。

我应该寻找哪些关键内容,并考虑修改或重构以提高软件的可维护性和质量?

编辑:我已经明白了我需要进行单元测试。这不是我真正做过的事情,对于新的单元测试开发人员来说有什么好的资源(最好是通过VS2008的单元测试框架)?

6 个答案:

答案 0 :(得分:6)

  

请注意,这个项目没有进行单元测试,我并没有真正计划为此添加单元测试,但是如果这是我将考虑的共同共识。

坦率地说,如果您的目标是提高可维护性,则无法替代单元测试。

这将是第一步。问题是,如果没有单元测试,就无法知道在重构过程中是否“破坏”了某些东西。

单元测试为您的重构提供了一层安全性。如果您无法验证您的重构是否会改变行为,那么很难让您感觉很舒服,尤其是进行大规模重构。

你可以做一些小的重构 - 小的重命名以提高理解力等,但任何大规模的重构,或任何设计风格的重构,以提高长期可维护性应该在设计和编写有助于保护自己的测试之后。< / p>

答案 1 :(得分:5)

要考虑的关键是为什么要重构代码。回答这个问题,你已经有了一半的答案。

您提到希望提高可维护性,这是重构的一个非常常见的原因。鉴于这是一个目标,我将专门针对这些目标:

1)删除重复的代码。大多数程序员都试图避免这种情况,但是大型项目(尤其是拥有大型团队的项目)无论如何都倾向于积累它。这是重构的一个简单目标。

2)简化你的目标。是否清楚地定义了每个函数/方法/类?你能看一下它并且非常清楚它正在做什么吗?如果没有,它是重构的一个很好的目标。很好的例子是做很多事情(或有很多副作用)的模块。考虑将它们分成逻辑分组功能的较小模块。

3)变量/类/函数名称。他们清楚了吗?它们不一定需要很长,但它们应该使(或任何维护代码的人)非常清楚变量的用途或功能的作用。如果有一些不清楚,请考虑重命名。

4)你有没有被调用的代码吗?如果您认为以后会使用它,那么值得离开。否则,对于任何维护者来说,它只是一个红色的鲱鱼。值得考虑摆脱它。

5)性能增强。您可能有也可能没有时间进行完整的算法重写(最佳性能增强)。但是,现在是检查简单事物的好时机。作为C ++示例,您是将类作为const引用还是按值传递?当你可以逃脱它时(前者有95%的时间),前者效率更高。

祝你的重构好运!

[编辑]另外,我建议您在重构之前编写单元测试,以确保您的代码保持正确。

答案 2 :(得分:2)

  • 即使你说没有单元测试,我也会插上它们。在重构之前,在测试中包含复杂的逻辑。
  • Jrud对代码味道的回答很好。
  • 另外,请研究the S.O.L.I.D. principals

答案 3 :(得分:1)

我会在这个网站上查看Code Smells上的wiki文章,这是一个很好的起点!

答案 4 :(得分:1)

项目完全覆盖了可靠的测试(单元测试,使用模拟和运行速度非常快,因此您可以一直运行它们,并且集成测试更少运行,实际上与真实数据库交互等等,是 可维护性的关键:您可以做的最重要的事情是使项目易于维护 目的(功能,删除bug,性能,移植等等)。强大的测试套件让您对可能需要尝试的任何进一步特定更改的正确性充满信心, plus ,重构的代码可以很好地测试(高度模块化,依赖注入等等) )本质上也变得更加灵活和可维护。

我强烈推荐Feathers'Working Effectively With Legacy Code(我指的是PDF,以及相同标题和作者的书),以获得有关如何在这种情况下最佳处理的全面而实用的指南。< / p>

答案 5 :(得分:0)

查找将来可能会发生变化的地方,并使其更加灵活。