将错误编号放在源文件开头的注释中的好主意?[关闭]


40

将错误号放在文件本身的标题注释中是一种好习惯吗?

评论看起来像这样:

 MODIFIED    (MM/DD/YY)
 abc 01/21/14 - Bug 17452317 - npe in drill across in dashboard edit mode

 cde 01/17/14 - Bug 2314558  - some other error description

似乎有帮助,但是否认为这是不好的做法?


23
我要问的问题是“您如何处理您的错误数据库尚无法解决的嵌入式错误号?” 我想不出任何实际的用例。
M. Dudley 2014年


6
@JensG这就是为什么您将其放入落实消息中的原因,log文件上的a 会给您
几乎完全相同的

1
@JensG当您更正了特定文件的分数或成百上千个缺陷时?显而易见的答案是,您会定期清除过时的ID,但随后您又要重新
提取

3
这个问题是Ars Technica文章的主题。我们应该在源文件的标题中列出错误吗?(发布此问题15天后发布)。
彼得·莫滕森

Answers:


107

我以前见过这种情况,既可以由作者手动完成,也可以由与版本控制系统集成的脚本和触发器自动完成,以将作者,签到注释和日期信息添加到文件中。

我认为这两种方法都非常糟糕,主要有两个原因。首先,它给文件增加了混乱和噪音,尤其是当这些注释老化并且变得与文件的当前状态无关时。其次,它是来自版本控制系统中已经维护的内容的重复信息,如果您使用的是支持变更集的现代版本控制系统,那么实际上它会丢失有关变更的信息。

如果有的话,请考虑与缺陷跟踪系统集成。某些工具允许您将签入注释中的缺陷或任务ID号链接到跟踪工具中的项目。如果工具中包含所有缺陷,增强功能要求和工作任务,则可以这种方式提供链接。当然,这带来了对项目中那些工具的依赖的不利影响。


2
“并且,如果您使用的是支持变更集的现代版本控制系统,那么它实际上会丢失有关变更的信息。” -您能详细说明一下吗?
极客2014年

10
@Geek我不确定要解释什么。如果查看引用错误ID号的文件,则除非您搜索这些文件,否则您不会看到由于相同缺陷而导致其他文件发生更改。这就是变更集-一起签入的文件的集合。
汤玛斯·欧文斯

9
我还要补充一点,如果您使用新的错误跟踪系统,那么这些数字将立即变得一文不值。在我目前的工作中,我遇到了这个问题,其中一些评论中有来自错误跟踪软件的数字,这些数字已经十年没有使用了。

2
因此,在更改为新的错误跟踪系统后,它们变得像从未出现过的一样有用。但是,假设它们在某个时候提供了某种价值,而现在却没有提供负值,为什么不这样做呢?
Cruncher 2014年

@ 17of26 –我想您可以通过其他机制将旧错误/问题链接到新错误/问题,例如“旧问题跟踪器错误1234”这样的注释。
肯尼·埃维特

42

在一种情况下,我会执行此操作,即作为对未来程序员的警告的一部分:“请勿foo()在此处直接调用函数;这已导致错误#1234,即...”,然后对此进行了简短说明错误如下。

如果代码已更改为没有诱惑可以foo()直接调用的方式,请删除该注释。这只会激怒并炸毁代码。


19
也许我有点烦,但是如果foo()不应该直接调用它,则应该以不可能的方式构造代码。
MetaFight 2014年

20
哦,我尝试写一些例子,以使文本更具体-不要从字面上理解我。更好的情况是您使用了外部库,并且通常用于特定目的的函数存在错误。然后,发表评论“不要foo()在这里打电话”是合理的。
rem 2014年

16

这是完全可怕的做法。为了实现纯粹的复制效果,需要付出更多的努力。换句话说,仅使用提交日志添加的唯一内容就是可能产生不一致。您的源文件中杂乱无章,您永远都不会看。

我唯一可以看出的缺点是,您无需访问版本控制即可重构源历史记录,例如在研究打印输出时。但是很少有人能胜任复杂的软件开发工作,同时又无法理解版本控制。


您认为一个文件中到底有多少错误,以及是否可能有很多错误需要重写。
安迪

11

没有。

这就是人们在使用版本控制系统之前所做的事情(即,当源代码只是zip文件中的备份时)。


2
这是各种各样的版本控制系统(我早在2006年就已经在软件公司中使用了这种版本控制系统,毫无疑问,今天它正在某处使用)。
jwenting 2014年

