Questions tagged «legacy»

有关遗留语言,代码或应用程序的问题。

4
什么是反腐败层?如何使用?
我正在尝试弄清“反腐败”层的真正含义。我知道这是一种过渡/解决旧代码或错误API的方法。我不明白的是它是如何工作的,是什么使它与不良层完全分离。 我已经进行了一些搜索,但是找不到任何简单的示例或解释,因此我正在寻找可以理解并可以通过简单示例进行解释的人员。可以满足我的问题的答案应该很简单(不一定要简短),并提供易于理解的实现和使用示例。 有关我的用例,请参见此问题。


11
遗留代码移交最佳实践
几个月后,一位同事将继续进行一个新项目,而我将继承他的一个项目。为了准备,我已经下令迈克尔·费瑟斯(Michael Feathers)有效地使用旧版代码。 但是本书以及到目前为止我发现的有关遗留代码的大多数问题都与按原样继承代码的情况有关。但是在这种情况下,我实际上可以访问原始开发人员,并且我们确实有时间进行有序移交。 我将继承的一段代码背景: 它的功能是:没有已知的错误,但是随着性能要求的不断提高,在不久的将来将需要进行一些优化。 未记录:在方法和类级别上几乎有零个文档。但是,该代码应该在更高级别上执行的操作已被很好地理解,因为多年来我一直在使用其API(作为黑匣子)进行编写。 只有更高级别的集成测试:只有集成测试可以测试通过API与其他组件之间的正确交互(再次是黑匣子)。 非常低级的,针对速度进行了优化:由于此代码是整个应用程序系统的核心,因此多年来,许多代码已进行了多次优化,并且非常低级(对于某些结构,一部分具有自己的内存管理器) /记录)。 并发和无锁:虽然我对并发和无锁编程非常熟悉,并且实际上为该代码贡献了一些内容,但这又增加了另一层复杂性。 大型代码库:这个特定的项目有超过一万行代码,因此我无法向我解释所有内容。 用Delphi撰写:尽管我不认为该语言与该问题紧密相关,但我将把它放在这里,因为我认为这种类型的问题与语言无关。 我想知道如何才能最好地度过他离开之前的时间。这里有一些想法: 让一切都可以在我的机器上构建:尽管应该将所有内容检查到源代码控制中,但谁也不会忘记偶尔检查一次文件,因此这应该是首要任务。 更多测试:虽然我希望进行更多的类级单元测试,以便在进行更改时可以尽早发现我引入的任何错误,但现在的代码不可测试(大型类,长方法,太多代码)相互依赖)。 文档内容:我认为对于初学者来说,最好将文档重点放在代码中那些本来就难以理解的领域,例如由于其低级/高度优化的特性。恐怕其中有些事情看起来很丑陋,需要重构/重写,但是实际上其中存在一些优化,这是我可能会错过的一个很好的原因(参见Joel Spolsky,您应该做的事情)从不做,第一部分) 如何记录:我认为最好是一些体系结构的类图和关键功能的序列图以及一些散文。 向谁记录:我想知道让他写文档或让他向我解释会更好,这样我可以写文档。我担心,对他而言显而易见但对我而言不明显的事情将无法得到适当覆盖。 使用成对编程进行重构:由于时间限制,这可能无法实现,但是也许我可以重构他的一些代码,以使其在他仍然在提供有关事物为何如此的方式的输入时更加可维护。 请评论并添加到此。由于没有足够的时间来完成所有这些工作,因此我对如何确定优先级特别感兴趣。 更新:移交项目结束后,我在下面的答案中根据自己的经验扩展了此列表。

10
代码什么时候是“旧版”?[关闭]
我们都完成了,我们已经将一些代码(通常是我们继承的东西)标记为“旧版”?但是它仍然在生产系统中使用-真的是遗留的吗?什么使它成为遗产?我们应该回避这种毫无用处的代码吗?标签的纯粹意义在于让我们不断尝试新事物并保持高层管理人员的愉快和快乐? 答案摘要 通过回答,我看到了四个总体主题。这是我看到的细分: 已交付的任何代码:6 失效系统:2.5 无单元测试:2 开发人员不在周围:1.5

