什么使代码遗产?

时间:2009-01-26 12:15:29

标签: legacy

我听说很多开发人员将代码称为“遗留”。大多数情况下,代码是由不再在项目上工作的人编写的。什么是代码,遗留代码?

更新以回应: “从祖先或前任或过去流传下来的东西”http://www.thefreedictionary.com/legacy。显然你想知道其他的东西。你能澄清或扩展你的问题吗?美国洛特

我正在寻找遗留代码的症状,使其无法使用或使用噩梦。什么时候扔掉它更好?我认为应该更频繁地抛弃代码,重新发明轮子是开发的宝贵部分。不重新发明轮子的学术理想是一个很好的理想,但它不是很实用。

另一方面,显然遗留的代码值得保留。

21 个答案:

答案 0 :(得分:40)

通过使用不再支持或已被取代的硬件,软件,API,语言,技术或功能,通常几乎不可能替换该代码,而是使用它直到它或系统死亡。

答案 1 :(得分:25)

  

什么使代码,遗留代码?

与普通遗产一样,当作者死亡或失踪时,你作为继承人获得他的全部或部分代码。

你流下了眼泪,试图弄清楚如何处理这些垃圾。

答案 2 :(得分:21)

Michael Feathers在他的“有效使用遗产代码”一书中有一个有趣的定义。据他说,遗留代码是没有自动化测试的代码。

答案 3 :(得分:17)

这是一个非常普遍的(并且经常被滥用的术语)但是以下任何一种都是合法的理由来调用app遗产:

  1. 代码库基于一种语言/平台,完全不受原始产品制造商的支持(通常说制造商已经停业)。

  2. (真正的1a)构建它的代码库或平台是如此之久以至于为系统获得合格或经验丰富的开发人员既困难又昂贵。

  3. 该应用程序支持业务的某些方面,这些方面不再积极发展,并且对于哪些更改极为罕见,通常是为了修复它,如果一些完全意外的变化(规范的例子是Y2K问题)或者一些调节/外部压力迫使它。由于这两个原因都很紧迫并且通常是不可避免的,但是项目没有发生重大的发展,那些被指派处理这个问题的人很可能不熟悉这个系统(以及它累积的行为和复杂性)。在这些情况下,这通常是增加与项目相关的风险和计划风险的理由。

  4. 系统已经/或正在被另一个系统替换。因此,系统的使用可能比最初预期的要少得多,或者仅作为查看历史数据的手段。

答案 4 :(得分:12)

传统通常是指不再开发的代码 - 这意味着如果您使用它,则必须按照原始条款使用它 - 您不能只编辑它以支持当今世界的样子。例如,遗留代码必须在当前可能不存在的硬件上运行 - 或者不再受支持。

答案 5 :(得分:11)

根据杰出的Working Effectively with Legacy Code作者Michael Feathers的说法,遗留代码是一个没有测试的代码。当这段代码发生变化时,无法知道什么中断。

  

区别的主要因素   来自非遗留代码的遗留代码是   测试,或者说缺乏测试。我们   可以稍微了解一下   思想实验:它有多容易   如果它是修改你的代码库   如果它可以告诉你,可能会咬回去   当你犯了错误?这将是   很容易,不是吗?大部分的   害怕参与改变   大型代码库是害怕的   引入微妙的错误;害怕   无意中改变了一切。同   测试,你可以做得更好   逍遥法外。对我而言,差异是如此   关键,它压倒任何其他   区别。通过测试,您可以制作   事情更好。没有他们,你就是   不知道事情是否正在发生   好或坏。

答案 6 :(得分:8)

一位同事曾告诉我遗留代码是你自己没有写过的任何代码。

可以说,它只是代码的一个贬义词,我们不管出于什么原因都不再喜欢(通常因为它不酷或时髦但它有效)。

TDD旅可能会建议没有测试的任何代码都是遗留代码。

答案 7 :(得分:7)

Legacy code是与不再支持或制造的操作系统或其他计算机技术相关的源代码。

答案 8 :(得分:5)

http://en.wikipedia.org/wiki/Legacy_code

“旧版代码是与不再支持或制造的”

相关的源代码

答案 9 :(得分:5)

缺少支持(或文档)的任何代码。是的:

  • 内联评论
  • 技术文档
  • 口头文件(写作者)
  • 记录代码工作原理的单元测试

答案 10 :(得分:5)

