代码之家  ›  专栏  ›  技术社区  ›  Mark

大型代码库上的代码标准重构

  •  3
  • Mark  · 技术社区  · 17 年前

    我的工作室有一个大型的代码库,已经开发了10多年。我们开始的编码标准是在家里开发的,而且在我们不得不担心C++相关的任何标准之前就已经开发出来了。

    最近,我们开始了一项小型研发活动;我们更新了我们的编码惯例,使之更适合我们的环境。R&D工作将被整合到现有的项目代码中。我们面临的一个主要问题是,我们现在对这两个工作领域有两个标准,现在代码库将相互交叉。我不想在工作室里有两个标准,事实上,我很乐意使用一个标准。(我们是如何陷入这种局面的并不重要,重要的是我们是这样的,我也曾希望我们不会这样。)

    问题在于重构现有代码。我不太喜欢有两个看起来不同的代码库(一个相对较小,一个非常大)。我感兴趣的是对现有的一个代码库进行重构,使其符合另一个标准。问题是,较小的代码库(IMO)是更可取的标准。

    我开始四处寻找一种可以为我进行大规模重构的工具。我对重新安排和收紧代码不感兴趣。我对改变一些事情很感兴趣,比如

    class my_class {}
    ....
    class my_class A;
    

    class MyClass {}
    ....
    class MyClass A;
    

    基本上进行函数/变量级别重命名。我不喜欢使用像视觉辅助这样的东西,因为这需要很长时间。我有超过10000个源/头文件,其中包含数十万行代码。一次使用一个类将是一个时间杀手,不值得付出努力。

    Vera 在另一个帖子里。这似乎可以胜任这项工作,并且做得很好。我想知道是否有人有在我所处的情况下使用Vera的具体经验,或者对可能完成工作的工具有任何其他建议。我认为这个工具真正理解代码结构是很重要的,这样我们就不会以搜索/替换的方式重命名变量,因为如果不小心的话,这会导致微妙的错误。

    编辑:虽然我的示例显示我正在从使用名称之间的uuo转换为camelcase类型表示法,但换一种方式可能更有益。我真的在寻找一个通用的解决方案,将有助于大规模重命名。

    谢谢

    6 回复  |  直到 17 年前
        1
  •  9
  •   Paul Nathan    17 年前

    我的过程是每次有人触摸给定模块时重命名。最终,所有模块都将被重构,但增量方法将减少代码破坏(假设您有一套完整的测试)

        2
  •  2
  •   ejgottl    17 年前

    我使用自定义脚本进行了类似的更改。如果可以,我使用sed。否则,我将使用对正则表达式有良好支持的脚本语言。这是一个粗糙的黑客,肯定会引入bug,但除非你找到更好的解决方案,否则这是一条前进的道路。

        3
  •  2
  •   sudarkoff    17 年前

    除非你有(1)一组相当完整的可靠和自动化的测试,(2)重构工具理解C++语义(我还没有听说过这样的工具),我建议不要自动重命名。无论我在哪里工作,实践总是只重构您目前正在处理的模块。这是一个漫长但相对无痛的过程。

        4
  •  0
  •   gbjbaanb    17 年前
        5
  •  0
  •   Nemanja Trifunovic    17 年前

    依我看,变量重命名根本不值得这么做。重要的是代码是健壮的、可读的和高性能的。不管你以前用过什么风格,把时间花在重要的事情上。

        6
  •  0
  •   none    17 年前

    你可能想考虑一下“ pork 由Mozilla FooS使用、创建和维护,主要实现自动化的C++源代码分析,包括源代码转换,如 refactorings

    既然 GCC plugins are on the way ,这类事情将来可能会变得更容易。