我听说很多开发人员将代码称为"遗留".大多数情况下,代码是由不再在项目上工作的人编写的.是什么让代码,遗留代码?
更新回应:"从祖先或前任或过去传下来的东西" http://www.thefreedictionary.com/legacy.显然你想知道其他的东西.你能澄清或扩展你的问题吗?美国洛特
我正在寻找遗留代码的症状,使其无法使用或使用噩梦.什么时候扔掉它更好?我认为应该更频繁地抛弃代码,重新发明轮子是开发的宝贵部分.不重新发明轮子的学术理想是一个很好的理想,但它不是很实用.
另一方面,显然遗留的代码值得保留.
通过使用不再支持或已被取代的硬件,软件,API,语言,技术或功能,通常很少或根本不可能替换该代码,而是使用它直到它或系统死亡.
是什么让代码,遗留代码?
与普通遗产一样,当作者死亡或失踪时,您作为继承人获得他的全部或部分代码.
你流下了眼泪,试图弄清楚如何处理所有这些垃圾.
Michael Feathers在他的着作"有效地使用遗留代码"一书中有一个有趣的定义.根据他的遗留代码是没有自动化测试的代码.
这是一个非常普遍的(并且经常被滥用的术语)但是以下任何一种都是合法的理由来调用app遗产:
代码库基于一种语言/平台,完全不受原始产品制造商的支持(通常说制造商已经停业).
(真正的1a)构建它的代码库或平台是如此之久以至于为系统获得合格或有经验的开发人员既困难又昂贵.
该应用程序支持业务的某些方面,这些方面不再积极发展,并且对于哪些更改极为罕见,通常是为了修复它,如果一些完全意外的变化(规范的例子是Y2K问题)或者某些规则/外部压力它.由于这两个原因都很紧迫并且通常是不可避免的,但是项目没有发生重大的发展,那些被指派处理这个问题的人很可能不熟悉这个系统(以及它累积的行为和复杂性).在这些情况下,这通常是增加与项目相关的感知和计划风险的理由.
系统已经/或正在被另一个系统替换.因此,系统可以比最初预期的少得多地使用,或者可能仅作为查看历史数据的手段.
遗产通常是指不再开发的代码 - 这意味着如果您使用它,则必须按照原始条款使用它 - 您不能只编辑它以支持当今世界的样子.例如,遗留代码必须在当前可能不存在的硬件上运行 - 或者不再受支持.
根据遗产代码优秀工作的作者Michael Feathers的说法,遗留代码是一个没有测试的代码.当此代码更改时无法知道什么中断.
区分遗留代码和非遗留代码的主要因素是测试,或者说缺乏测试.我们可以通过一个小小的思考实验来了解这一点:如果它可以咬回来修改你的代码库是多么容易,如果它可以告诉你什么时候你犯了错误?这很容易,不是吗?改变大型代码库所涉及的大多数恐惧都是害怕引入微妙的错误; 害怕无意中改变事物.通过测试,您可以让事情变得更好而不受惩罚.对我而言,差异是如此重要,它压倒了任何其他区别.通过测试,您可以做得更好.没有它们,你只是不知道事情是好转还是坏转.
一位同事曾告诉我遗留代码是你自己没有写过的任何代码.
可以说,它只是代码的一个贬义词,我们不管出于什么原因不再喜欢(通常因为它不酷或时尚但它有效).
TDD旅可能会建议没有测试的任何代码都是遗留代码.
传统代码是与不再支持或制造的操作系统或其他计算机技术相关的源代码.
没人会读这本书,但我觉得其他答案不太正确:
它具有价值,如果没有用的话,它将在很久以前就被扔掉了
很难推理,因为
缺乏文档,
找不到原始作者或将其遗忘(是的,两个月后您的代码也可以是旧代码!!),
缺乏测试或类型系统
不遵循现代惯例(即也没有背景可保留)
There is a requirement to change or extend it. If there isn't a requirement to change it, it isn't legacy code since nobody cares about it. It does its thing and there is nobody around to call it legacy code.
http://en.wikipedia.org/wiki/Legacy_code
"旧版代码是与不再支持或制造的相关的源代码"
任何缺少支持(或文档)的代码.是的:
内联评论
技术文档
口头文件(写作者)
单元测试记录代码的工作原理
对我来说,遗留代码是在某种范式转换之前编写的代码.它可能仍在使用中,但它正在被重构以使其符合要求.
例如旧的程序代码在其他OO系统中闲置.