14
禁止或控制“隐藏的IT ...”谁应该编写和维护临时软件应用程序?
大型公司通常会遇到这样的问题:由于缺少人员和金钱,不可能编写员工想要的所有程序(以节省时间和优化流程)。 然后,将由具有(至少一些)编码经验的人(或由便宜的学生/实习生...)创建隐藏程序。在某些情况下,这些应用程序将变得越来越重要,并从一个用户传播到整个部门。 还有一个关键点:谁来维护应用程序,添加新功能……?这个程序很关键。这是必需的。但是实习生已经离开了公司。没有人知道它是如何工作的。您只有一堆资源和一些文档。 尝试控制或禁止在IT部门之外临时进行应用程序开发是否有意义(Excel宏等次要内容除外)?

5
专门的维护工作会妨碍程序员的职业吗?[关闭]
在过去三年中,我的大部分工作主要围绕维护旧系统,这些旧系统需要修补或偶尔进行改造,然后再出售。 我了解专门的维护程序员在拥有大量项目且开发人员有限的公司中必须发挥的关键作用。 但是,当我判断自己目前的职业发展并与同龄人看时;承包商和企业开发商都一样;我确实感觉自己已经远远落后了,因为我在接触的领域上获得了很大的广度,但是深度并不多。我已经开始建立博客来解决这个问题,从事我自己的git-hub小项目,并重新安排我的生活,让他们有时间定期下班后进行个人编码。 我觉得如果我要去其他公司面试以逃避维护工作,我将不得不把自己表述为熟练的技能水平,因为我不会拥有具有三年工作经验的人需要的知识深度功能开发的路径。因此,从长远来看,我目前的工作经验的一半将变得毫无价值。 但这引出了我的主要问题,如果感觉太围绕我的个人困境,我深表歉意: 专门的维护编程角色最终会损害早期的职业生涯吗?其他程序员是否应该避免此类角色?除非您准备从高中开始,否则从事这方面的工作是否会使您锁定执行类似的任务?

8
使用过时的技术进行开发有什么优势?[关闭]
一点背景: 我在一家大公司工作,使用Windows XP并在VB6 / VB.Net中编码Winforms,在VB.Net中编码一些WebForms(95%维护代码)。我有一个4:3 19英寸的屏幕。Windows即将推出更现代的版本,它的声音也没有任何新的领域! 当我加入公司时,没有人告诉我任何这些信息,我误以为我会使用更多的最新技术和框架。 我在以前的工作中拥有更多的最新经验,包括使用更现代的框架和其他编程语言,并且在与其他公司的开发人员朋友见面时,我所听到的是他们如何使用最新的ASP MVC框架,或者Vagrant / Ruby on Rails / etc,我的眼睛越来越绿! 我可以很快地完成另一份工作,但我觉得我应该再给这个机会。 问题: 我试图说服自己,我目前的工作还不错。那么,这种角色有什么优势呢?使用过时的技术是否有优势?也许我不愿意使用一些更现代的技术?还是这是职业消亡的地方,我应该在仍然有灵魂的时候走出去?
28 skills  legacy 

5
哪些问题导致人们使用日语特定的编​​码而不是Unicode?
在工作中,我遇到了许多使用Shift-JIS和其他编码的日语文本文件。对于所有计算机用户,这会导致许多mojibake(字符不可读)问题。Unicode旨在通过为所有语言定义单个字符集来解决此类问题,并且建议在Internet上使用UTF-8序列化。那么,为什么每个人都不能从日语专用的编码转换为UTF-8?UTF-8存在哪些问题或弊端? 编辑:W3C列出了Unicode的一些已知的问题,这可能也是原因吗?

4
用自动化测试改造遗留代码的最佳实践
我将承担在相对较大和较旧的代码库中重新实现已经定义的接口(一组C ++头文件)的任务。在执行此操作之前,我希望具有尽可能完整的测试范围,以便我可以尽早,轻松地检测到重新实现错误。问题在于,已经存在的代码库没有被设计为易于测试的,具有(非常大的)类和函数,高度的耦合,具有(很多)副作用的函数等。 听说以前有类似任务的经验,以及如何将自动测试(单元,集成,回归等)改造为旧代码的一些好的具体建议,将是很高兴的。
22 testing  legacy 

