【发布时间】:2009-06-20 21:06:49
【问题描述】:
您应该在代码库中将旧代码注释掉多久?承包商通过将旧代码转换为 cmets 继续将旧代码保留在代码库中。这真的很令人沮丧,我希望他们只删除旧代码而不是将其注释掉。
是否有正当理由将代码库中的旧代码保留为 cmets?我正在使用 Visual Sourcesafe 的版本控制
【问题讨论】:
标签: version-control comments maintenance
您应该在代码库中将旧代码注释掉多久?承包商通过将旧代码转换为 cmets 继续将旧代码保留在代码库中。这真的很令人沮丧,我希望他们只删除旧代码而不是将其注释掉。
是否有正当理由将代码库中的旧代码保留为 cmets?我正在使用 Visual Sourcesafe 的版本控制
【问题讨论】:
标签: version-control comments maintenance
如果您使用 SVN 或 CVS 之类的东西,则不会。我会在视线范围内抹去它们。它们降低了代码的可读性。
注释应该可以帮助正在阅读代码、解释内容等的程序员。
【讨论】:
我能想到的一个正当理由是这个(虚构的)例子:
# removed the following test because this should work now that bug #12345 is fixed.
#assert a != 0
b = number / a
基本上是为了防止其他开发人员重新插入因某种原因而被删除的代码。
【讨论】:
告诉承包商停止这样做。这是一种糟糕的做法。
实际上没有任何理由将旧代码保留在代码库中;它只是碍事。您的版本控制系统将向您显示每个文件的历史记录。
保留旧代码的唯一可能好的理由可能是作为历史参考(也许如果旧代码做了一些特别奇怪的事情,可能与当前情况有关)。
有时我会只注释掉代码,因为我知道我正在进行临时更改(临时我的意思是少于几天)并且肯定打算回到它。
编辑:另一种相关做法是将更改的名称和日期放在文件中:
// 06/20/2009 - joe changed this #1245
也不要这样做。看看是谁做出了改变,这在当时似乎很有价值,但随着时间的推移,它确实没有任何价值,而且还会使代码变得混乱。
【讨论】:
如果您正在使用您应该使用的源代码控制,那么请删除旧代码,因为副本将在源代码控制中准备就绪,并在您需要重新添加它时等待您。将旧代码放在那里会降低阅读上述代码的能力并引入混乱。此外,如果您使用承包商编写代码,请告诉他们如何在您支付工资时编写代码。为它们定义编码标准并让它们按意图进行编码,这应该改进方法、属性等的名称,并一起减少对 cmets 的需求。
【讨论】:
你问“多久?”如果这些地方是人们仍在工作的热点,那么我不会因为一两个地方有旧代码而感到生气。
也许他们对新代码还没有信心。新代码“完成”了吗?是按应该写的吗?它通过测试吗?是否根据规范进行了评论和记录?表现在它应该在的地方吗? (我能想到的同时拥有旧代码和新代码的最佳原因是当我在计时或分析一组特定案例时。)
旧代码有什么比新代码更可取的地方吗?
承包商是否感到匆忙?还是只是版本控制前的旧习惯?
【讨论】:
当您提醒承包商时,他们不必注释掉代码,因为 Sourcesafe 会保留历史记录,询问他们为什么这样做。
他们可能出于某种原因不信任它。如果你能从他们那里得到这个原因,他们可能会注意。我知道当我们多年前从 VSS 迁移时,是因为他们可能也遇到了可靠性和可扩展性问题。如果您可以解决他们的顾虑,或者通过证明 VSS 足以满足您的需求,或者说您将调查其他源代码控制解决方案(当然,如果您有预算),那么您应该赢得他们的支持。
说服胜于强迫。
【讨论】:
是的,一见钟情。除了表明评论它的开发人员不确定是否要删除它之外,它没有任何价值。或者他们不知道如何使用您的源代码控制软件。
【讨论】:
基本上,您只有 2 个选项。
否则,上述是您仅有的 2 个选择。您的来电!!
【讨论】:
保留旧代码只会使阅读整个代码变得更加困难。只要项目有某种形式的版本控制,注释掉的代码就应该被删除。如果您没有修订控制并且无法进行任何设置,则建议将旧代码放在不属于代码库一部分的文件中。
【讨论】:
我假设您指的是似乎具有一定价值的重要代码块,或者本身就是好的算法,而不仅仅是这里或那里的奇数行。
在这些情况下,如果您进行了较大的更改,保留旧代码,因为 cmets 充当代码审查的一种形式,那么自然就会倾向于保留代码。任何获得最新版本的人都将能够立即看到所做的重大更改,如果出现问题,更容易看到以前的内容。如果问题出在新代码上,那么有一种非常简单的方法可以立即检查它。
因此,鉴于此,我倾向于注释掉第一次修订的旧代码,然后仅在随后再次更改代码时将其删除,此时更改将被“嵌入”并且不太可能错误的原因。
这些 cmets 是一种文档形式,对于任何纯粹的“干净”编码理想,无需删除它们。不再需要时将其移除,并在它们可能有价值时保留它们。
【讨论】:
首先,我说摆脱它。
但我知道一个不这样做的原因:虽然它仍然存在于您的版本控制中,但这并不意味着任何人都可以看到它。如果您可能需要再次看到它,您首先必须知道它曾经存在过。有时你做了一个修改,未来的开发者需要同时看到旧的和新的方式,如果你删除了旧的方式,开发者怎么知道它曾经存在?对于此类问题,大多数人没有足够好地记录版本控制中的更改。
【讨论】:
将旧代码留在那里的原因有很多。基本上 - 一旦它被删除,它实际上就消失了 - 除非有人真的记得它在那里。
作为一个邪恶的承包商,我不会删除代码,除非我对程序进行大量重写——废弃它并替换它而不是“修复”它。
【讨论】:
我目前正在介绍的项目使用另一种方法 - 某种妥协...当您决定不再使用某些代码时,您只需将其注释掉,写下日期注释掉,并且(如果可能的话——例如在 Netbeans 或 VisualStudio 中)将旧代码插入#region OLD_IMPL。影响? - 为了以防万一,您仍然有旧代码 - 未使用的代码块只占用 1 行 (#region OLD_IMPL) - 如果您看到,该代码一年没有使用(您有注释掉它的日期),您可以简单地删除它。
如果遇到任何危急情况,您总是使用 SVN ;)
【讨论】:
那些因为版本控制工具可以解决您可能遇到的任何问题而说摆脱注释代码的人是白痴。
一旦你确定它真的真的过时了,你就需要摆脱过时的代码。
是否曾经因为“它并不完全糟糕,但可惜它也不完全好”而不得不修改修改?如果您仍然可以取出生产源并且知道之前版本的代码仍然在其中,以某种文本形式,它将为您节省大量时间,因为您无需求助于复杂、难以- 控制,因此使用您的版本控制工具可能为您提供的任何“部分源合并”和“部分源合并”的过程非常容易出错。
不喜欢这种现实的人肯定在他们的整个职业生涯中都只编写了从未“不完全坏,但也不是完全好”的代码,或者换句话说,只产生了要么完全坏要么完全不好的代码否则完全完美。而且我们都知道实现后者的概率有多大。
【讨论】: