2010-08-27 103 views
2

如果你有一个代码库,其针对的是一个有点乱编码标准 - 从不同的人有不同约定的混合 - 它是合理的给予一人通过的每一个文件去任务并使其达到标准?更新代码库,以满足标准

除了作为极其沉闷,你会得到变化的质量在SVN(或其他),它可以使比较版本更难。它是明智的设置有人对整个代码库,或者是它认为愚蠢的触摸文件,使其达到标准?文件应该放在一边,直到需要一些“真正的”更改,然后更新?


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

+0

如果一个人做到了,神会很快与他见面! – DumbCoder 2010-08-27 09:40:27

+0

我在想这是一个任务,你可能会给一个工作经验的孩子或推出RentaCoder ... – 2010-08-27 10:07:02

回答

0

我想这是你可能会给工作经验的孩子或送出到RentaCoder

这主要取决于代码库的规模的任务。

我见过三名受训给经过2MLoC代码库(几千个源文件),以在所有源文件的顶部插入一个新行到标准免责声明(与行的任务内容取决于文件的名称和路径)。这花了他们几天。其中大部分时间用来编写一个脚本来完成它,后来只修复了脚本未能正确插入行的文件,另外两个脚本通过这些文件。 (谁写的脚本中的一个后来得到了那家公司工作。)

的手动调整在代码库中的某些编码标准所有这些文件可能会在人一年要测量的工作。
OTOH,如果只有几十个文件,那肯定是可行的。

您的代码库很可能介于两者之间,所以您最好的办法可能是设置一个“工作体验小孩”来查明是否有工具可以满足您的需求,如果可以,请使其工作。

文件应该放在一边,直到需要一些“真正的”更改,然后更新?

我强烈建议不要这样做。如果你这样做,你将不得不与任何格式化发生,使得它几乎不可能看到在差异中的“真实”的变化混杂“实”的转变。

+0

对于<100kLoC项目,最好做一个“快速代码审查”,无需更改代码,在项目上一个团队成员(为了正确应用编码标准,他必须有至少一年的C++)。在审查过程中,对所需更改进行汇总,并估算编辑量,然后决定是否继续。 *(我对学员的保留意见是有时他们没有100%的理解:例如,用'wchar_t'或每个'int'用'unsigned'替换每个'char',并且有异想天开的结果。)* – rwong 2010-08-27 11:22:29

0

这也取决于你打算做什么样的改变,以使其达到你的编码标准。每个人的定义编码标准是不同的。

更具体地说:

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

如果文件被单独留在家中,直到需要一些“真实”的变化,然后更新?

这就是我会做的。

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

将其视为重构,无论代码何时因其他原因而被触及,都要在本地执行。添加测试,如果他们失踪,以提高你不打破代码的机会。

如果你的代码已经被测试覆盖了,你可能会抛弃一些全局的东西,但我仍然不会主张它。

我也认为这几乎是语言不可知的。

0

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

总的来说,我认为最好的做法是一次完成大变更。在过去,我们已经完成了以下工作: 1.在大多数人不工作的时候有专门的时间来重新格式化(例如在晚上或周末) 2.让一个人在尽可能多的文件中检出尽可能多的文件然后重新格式化它们并再次检查它们

使用仅格式更改的版本,除了格式化之外,您不必指出已更改的内容。

+0

哪些工具这些可能是?我没有意识到任何C++,但我知道Java有它们。 – 2010-08-29 09:16:52

+0

我编辑了我的帖子以添加工具链接。对于其中的一些,例如Emacs,您可能需要运行Emacs以批处理模式运行的脚本。 – kc2001 2010-08-29 19:23:24

相关问题