6
添加单元测试对知名的旧版代码有意义吗?
我说的是TDD意义上的单元测试。(不是自动的“集成”,或者您喜欢称之为测试的东西。) 遗留代码,如:(C ++)没有测试的代码。(请参阅:Michael Feathers的“ 旧版代码有效工作”) 但是还有一些遗留代码,例如:我们的团队在过去10到5年中一直在使用的代码,因此我们通常对将事物放置在何处可以改变事物有一个很好的认识。 我们确实对某些模块进行了单元测试(通过Boost.Test),这些模块后来出现或很自然地适合单元测试(常见的应用程序特定容器,字符串填充,网络助手等)。 我们尚未进行适当的自动化验收测试。 现在,最近,我很高兴地实现了3个新的面向用户的功能。 每个人花了我大约1-2个小时来快速掌握我需要更改的代码部分,花了1-2小时来实现我需要更改的(小)代码,另外花了1-2个小时来确保应用程序之后正确运行,并且确实应该这样做。 现在,我确实添加了很少的代码。(我认为每个功能都有一个方法和一些调用行。) 分解出这段代码(通过WEwLC中建议的任何一种方法),以使单元测试变得有意义(而不是完整的重言式)将很容易又花费2-4个小时,甚至更多。这将为每个功能增加50%-100%的时间,而没有立即的好处,因为 我不需要单元测试即可了解有关代码的任何信息 手动测试的工作量是相同的,因为我仍然需要测试代码是否正确集成到应用程序的其余部分中。 当然,如果,以后,“有人”走过来,碰到的代码,他理论上可以有从单元测试的一些好处。(仅从理论上讲,因为经过测试的代码孤岛将生活在未经测试的代码海洋中。) 因此,“这一次”,我选择不做添加单元测试的艰苦工作:对代码进行更改以使要测试的东西要比对代码进行更改(要正确(清晰地)实现功能)复杂得多。 这是强耦合旧代码的典型代表吗?我是不是很懒?我们是否将团队的优先顺序设置错了?还是我谨慎,只测试开销不太高的东西?
21 c++  tdd  legacy  unit-testing 

