问题标签 [legacy-code]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1409 浏览

perl - 如何将 Perl 代码标记为已弃用?

在我的项目中,我目前正在准备从遗留代码逐步迁移到新的、经过适当设计和测试的模块。由于不是每个程序员都密切关注我的工作,所以我想在使用旧代码时发出警告。我也非常希望能够输出有关如何移植旧代码的建议。

我找到了两种方法:

  1. Attribute::Deprecated,这对于函数来说很好,但如果一个完整的模块被弃用则相当麻烦。此外,除了警告之外没有其他信息。

  2. Perl::Critic::Policy::Modules::ProhibitEvilModules对于模块,或者可能是Perl::Critic在函数或方法级别上更好地弃用的自定义规则。这种方法很好,但从代码本身来看,它已经被弃用了。

任何其他建议或技巧如何正确和轻松地做到这一点?

0 投票
1 回答
3135 浏览

java - 用于套接字输入和输出的单独线程

我被分配处理多线程 Java 服务器的一些性能和随机崩溃问题。尽管线程和线程安全对我来说并不是真正的新话题,但我发现设计一个新的多线程应用程序可能比尝试调整一些遗留代码困难一半。我浏览了一些知名书籍以寻找答案,但奇怪的是,只要我阅读并分析提供的示例,一切似乎都很清楚。然而,当我看到我应该处理的代码时,我什么都不确定了!一定是理论知识太多,现实经验少之类的。

无论如何,回到主题,当我在做一些在线研究时,我遇到了这段代码。一直困扰我的问题是:在没有同步的情况下从两个单独的线程调用套接字上的 getInputStream() 和 getOutputStream() 真的安全吗?还是我现在对整个线程安全问题有点过于偏执了?猜猜这就是当连续第五本书告诉你并发有多少事情可能出错时发生的事情。

PS。抱歉,如果这个问题有点冗长或者太“noobie”,请对我放轻松——这是我在这里的第一篇文章。

编辑:为了清楚起见,我知道套接字在全双工模式下工作,同时使用它们的输入和输出流是安全的。当您在主线程中获取这些引用然后用它们初始化线程对象时,对我来说似乎很好,但是在两个不同的线程中获取这些流也安全吗?

@rsp:

PlainSocketImpl因此,正如您所说,我检查了 Sun 的代码并在这两种方法上进行了同步。Socket,然而,没有。getInputStream()并且getOutputStream()几乎只是 的包装器SocketImpl,因此并发问题可能不会导致整个服务器爆炸。尽管如此,在一些不幸的时机下,似乎事情可能会出错(例如,当方法已经检查错误条件时,当某个其他线程关闭套接字时)。

正如您所指出的,从代码结构的角度来看,为每个线程提供流引用而不是整个套接字是一个好主意。close()如果不是因为每个线程也使用套接字的方法(例如,当套接字接收“关闭”命令时),我可能已经重组了我正在处理的代码。据我所知,这些线程的主要目的是将消息排队以进行发送或处理,因此可能违反了单一职责原则,并且这些线程不应该能够关闭套接字(与分离调制解调器接口相比))? 但是如果我继续分析代码太久,看起来设计通常是有缺陷的,整个事情都需要重写。即使管理层愿意付出代价,认真重构遗留代码、没有单元测试以及处理难以调试的并发问题,也可能弊大于利。不会吗?

0 投票
7 回答
14744 浏览

php - PHP中的死代码检测

我有一个代码非常混乱的项目——到处都是重复和死代码。

前段时间,单元测试的代码覆盖率为零,但现在我们正尝试以 TDD 方式编写所有新代码,并通过单元测试覆盖“旧”代码来降低技术债务(最后测试技术)。

业务逻辑的复杂度相当高,有时没有人可以回答是否使用了某些方法。

如何找到这种死代码方法?广泛的日志记录?更高的测试覆盖率?(这不是很容易,因为客户希望新功能出来)

0 投票
3 回答
157 浏览

tdd - 将快速开发与重构/优化分开

我在一个由 2 名前端开发人员组成的团队中开展基于 Web 的后期启动项目。

该网站运行良好,但在代码方面还有很大的改进空间,因为代码非常混乱和杂乱无章。

我想通过编写测试和仔细重构来逐步清理东西以避免破坏任何东西。(使用《有效使用遗留代码》一书中的原则)

但是,与我一起工作的开发人员被赋予了许多高优先级的功能工作,我不想让他承担维护任务的负担。很多时候,由于时间限制,他不得不编写杂乱无章的代码。

随着团队的成长,我关心如何管理不同的问题。

我正在考虑将团队分为两组:

  1. 对新功能进行快速开发,对代码质量的关注较少。
  2. 编写单元测试,重构代码,通常优化事物。

我的目标是尽可能多地测试代码,同时保持新功能开发的步伐。

这个以前试过吗?有什么想法吗?

