【问题标题】:Updating a codebase to meet standards更新代码库以符合标准
【发布时间】:2010-08-27 09:32:31
【问题描述】:

如果您的代码库在编码标准方面有点混乱 - 混合了来自不同人的不同约定 - 让一个人完成每个文件并提出来满足要求的任务是否合理标准?

除了非常乏味之外,您还将在 SVN(或其他)中获得大量更改,这会使比较版本变得更加困难。在整个代码库中设置某人是否明智,或者仅触摸文件以使其符合标准是否被认为是愚蠢的?是否应该保留文件,直到需要进行一些“真正的”更改,然后再进行更新?


标记为 C++,因为我认为不同的语言有不同的自动化工具。

【问题讨论】:

  • 如果一个人这样做,上帝很快就会亲自见到他!
  • 我在想这是一个任务,你可以交给有工作经验的孩子,或者放到 RentaCoder 上......

标签: c++ refactoring coding-style


【解决方案1】:

在需要进行一些“真正的”更改之前,是否应该保留文件,然后再进行更新?

这就是我会做的。

即使主要是文本布局更改,通过大规模手动过程进行更改也可能会破坏正在运行的代码。

将其视为重构,并在由于某些其他原因必须触及代码时在本地执行。如果缺少测试,请添加测试,以提高您不破坏代码的机会。

如果你的代码已经被测试很好地覆盖了,你可能会得到一些全局性的东西,但我仍然不提倡它。

我也认为这与语言无关。

【讨论】:

    【解决方案2】:

    这还取决于您计划进行哪些更改以使其符合您的编码标准。每个人对编码标准的定义都不一样。

    更具体地说:

    • 能否对项目进行提议的更改,并 100% 保证整个项目的工作方式与以前相同?例如,只影响 cmets、换行符和空格的更改应该没问题。
    • 如果您没有 100% 的保证,则存在不应该承担的风险,除非它可以与收益相平衡。例如,是否需要更深入地了解当前代码库才能继续开发或修复其错误?混乱的编码约定是否阻碍了这些举措?如果是,请评估成本和收益,并决定改造是否合理。
    • 如果您需要了解当前的代码库,这里有一个技巧:跟踪。
      • 复制代码库。请注意,跟踪涉及添加代码,因此不应在生产副本上执行。
      • 在新副本中,将许多fprintf (trace) 语句插入到任何被视为关键的函数中。可能会自动执行此操作。
      • 使用各种输入运行项目并收集这些跟踪结果。这将有助于大家了解当前项目的设计。
    • 了解当前代码库的另一种技术是记录项目中的依赖关系。
      • 一些依赖(接口依赖、C++ 包含依赖、C++ typedef/标识符依赖)可以通过自动化工具提取。
      • 只能通过跟踪或分析工具提取运行时依赖项。

    【讨论】:

      【解决方案3】:

      我在想这是一个任务,你可以给有工作经验的孩子或者放到 RentaCoder 上

      这主要取决于代码库的大小。

      我见过三名学员接受任务检查 2MLoC 代码库(数千个源文件),以便在所有源文件的顶部在标准免责声明中插入一个新行 (行的内容取决于文件的名称和路径)。他们花了几天时间。这三个人中的一个大部分时间都在编写一个脚本来完成它,后来只修复了脚本未能正确插入行的文件,另外两个只是浏览文件。 (写剧本的人后来在那家公司找到了工作。)

      手动调整该代码库中的所有这些文件以适应某些编码标准的工作可能必须以人年为单位来衡量。
      OTOH,如果只是几十个文件,那当然是可行的。

      您的代码库很可能介于两者之间,因此您最好设置一个“有工作经验的孩子”,看看是否有工具可以做到这一点,让您满意,如果有,就让它发挥作用。

      在需要进行一些“真正的”更改之前,是否应该保留文件,然后再进行更新?

      我强烈建议不要这样做。如果你这样做,你将有“真正的”变化与任何重新格式化发生的混合,使得几乎不可能看到“真正的”变化。差异。

      【讨论】:

      • 对于(我对学员的保留意见是,有时他们没有 100% 的理解:例如,将每个 char 替换为 wchar_t 或将每个 int 替换为 unsigned,会产生异想天开的结果。)我>
      【解决方案4】:

      您可以相当轻松地解决编码风格的格式问题。有许多 tools 可以自动格式化您的代码。我建议将其中之一与您的版本控制工具的“签入”功能挂钩。这样,人们可以在编辑代码时使用他们想要的任何格式,但是当它被签入时,它会重新格式化为官方样式。

      总的来说,我认为最好能一次性完成所有重大更改。过去,我们做了以下事情: 1. 在大多数人不工作时(例如在晚上或周末),有时间专门用于重新格式化 2. 让一个人在当时尽可能多地签出文件,重新格式化,然后再次签入

      使用仅重新格式化的修订版,除了格式之外,您不必弄清楚发生了什么变化。

      【讨论】:

      • 这些可能是哪些工具?尽管我知道 Java 有它们,但我不知道 C++ 有什么。
      • 我编辑了我的帖子以添加工具链接。对于其中一些,例如Emacs,您可能需要在 Emacs 批处理模式下运行脚本。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多