用问题编号发表评论是一种好习惯吗?


18

我从jQuery代码注释中看到了许多发行编号。(实际上,jQuery代码中有69个发行编号。)我认为这是一个好习惯,但我从未见过任何指导原则。

如果这是一种好的做法,那么该做法的指导原则是什么?

Answers:


22

通常,我认为这不是好习惯。但是在特殊情况下,它可能非常有用,即当代码必须做一些不直观的操作来解决一个复杂的问题时,如果不做任何解释,就有可能有人要“修复”这个奇怪的代码,从而破坏它。 ,而在解释其原因时会产生巨大的评论,该评论会重复发布该问题中的信息。


+1 jQuery问题注释似乎是这种情况。–在这里没有评论会造成严重的混乱。
Konrad Rudolph

1
我个人仅在代码中涉及第三方代码中的问题的变通方法时才提到代码中的问题。对您自己的问题跟踪器的引用属于版本控制系统,而不是代码内部。对于较大的代码库,也可以将类似的引用用于内部变通办法。
Mikko Rantalainen'5

14

我认为在将相关修订提交到源代码管理系统时,只需将问题编号添加到提交消息中即可。

例如:

错误#203:数据库连接在30秒后不再超时。

我发现添加问题编号,开发人员名称或代码中已进行更改的日期只会污染代码库,实际上应该由源代码控制系统在外部进行管理。


我觉得你是对的。然后,为什么您认为jQuery提交者将问题编号放在注释上呢?也许这是流行代码的特殊情况?
Sanghyun Lee

6
我不同意。注释在那里解释了为什么代码本身就是这种方式,而对于代码本身而言却不是很明显。错误可以为代码“为什么”提供一个很好的上下文,因此指向错误的链接对于理解它会非常有帮助。话虽如此,我喜欢在源代码管理日志中链接到故障单,但是这样做的目的不同。
Jeroen

我认为您应该两者都做,但是我认为将这些注释添加到源代码控制中本身还不够。除非去寻找它们,否则您很少看到这些注释。使这些参考更加可见对于IMO很有用。
本杰明·伍顿

1
耶隆:我再次不同意你的看法。也就是说,如果该错误的修复是一个快速而丑陋的hack,那么您应该对此进行评论并引用该错误。如果此修复程序是正确的修复程序,则应实际说明其本身的原因。在理想情况下,应该没有理由发表任何评论,并且引用源代码管理中的错误就足够了。如果您的修复程序不言自明,则需要考虑对其进行重构。
martiert 2012年

如果它是实现而不是错误,那么您将不会看到注释。为什么?因为代码的演化是正常的,甚至是预期的,所以除非有特殊的情况,否则功能的实现将不引用其任务ID,这与错误修复相反,后者可用于快速查找与原始问题的显着差异以解决问题。否则,看代码的程序员可能会花一个小时的时间试图了解为什么对其余代码进行不同的处理(并且可能在最坏的情况下将其更改)。
2012年

7

我完全不同意这里的其他海报!

带有跟踪引用的代码注释可以为维护编程提供巨大帮助。

如果我正在跟踪错误并接近代码区域,看到它最近已被更改并链接到更改的上下文是天赐之物。

是的,我们有源代码控制,但是单独检查文件和模块可能会很慢。您希望这些事情对您有所帮助,以便进行最近的更改。

我可能会不赞成使用它们,因为我在代码库中看到的确实是很旧的,但是保留较新的东西几乎没有什么弊端,如果您聪明地使用它们,可能会节省很多开发人员的时间。

我实际上认为这些对您的错误跟踪系统的小引用比代码中的详细注释更可取。


2
如果您使用一些值得使用的源代码/版本代码系统,则您的版本控制系统可以用更改它的修订版本来注释代码的每一行。例如,git gui blame <filename>如果使用git ,默认值提供了非常快速的GUI来浏览代码历史记录。使用工具将代码注释与历史结合起来,可以提供比任何内联注释都更好的代码文档。也就是说,如果您不愿意去写好的提交消息(好的提交消息应该与解释为什么要应用此补丁程序的电子邮件大致相等)。
Mikko Rantalainen'5

如果您使用错误跟踪器从头开始一个项目,那么几乎所有代码行都来自用户故事或错误修复,那又如何呢?您是否评论所有内容?
加布里埃尔·奥四郎'18 -10-31

5

如果您订阅“清洁代码”的政策,那么您可能需要问自己是否添加注释完全是一种好习惯。如果只能用注释来澄清代码,那么可以肯定地添加一个,否则您应该能够简单地通过阅读代码来轻松理解代码的作用(假设您对变量,方法等使用了明智的名称)。

不管您对评论是否是一种好的做法都持个人看法,评论应包含对评论所引用的代码具有直接价值的信息。在这种情况下,问题是添加发行编号是否会增加代码的价值。我看到的添加问题编号的问题是,您可以对一段代码进行修改,以便满足多个问题;过一会儿,可能无法正确识别与特定问题相关的更改。例如,后续问题可能需要对与先前问题相关的代码进行大量重构。这也许是一个极端的例子,但是它确实显示了代码注释中的问题编号可能变得毫无用处。

如果您可以保证我刚才描述的情况永远不会发生,那么我仍然认为,问题编号本身在没有描述问题的实质的情况下仍然毫无用处,但是,所有这些信息确实属于您问题跟踪系统,应该进行重复。记录问题编号的更好位置是在版本控制系统中作为提交注释。优点是,您可以比较版本并查看与特定问题相关的代码更改,而如果您要查看代码更改的原因,则问题编号本身为您提供了所需的标识符。

考虑到所有这些,我建议这不是真正的好习惯,因为在代码中的注释中添加问题编号。


4

我认为这是一个很好的做法,请参考问题以进一步阅读,同时在注释本身中进行简短说明。

我通常只在该段代码中有些微妙或不直观的地方添加注释。由于一些细微的问题无法在几行中完全解释,并且我不想添加数十行评论,因此我会添加一条简短的评论,以描述这是要实现的目标,并参考该问题以获取更多信息。细节。

例如:

// Verify MAC before checking the padding, to avoid padding oracle attacks
// See issue 123 for details

问题123的内容描述了这种攻击的外观,以及为什么新代码不受攻击。

要么:

// Using foo's algorithm here, since it fits out usage pattern best
// Check issue 345 for a discussion of possible algorithms, and why foo was chosen.

将问题编号放入来源中的主要问题是您现在有一个外部参考。因此,您需要确保不会丢失该问题。


0

当您的源代码通过持续集成进行连接时,在提交消息中包含问题编号可能非常有用。诸如TeamCity之类的应用程序将提取该信息并提供更好的报告。

鉴于以上所述,我不是100%确信它来自代码注释。如果问题编号持续存在(例如,您不更改问题跟踪器)并且给定项目没有很多问题,则在代码中包含问题编号会很好。

如果您描述问题和解决方案,可能会更有帮助,因此下一位开发人员无需查找问题编号。编译器或压缩程序只会在代码发布到野外之前删除您的注释,因此不会影响最终结果。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.