对我而言,遗留代码是在某种范式转换之前编写的代码。 它可能仍在使用中,但它正在被重构以使其符合要求 例如在其他OO系统中闲置的旧程序代码。

答案 11 :(得分:4)

没有人会读到这个,但我觉得其他答案并没有让它完全正确:

  1. 它有价值,如果它没用,它很久以前就会被抛弃
  2. 很难理由,因为其中任何一个
    1. 缺乏文档,
    2. 无法找到或忘记原作者(是的,2个月后您的代码也可能是遗留代码!!),
    3. 缺乏测试或类型系统
    4. 不遵循现代惯例(即没有上下文可以坚持)
  3. 需要更改或扩展它。 如果没有要求更改它,则不是遗留代码 因为没有人关心它。它做了它的事,没有人 周围称之为遗留代码。

答案 12 :(得分:2)

代码(或其他任何东西,真的)在被更新/更好的东西取代后变成“遗产”,然而尽管如此,它仍然在“野外”使用并保持活着。

答案 13 :(得分:2)

您害怕重构代码的那一天就是代码成为传统代码的那一天。

答案 14 :(得分:2)

保留遗留代码并不是一个学术理想,因为它保持代码有效,无论多么糟糕。在许多保守的企业情况下,这被认为比丢弃它并从头开始重新开始更实用。更好的是你知道的魔鬼......

答案 15 :(得分:1)

如果满足以下任何或所有条件,我会将代码视为“遗留”:

  • 它是使用比现行标准落后一代的语言或方法编写的
  • 代码完全混乱,背后没有任何计划或设计
  • 它是用过时的语言和过时的,非面向对象的风格编写的
  • 很难找到知道该语言的开发人员,因为它已经很老了

与其他一些观点不同,我看到很多现代应用程序在没有单元测试的情况下运行良好。单元测试仍未与大家相提并论。也许十年之后,下一代程序员将会查看我们当前的应用程序并将其视为不包含单元测试的“遗留”,就像我认为非面向对象的应用程序是遗留的一样。

如果需要对遗留代码库进行少量更改,最好将其保持原样并随流程一起使用。如果应用程序需要大幅度的功能更改,GUI大修,和/或您找不到任何知道编程语言的人,那么就该扔掉并重新开始。然而,一句警告:从头开始重写可能非常耗时,而且很难知道你是否已经复制了所有功能。您可能希望为遗留应用程序和新应用程序编写测试用例和单元测试。

答案 16 :(得分:1)

传统代码是保持最新需求不断变化的代码。

有两种方法可以实现:

  1. 代码不适合更改
  2. 代码的语义已被换成硅
  3. 1)两个人更容易识别。软件具有基本限制,使其无法跟上周围的生态系统。例如,围绕O(n ^ 2)算法构建的系统不会超出某个点,并且如果需求在该方向上移动,则必须重新编写。另一个例子是使用最新操作系统版本不支持的库的代码。

    2)难以识别,但所有此类代码都具有人们害怕改变它的特征。这可能是因为它开始时写得很糟糕/有文档记录,因为它没有经过测试,或者因为它是非平凡的,并且了解它的原始作者离开了团队。

    构成生活代码的ASCII / Unicode字符具有语义含义,"为什么","什么""并且在某种程度上,"" s",在与之相关的人的心中。旧版代码要么是非拥有的,要么所有者没有与其大部分相关的含义。一旦发生这种情况(并且第二天可能会发生编写得很糟糕的代码),要更改此代码,必须有人学习并理解它。这个过程是首先编写它所花费的时间的一小部分。

答案 17 :(得分:0)

老实说遗留代码是任何代码,框架,api,其他软件构造不再是“酷”。例如,COBOL被一致视为遗留物,而APL则不是。现在,人们也可以认为COBOL被认为是传统和APL,而不是因为它的安装基数大约是APL的1倍。但是,如果你说你需要处理APL代码,答案就不会是“哦不,那遗留的东西”,而是“哦,我的上帝,你猜你不会在下个世纪做任何事情”看到差异?

答案 18 :(得分:0)

这是在软件生态系统中经常(且非常通用)使用的通用术语。

嗯,我想将旧代码视为继承代码。这只是过去编写的代码。在大多数情况下,旧代码不遵循新的/当前的做法,通常被认为是过时的。

答案 19 :(得分:-1)

传统代码是一个多月前写的: - )

答案 20 :(得分:-1)

通常任何代码都不是用时髦的脚本语言编写的,我只是半开玩笑。