问题标签 [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.
c++ - 如何开始修改大型项目
我必须对具有超过 100k 行代码的现有 C++ 项目进行增强。
我的问题是如何以及从哪里开始这些项目?
如果代码没有很好地记录,问题会进一步增加。是否有任何用于研究大型项目代码流的自动化工具?
谢谢,
.net - Visual Basic 2005 中的全局关键字?
我必须继承公司的一些遗留代码,这些代码是用 Visual Basic.NET 7.0 (Visual Studio.NET 2002) 编写的。我在 VB.NET 方面没有太多经验,这行代码给我带来了麻烦:
Visual Studio 给出了这个错误:错误 31 关键字作为标识符无效。C:\Documents and Settings\Administrator\Desktop\POMan\WebApplication1\Global.asax.vb 4 14 C:...\POMan\
我怎样才能解决这个问题?
c# - 使用模拟框架记录拐点上的交互。起订量
问题的更新版本
你好。
我的公司有一些遗留代码库,我希望在它们迁移到 .NET 3.5 后立即对其进行测试。我选择了 Moq 作为我的 Mocking 框架(我立即爱上了简洁的语法)。
一个常见的场景,我希望在未来看到很多,是我看到一个与其他一些对象交互的对象。
我知道 Michael Feathers 的作品,而且我越来越擅长识别拐点和隔离尺寸合适的组件。提取和覆盖为王。
但是,有一个功能可以让我的生活变得更轻松。
想象一下 Component1 与 Component2 交互。Component2 是一些奇怪的串行线接口,连接到消防中心或类似的东西,具有大量的字节检查、转换和指针操作。我不想理解 component2 和 Component1 使用的遗留接口带来了很多包袱。
我想做的是提取 Component1 使用的 Component2 的接口,然后执行以下操作:
我正在创建一个普通的模拟,但我正在将真实 Component2 的一个实例作为构造函数参数传递到 Mock 对象中。看起来我正在根据 Component2 进行测试,但我不打算保留此代码。这是“放置测试对象”仪式的一部分。
现在,我将启动真实系统(连接物理火中心),然后与我的对象进行交互。
然后我希望检查模拟以查看组件 1 如何与组件 2 交互的日志(使用调试器检查模拟上的一些字符串集合)。而且,更好的是,该模拟可以提供一个期望列表(在 C# 中),它将在不依赖于 Component2 的模拟中创建此行为,然后我将在我的测试代码中使用它。
简而言之。使用模拟框架记录交互,以便我可以在我的测试代码中回放它。
旧版问题
你好。
使用遗留代码和许多实用程序类时,我有时会发现自己想知道在许多场景中特定类是如何被其周围环境所作用的。我今天早上处理的一个案例涉及对常规 MemoryStream 进行子类化,以便在达到一定大小时将其内容转储到文件中。
(我在这里使用了一个断点在文件写入后退出程序)。这行得通,我发现哪个 webform(web 部件->web 部件->web 部件)控件呈现不正确。然而,memorystream 有一堆 write 和 writeline。
我可以使用模拟框架快速了解特定实例的操作方式吗?有什么巧妙的技巧吗?我们使用 Rhino Mocks。
我认为这是处理遗留代码的重要资产。特别是如果可以轻松地将场景中记录的操作设置为在单元测试中复制的同一场景的新期望/接受标准。
每一个输入都受到赞赏。感谢您的阅读。
.net - 将本机程序集安装到 GAC
我有一个程序集,其中包含托管和非托管 C++ 代码的混合。我已经签名并安装到全局程序集缓存中。我的程序(.Net、C#)在那里找不到它,尽管当程序集位于程序目录中时它运行得非常好。该程序使用 DllImport 和 pinvoke 从程序集中调用方法。如何让程序在 GAC 中找到我的程序集?我可以使用 exe.config 或 exe.manifest 文件来实现这一点吗?
unit-testing - 如何为遗留的 Visual C++ 代码组织单元测试工具?
我有一个 Visual Studio 2005 C++ 项目,它是一个控制台应用程序。
我想开始在测试工具下获取一些代码,但我遇到了一些我不知道如何最好地处理的问题。
我不希望我的大部分测试代码都以生产中的正常 .exe 结尾,所以我认为最好为我的测试创建一个单独的项目。第一个问题,这个新项目将如何调用其余代码?我应该让我的遗留代码成为具有单个入口点的 .lib 或 .dll 并创建一个单独的项目来调用我的遗留代码的主要部分吗?
我是否应该采取丑陋的做法,将我的所有测试都放在完全#ifdef TESTING
这样的文件中,这样代码就不会出现在我的生产 .exe 中?如果是这样,我应该如何有条件地加载我的测试框架?使用单独的属性配置进行测试?
我基本上是在寻找有关如何在 Visual C++ 中的旧 .exe 项目上获取测试工具的任何建议
c++ - 将 cout 和 stdout 都重定向到 C++ 中的字符串以进行单元测试
我正在努力在单元测试下获取一些遗留代码,有时感知现有程序行为的唯一方法是从控制台输出。
我在网上看到很多关于如何将标准输出重定向到 C++ 中的另一个文件的示例,但是有没有办法可以将它重定向到内存中的流,这样我的测试就不必依赖磁盘了?
我想将遗留代码发送到 stdout 的任何内容放入 std::string 中,这样我就可以轻松地 .find 输出。
编辑
遗留代码非常糟糕,以至于它用户混合使用cout << ..
和printf
. 这是我到目前为止所拥有的:
问题是这不会使用printf 捕获输出。我想要两者兼得的东西。有任何想法吗?
sql - 关于连接性能与系统非规范化的任何好的文献?
作为这个问题的必然结果,我想知道是否有很好的比较研究,我可以咨询并传递关于使用 RDMBS 进行连接优化与系统非规范化以便始终一次访问单个表的优势。
具体来说,我想了解以下信息:
- 性能或规范化与非规范化。
- 规范化与非规范化系统的可扩展性。
- 非规范化的可维护性问题。
- 非规范化的模型一致性问题。
有点历史,看看我要去哪里:我们的系统使用内部数据库抽象层,但它很旧,不能处理多个表。因此,所有复杂对象都必须在每个相关表上使用多个查询来实例化。现在,为了确保系统始终使用单个表,在整个表中都使用了大量的系统非规范化,有时会压平两到三层深度。至于 nn 关系,他们似乎已经通过精心设计他们的数据模型来解决它,以避免这种关系,并且总是退回到 1-n 或 n-1。
最终结果是一个错综复杂的系统,客户经常抱怨性能。在分析这样的瓶颈时,他们从不质疑系统所基于的这些基本前提,并且总是寻找其他解决方案。
我错过了什么 ?我认为整个想法是错误的,但不知何故缺乏无可辩驳的证据来证明(或反驳)它,这就是我求助于你们的集体智慧来指引我走向好的、被广泛接受的文学作品,这些文学作品可以说服我团队中的其他成员方法是错误的(让我相信我对一致的数据模型过于偏执和教条)。
我的下一步是建立自己的测试平台并收集结果,因为我讨厌重新发明轮子,我想知道这个主题已经有了什么。
---- 编辑注释:该系统最初是用平面文件构建的,没有数据库系统......只是后来它被移植到数据库,因为客户坚持使用 Oracle 的系统。他们没有重构,只是简单地为现有系统添加了对关系数据库的支持。平面文件支持后来被删除,但我们仍在等待重构以利用数据库。
java - Java:学习一个你很少或没有经验的项目有哪些步骤
作为一个缺乏行业经验的初级程序员,我发现学习一个基于许多我不熟悉的技术的新项目是令人沮丧的。我正在从事的项目有大约 150 个类和 15000 行代码,并且它广泛关注我零经验的套接字和安全编程,我不知道应该从哪里开始。
由于手头的文档和帮助有限,自学是我尝试从整体上理解这个项目的最佳资源。我经常发现自己花了太多时间学习产品的微不足道的功能,而错过了我真正应该关注的关键类……花费这么多时间的主要原因是我经常不得不研究 Java API每隔几分钟参考一下以了解一个小代码块......我相信我最终会通过反复试验来学习它,但我相信我可以使用一些有用的建议和指导方针:)
refactoring - 谁让工具自动记录/分析遗留代码,哪个更好?
还有谁让 Scitools 等工具了解 C++,哪个更好?
寻找适用于 Ada、C、C++ 和 Fortran 的最完整的自动文档工具。用于分析工具迁移工作,以帮助修剪死代码和识别基本功能。
皮特
design-patterns - 我什么时候需要停止使用设计模式?
我的同事们都快疯了,因为我一直想重写已经有效的代码,因为我想用设计模式替换一些遗留设计。虽然我觉得它有助于改进现有代码,但我确实觉得我对它有点偏执,并尝试在任何地方使用它们,甚至用另一种设计模式替换一种设计模式。我的一些同事说,只要遗留代码有效,就不要管它。
我什么时候应该停止使用它们?您在需要被更好的设计替换的代码和不需要触及的代码之间划清界限?