1
@jwenting我已经在这个站点上看到一些不幸的人提出的问题,这些人目前无法在目前正在实践的商店中工作:-(
Carson63000 2014年

我们使用了强大的源代码管理系统。除了我,没有人在签入代码时添加注释。<shrug>我评论了某些内容(例如SCM并不总是跟踪的PLSQL)。我评论了我的代码以进行解释,但从未将其与特定的错误联系在一起,但我在签入时始终引用SCM提交注释中的错误。希望最终有人会喜欢它。
Pedantic 2014年

11

恕我直言,这是一个非常糟糕的主意。在版本号100之后,您将拥有90%的注释和10%的代码。我认为这不是干净易读的。

我看到的唯一一点是,当您必须在SCC之间交换代码,并且无论出于何种原因,都无法在两个系统之间传输历史记录时(但是即使以这种方式保存了历史记录注释,您也会失去diff历史记录同样,因此保存评论只会对您有所帮助。


8

我看到每个人都反对这个想法,并给出了人们为什么这样做的历史原因(源代码控制前的时代)。

但是,在我目前的公司中,数据库开发人员正在遵循这种做法,并且他们还在代码段周围标记了错误号。当您在代码中看到错误时,有时我会发现这很有用,您可以立即找出导致此问题的错误修复。如果我们的数据库包中没有这些信息,那么要找到实现该问题的根本原因肯定不容易。

是的,它使代码混乱,但有助于找到该段代码存在的原因。


3
绝对。有时,我有一种轻微的感觉,即程序员对冗余感到恐惧,因此他们避免通过不同的方式访问相同的信息。这非常有趣,因为程序员通常也会因性能不佳而感到恐惧,因此会在程序中使用缓存。但是,将错误编号缓存在最有用的位置旁边的代码中被认为是不好的吗?嗯
JensG 2014年

通常还有另一种获取信息的方法(在我正在研究的项目上,这将是right click > Team > Show Annotations导致当前文件的git怪),但不同之处在于,注释具有可发现性-他们可以跳出你来-加上注解,您必须有意识地决定去寻找它们。
戴维·康拉德

思考,决定,单击,单击,单击,滚动。这就是为什么我说“缓存代码”。如果在那里,我就看到它。
JensG 2014年

2
@JensG有趣的观点。高速缓存可以提高性能,但也有承载成本。如果必须通过多余的人工来填充,更新,无效,刷新等缓存,我会质疑成本效益比,尤其是考虑到人类如何使这种非规范化的结构保持同步是多么糟糕。
杰弗里·汉汀

7

乔尔测试的要点之一是

您有错误数据库吗?

如果您认为这些信息很重要,则可以将其保留在错误数据库中,但是它们只会在注释中产生干扰。


1
看到问题中的示例-注释将引用错误数据库...
Izkata 2014年

@Izkata但这就是重点。数据库本身可能具有带有注释的“注释”字段。问题不是关于是否有错误数据库,而是关于将其保存在源文件中是否是一个好主意。我认为,即使它们是注释,也应将其保留在数据库本身中,因为这就是它的用途。
皮埃尔·阿洛德

6

我认为您在这里有两个问题。首先,当大多数系统允许您输入修订注释时,为什么您应该纯粹依靠差异?就像好的代码注释一样,您会发现做出更改的原因,而不仅仅是更改本身。

其次,如果您具有此功能,请将其全部放在同一位置是一个好习惯。无需遍历文件即可找到不再需要的标出的代码行。工作代码中的注释可以告诉您为什么使用这种方式进行编码。

一旦将其付诸实践,所养成的习惯就使每个人都更容易使用代码库。

相关的错误和功能跟踪以及更改此文件的原因,可以使您了解需要深入了解历史记录并可能查看差异的深度。我要求“更改回原始公式”。我知道在修订历史记录中可以找到的位置,只检查了一个或两个差异。

就个人而言,标记出来的代码看起来像是正在通过反复试验解决的问题进行的工作。从生产代码中消除混乱。能够轻松滑入和滑出代码行只会使其更容易混淆。


2

如果您没有带有提交消息的VCS,也没有bug跟踪系统,但可以选择留下评论,则跟踪更改是一个选择,而不是最佳选择。
最好有一个包含该信息的电子表格,或者如果您所在的环境中没有此类“奢侈品”,则在您的源附近放置一个文本文件。
但我强烈建议您,如果您处于这种环境中,就开始着手投资VCS和错误跟踪系统:)


2

请记住这一点-代码通常比支持它的工具更长。换句话说,问题跟踪器,版本控制和所有其他脚本将在开发过程中发展。信息丢失。

尽管我确实同意,但文件混乱却很烦人,打开文件并了解其历史记录而无需使用工具,这一直非常有帮助-特别是在维护代码的情况下。

就我个人而言,我认为工具和代码内日志都有空间。


2

我知道的Git不这样做,简单的答案是“为什么地球上是去那里?”

通常,这是一种模块化程度较低的设计。在这种解决方案下,现在文件是内容和元数据之间的某种混合。Amazon S3是用于存储文件的服务的另一个示例,该服务不会在文件中添加YAML开头或类似内容。

文件的任何使用者都必须先通过版本控制系统对其进行处理。这是紧密的耦合,例如,如果您不喜欢的IDE不支持VCS,则会破坏它。


2

不,在代码中以注释的形式跟踪错误修复不是一个好习惯。这只会产生混乱。

对于您提到的版权信息,我也会说同样的话。如果公司外部没有人会看到此代码,则没有理由包括版权信息。

如果您使用的是版本跟踪软件(GitSVN等),则应在提交消息中包括这些注释。没有人想挖掘每个代码文件的头来生成发行说明或查看所做更改的概述。这些更改日志应全部存储在版本跟踪历史记录和/或缺陷跟踪器中,或同时存储在两者中。

如果您希望对此主题有个很好的阅读,我建议您使用Clean Code的第四章。


版权声明也在那里(略有多余)使员工注意到该文件属于雇主。也许劝阻非法共享(甚至员工),通过判断似乎有多少人认为版权仅当有应用通知。
2014年

1

我认为此讨论中的其他元素通常被遗忘,但有些情况下某些修订意见对团队来说是迅速的。

当在具有共享代码库的团队环境中工作并且几个团队成员可能在同一代码区域中工作时,在正确的范围(方法或类)中放置简短的修订注释以指示进行了更改,这对快速解决合并或签入冲突。

同样,在涉及多个(功能)分支的环境中工作时,第三方(构建主文件)可以更轻松地确定解决潜在冲突的方法。

每当您必须离开IDE并询问某人为何更改某些内容时,这都会破坏团队成员的工作效率。在正确的范围内快速注释可以帮助减轻或消除大部分此类干扰。


3
问题是关于源文件开头的注释,紧接在版权消息之后–这与范围较窄的注释无关
gnat 2014年

不过,这里所有的答案都在谈论这一点。如果我对整个类文件进行了重大更改(重组或格式修复),我是否不将类文件注释为作用域?
StingyJack 2014年

0

当整个更改的完整性被后续修复程序修改时,与代码段直接相关的任何错误信息都将变得无关紧要。

当我们不得不依靠外部工具(例如javadocs)从代码创建发行说明时,通常在功能摘要中添加信息。对于现代版本控制工具,它通常是无用的或多余的。

如果人们不得不诉诸于一些晦涩的或非恒星的代码,那么将来的开发人员可能会尝试更改它们,而不知道其背后的原因,就像在变通解决方案中那样,那么,仅作为一段非常模块化的代码中的注释才有意义。库错误/缺点。


0

我绝对不会将此类信息放在文件的开头-通常这类事情属于票务系统。

但是,在某些情况下,对票证系统和/或其他文档的引用是有意义的。例如,如果有冗长的设计说明或替代说明。或提供有关如何测试事物的信息,或提供解释说明为何如此进行的信息。如果很短,则它属于文件本身;如果它很长和/或大约是一个较大的图片,则可能需要将其放在其他位置并进行引用。


这似乎并没有为先前的答案中已发布的内容增加实质性的价值
gnat 2014年

0

我目前在工作中分配给的项目在每个文件的开头都有这种类型的错误编号列表。但是,没有任何开发人员仍在该项目上追加任何内容。他们中的大多数人认为这是对空间的无用浪费,因为它远不及使用我们的版本控制系统来跟踪对文件的错误提交。

在某些经过重大修复和增强的关键文件中,这些列表非常大,您必须滚动浏览它们才能获得代码。当使用这些列表时,可能会导致一些误报,因为每个列表都列出了简短的错误标题或简短说明。

简而言之,这些列表充其量是没有用的,更糟糕​​的是,它们会浪费大量的空间,这使代码更难于搜索和定位。

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.