7
大型的基于Fortran的数字处理代码库如何现代化?
一个学术界的朋友向我征求意见(我是C#业务应用程序开发人员)。 他拥有一个遗留代码库,他在Fortran中编写了医学成像领域的代码。它使用向量进行大量的数字运算。他使用一个集群(30个核心),现在已转向拥有500个GPU的单个工作站。 但是,代码库的下一步是什么: 其他人可以在下一个10年周期内对其进行维护 更快地调整软件 可以在不同的基础架构上运行而无需重新编译 经过我的研究(这是一个非常有趣的领域),一些选择是: 使用Python和CUDA来自Nvidia的 用功能语言重写。例如,F#或Haskell 基于云并使用诸如Hadoop和Java之类的工具 学习C 您对此有何经验?我的朋友应该如何看待现代化的代码库? 更新:感谢@Mark和所有回答的人。我的朋友问这个问题的原因是,这是在项目生命周期中进行评估的最佳时机。在Fortran中提高研究助手的速度是需要时间的(我喜欢C#,尤其是工具,无法想象回到旧的语言!!) 我喜欢将纯数字格式保留在Fortran中的建议,但将其包装在较新的版本中。也许那样的Python似乎在学术界占有一席之地,这是一种相当容易掌握的通用编程语言。 请参阅Medical Imaging和为CUDA编写Fortran包装器的人,我可以将我的Fortran 90包装器合法发布到Nvidias的CUFFT库(来自CUDA SDK)吗?。
21 math  legacy  fortran 

6
在可怕的数据库上编写好的代码是否有希望?
这是我的困境。我最近继承的几个程序之一是在后端使用可怕的数据库构建的。尊敬的创作者显然不喜欢关系概念。每个客户的表,称为唯一客户ID。八十三个隐式命名的字段。该代码都是带有数十个串联的内联SQL语句的程序性代码。 由于没有为我们提供可在同一数据库上运行的重要辅助应用程序,因此我不得不从头开始重新创建它。我是唯一的开发人员,这甚至都不是我的主要职责,因为我至少有一半的时间被操作员占用。从现在开始,不可避免的期限是30天。 尽管我没有经验,但是我敢肯定我可以设计出比以前更好的数据库和现有应用程序,但是我真的认为改变数据库,调整现有应用程序并确保我没有这样做是不现实的。在需要快速创建附加应用程序的同时不要破坏任何内容。 因此,假设我陷入了可怕的数据库。需要使用这样一个糟糕的结构,我写的任何符合它的东西,是否只会增加堆积如山的技术债务,直到一些事情完全崩溃或需要新功能时才被搁置?除了可以运行的应用程序之外,我该如何处理这种情况并从中获得好处? 编辑:如果有人感兴趣,我们最终将这个可怕的数据库及其上运行的应用程序报废了。我们将辅助应用程序的创建(我没有参与设置)外包给了最终两个不同的承包商,他们最终都落在了我们头上,却一无所获。我最终不得不在三天之内赶出一个恐怖的,具有部分功能的修补程序,而该修补程序至今仍在使用。

5
艾达真的走了吗?
人们仍然使用Ada吗?(主要用于国防部) 是否所有应用程序都使用Ada“旧版”编写? Ada知识是否仍在销售
17 legacy  ada 

4
经典ASP到ASP.net或ASP.net MVC
我们有一个使用经典ASP开发的Web应用程序,它经过5年的发展演变成目前的形式,该应用程序具有100多个页面,庞大的数据库和10000个活跃用户,每天至少浏览10个页面。 现在,我们想将其升级到最新版本的.net。最初我们考虑重写整个应用程序,但是在分析了场景之后,我们发现这不是一个可行的选择,很多专家也没有建议。我们还没有决定如何做,但是对如何实现面部改写有些想法。 选项1: 我们考虑了识别此应用程序中的主要模块,并通过将应用程序划分为不同的层(如数据库(现有),业务逻辑和视图)来逐一重写它们。这样,新开发的模块将被添加到现有系统中,而新页面将替换该特定模块中的旧页面。同时,我们可以与旧系统一起测试新层,并在我们确信后释放它们。我们还考虑过开发用于业务逻辑的API类型的结构,并将其作为外部应用程序进行访问。 选项2: 目前,我们已经完成了一个简单的模块,并通过IFrame在经典ASP页面中使用了它,尽管在经典ASP和IFrame中的新页面之间发送数据非常麻烦。 这只是在计划阶段,我们将如何实现整个应用程序的重写而又不打扰用户群。 我想征询其他程序员的意见,意见和建议,以应对这种情况?如果有人遇到过这种情况,请也分享您的看法。 还想知道使用ASP.net MVC在这方面对我有帮助吗? 更新:感谢您提供观点的两个答案。在将应用程序从经典ASP迁移到asp.net或asp.net mvc时,我想在上面指定的两个选项上获得更多输入。如果你们都可以通过您对迁移部分的观点,观点和想法,而不是选择asp.net或asp.net mvc的观点,那对我将是极大的帮助。

9
总体而言:我们将如何维护遗留系统?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 8年前关闭。 纽约-爆炸使摩天大楼震颤,一条已有83年历史的蒸汽管发出了强有力的信息,即纽约和美国其他城市下方的管道,电线和铁条的英里数正在老化,并且可能变得危险地不稳定。 2007年7月关于曼哈顿爆裂的蒸汽管的故事 我们听说过软件腐烂和技术债务。 我们已经收到以下消息: “鲍勃叔叔”马丁-谁警告过我们“ 弄乱的后果 ”。 迈克尔·C·费瑟斯(Michael C. Feathers)-谁为我们提供了“有效使用旧版代码”的指南。 因此,软件工程界当然可以意识到这些问题。 但是,我觉得我们整个社会都不喜欢这些问题如何困扰工作系统和应用程序。 正如史蒂夫·麦康奈尔( Steve McConnell)所说: ...与金融债务不同,技术债务不那么明显,因此人们可以轻松地忽略它。 如果这是真的,我相信是这样,那么我担心政府和企业可能会推迟对黑客的定期维护和防御,直到为时已晚。[很像纽约市和蒸汽管。] 我的问题: 有没有一种方法可以避免使用等效于NYC和蒸汽管道的软件?

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.