0 投票
2 回答
180 浏览

asp.net - Web 应用程序与旧代码互操作

我正在尝试将简单的 WinForms 应用程序迁移到 ASP.Net Web 应用程序。WinForms 应用程序基本上只是复杂的纯 C 应用程序的表示层,并通过 COM 互操作与遗留代码交互。我在 ASP.Net、javascript、jQuery 方面有一定的经验,并且在 WinForms 和互操作方面有很多经验,所以我知道基础知识,我只需要做出设计决定。

该应用程序现在的外观是这样的:

  1. 有一堆遗留的 C(甚至不是 C++)代码可以更改和重新编译,但移植不是一种选择。这是业务+数据层,随便叫什么。我将其称为遗留代码

  2. 启动时,遗留代码会实例化一个用于演示和用户交互的 COM 服务器。演示数据被序列化并发送到这个 COM 对象(“我正在向你发送一些输出。”),并且通过循环轮询(“你有一些输入给我吗?”)来实现用户交互。不是最漂亮的解决方案,但非常简单。

  3. COM 对象实际上是作为 COM 公开的 .NET 2.0 WinForms 应用程序。这个应用程序还通过 .NET Remoting 向其他 .NET 应用程序公开了一些功能,但这也不是那么重要。

虽然系统比较复杂,但是WinForms app确实只用于交互,所以切换到web还是很容易的。我不确定做 Web 服务器 <---> 遗留代码交互的最佳方式是什么。

我想到的第一件事(因为我已经实现了 .NET Remoting)是通过本地 .NET Remoting 将 WinForms 功能公开给 Web 部件,使其充当遗留代码和 Web 应用程序之间的某种代理。我实际上只需要沟通部分,没有表格。在这种情况下,Web 应用程序必须通过 .NET Remoting(本地)访问此功能。

让 Web 应用程序使用 .NET Remoting 在本地与另一个应用程序通信是否明智?此外,我可以将应用程序更改为 Windows 服务,但我仍然能够通过 COM 将其功能公开给旧代码吗?

实现这一目标的更好方法是什么?请注意,如果需要,我还可以对遗留代码进行一些修改。

0 投票
8 回答
8751 浏览

c# - 如何使用`using`语句对方法进行单元测试?

如何为具有 using 语句的方法编写单元测试?

例如,假设我有一个方法Foo

我怎样才能测试类似上面的代码?

有时我选择不手动使用using语句和对象。Dispose()我希望有人能告诉我一个我可以使用的技巧。

0 投票
1 回答
271 浏览

ruby-on-rails - Ruby on Rails:如何处理遗留代码?

我有一个在 Rails 1.2.3 中构建的门户项目。我在 2006 年底完成了它。

该项目正在使用以下插件:acts_as_attachmentacts_as_ferret betternestedset simple_http_auth

我知道所有插件(或依赖项)今天都已更改,或者不再存在。DHH 说:不要高估版本的力量。但我很担心这个。

如果我更新 rails 版本,一切都会失败。我可以更改我的应用程序以使用新的 Rails 版本。我想我可以阅读现在已弃用的内容并进行更改。但是现在我需要自己支持所有的依赖或者改成其他的依赖(例如:acts_as_attachment 到 atachment_fu 或者回形针)。明天要说什么?

我的怀疑不仅仅是关于 Rails,而是关于使用依赖项来提高生产力。在其他项目中,我使用了纯 Python 代码,甚至纯 Ruby 代码,或纯 Php 代码。今天我可以在最新版本的“语言/环境”中运行它而无需(或很少)更改。

这些项目没有外部依赖,只是应用程序代码。也许使用一些 Web 框架作为骨架,而不是外部项目。

你怎么看待这件事?

0 投票
4 回答
762 浏览

.net - 将旧版 VB6 函数调用转换为 .NET 的实用程序

我正在寻找一种实用程序/工具来将对遗留 VB6 函数的调用转换为 .NET 等效函数。

例如,它会转换这个......

对此...

有人知道吗,还是我必须自己动手?

0 投票
3 回答
203 浏览

legacy-code - 如何向现有组件添加新功能?

我们的项目中有这个遗留的图像查看器组件,它工作正常,但它的源代码实在是一团糟。我必须向这个组件添加一个新功能,以便人们可以使用光笔为图像添加注释,这本身并不是一项复杂的任务,但可能是处理我们现有代码的噩梦。

我现在真的很困惑,我不知道我应该从哪里开始。我必须重构现有代码吗?如果不是我还能做什么?

所以这是我的问题:处理这种情况的最好(不那么痛苦)的方法是什么?

0 投票
3 回答
1741 浏览

mysql - 在 MySql 中增加 varchar 长度的可能后果?

我正在使用一个旧表,其中有一个 varchar(40) 字段。我希望可以在该字段中插入更多字符,所以我想增加它的长度。
在增加长度之前我应该​​考虑可能的负面后果吗?