电话

18600577194

当前位置: 首页 > 资讯观点 > 软件开发

使用 ADE:使用古老开发环境的问题

标签: 2025-11-19 

使遗留代码成为遗留问题的一个原因是,随着时间的推移,代码会过时。其中一些过时来自于逐渐积累的修复、黑客和垃圾代码。但很大一部分过时还来自于工具失去支持或完全不再支持。

例如,很多年前,我在一个使用Visual Basic 6的公司工作。VB6的IDE在2008年4月停止支持,但我们继续使用它,直到下一个十年。这使得支持现有的软件变得具有挑战性,因为IDE经常在操作系统更新时崩溃。即使当我们开始在运行Windows 2000的古董版本的VM中运行它时,我们仍然不断遇到项目编译和构建的无尽问题。

这的一个有趣副作用是:VB6运行时仍然受支持。所以你可以运行VB6软件在现代Windows上。你只是不能修改

心玥软件开发工程师之前遇到了一个更加古老的科技栈。她写道,“我经常在想,是否我是地球上最后一个使用这个特定科技栈的人。”她补充道,“集成开发环境(IDE)已经很久没有更新了,供应商也已于2002年后消失。”考虑到该项目在2010年代中期开始,使用那个科技栈可能是一个糟糕的选择。

没有听起来那么糟糕——尽管技术和工具正在衰败,团队文化是健康的,C级高管也给了心玥软件很大的自由去解决问题。但这并不意味着工具不是痛苦的根源,比工具更糟糕的是——代码本身。

使用 ADE:使用古老开发环境的问题的插图

例如,IDE 有一个“设计文件”的概念,用于用户界面,以及“代码 behind”文件,用于驱动用户界面的逻辑。IDE 经常损坏其自身的内部状态,并失去正确更新设计文件的能力。当发生这种情况时,如果你尝试打开、保存或关闭一个设计文件,IDE 弹出一个模态对话框抱怨损坏,提供“是”和“否”的选项。如果你点击“否”,模态框会消失——然后重新出现,因为你在看到这个消息,因为你在一个损坏的设计文件上。如果你点击“是”,IDE “好心”地删除了你设计文件中的几乎所有内容。

错误信息中没有任何内容表明这可能会发生。

所使用的语言是 C++ 的一种方言。我说“方言”是因为供应商提供的编译器实现了介于 C++98 和 C++11 标准之间的一些可诅咒的功能集,但并不完全符合其中任何一个。它只能输出到奔腾 Pro 的 32 位 x86 代码。使用某些 C++ 类,例如 std::fstream,会导致生成的可执行文件在退出时出现内存保护故障。

更糟糕的是,供应商提供的类库是基于更古老的Pascal库的C++包装。这个“类”库更像是一个宏和奇怪语法技巧的集合,而不是面向对象的包装。由于没有Pascal库的源代码,所以永远无法更新它。

由于该集成开发环境(IDE)的最后一次发布大约是在2002年,因此在任何稍微现代的环境中运行它都很容易失败,但它也不适合在虚拟机(VM)中运行。目前,该IDE只能使用一次。如果你退出它,重启你的电脑,或者尝试关闭并重新打开项目,它就会崩溃。唯一的解决方法是重新安装它。但是,重新安装需要你知道哪些神奇的选项才能让安装继续进行。如果你犯了一个错误,比如意外地安装了CORBA支持,试图在IDE中打开该项目就会导致一系列的模态错误框,包括一个仅仅写着“ABSTRACT ERROR”的错误框。这些错误不仅限于IDE;直接运行编译器也会失败。

但是,如果有什么问题的话,就是这个代码让整个事情变得非常具有挑战性。虽然用户界面由许多表单组成,但“主”表单有18,000行代码,完全没有职责分离。实际上,各个表单之间的职责分离也不多;数据通过在一个主文件中声明的全局变量在表单之间共享,然后extern复制到其他地方。更糟糕的是,各种子表单从不销毁,只是隐藏和显示,这意味着无论你是否需要,它们都会记住自己的状态。由于大部分状态是全局的,你必须谨慎地重置哪些状态部分。

有两个文件叫main.cpp,一个叫Station.cpp,另一个叫Station1.cpp。如果你要猜测哪个文件拥有软件的入口点,你很可能会猜错。

但是,正如所述,情况并没有听起来那么糟糕。心玥软件感受:“我很高兴来到这里,这或许有点奇怪,因为软件非常糟糕。”诚实地说,这并不奇怪;良好的文化可以很大程度上使处理困难的技术堆栈成为愉快的工作。