您对所涉及的软件进行了哪些成功的转换/重写?过程中涉及的语言和框架在哪里?有问题的软件有多大?最后,您从参与该过程中学到的最重要的一件事是什么。
这与此question
有关答案 0 :(得分:3)
我要在这里“最深奥”:
答案 1 :(得分:2)
我在每个文件中重写了20,000行Perl以使用“use strict”。我不得不在需要的地方添加“我的”,我必须修复在此过程中发现的错误。
我从中学到的最重要的事情是,“它总是比你想象的要长。”
我必须在一夜之间完成所有操作,以便其他编码人员不会同时编写新的,不修复的代码。我认为它会很快,但事实并非如此,而且我仍然在第二天早上6点进行黑客攻击。
我确实已完成并在其他人开始工作之前签到了!
答案 2 :(得分:1)
出于各种原因,我为一家房地产公司重写了一个大型Java Web应用程序到ASP.Net应用程序。
我学到的最重要的事情是,无论原始系统具有多么微不足道的功能,如果它不在第二个系统中,客户认为重写是失败的。在编写新系统时,期望管理就是一切。
这是重写的最大原因:对客户来说似乎很容易(“只是重新做我已经拥有的东西并添加一些东西。”)。
答案 3 :(得分:1)
对我而言,最酷的一个是port of MAME to the iPod。这是一个很好的嵌入式硬件学习经验,我和很多优秀的人一起工作。 Official site
答案 4 :(得分:0)
Migrating the B-2 Stealth Bomber mission software from JOVIAL to C. 100%全自动转化。认真!
主要教训:使用可配置的自动转换工具是一个巨大的胜利。
答案 5 :(得分:0)
将理论上可移植的C代码转换为跨架构的理论上可移植的C代码,以支持硬件更改,从而为每个单元节省公司X美元。
规模各不相同 - 这是一个常见的需求,我做过小型和大型项目。
我学会了编写更多可移植的C代码。优雅很棒,但是当它出现时,编译器会处理性能,代码应该尽可能简单和便携。
答案 6 :(得分:0)
将Fortran 77中编写的模拟(尽管是在90年代编写)移植到C / Java,因为原始版仅适用于小型数据集。经过多次解释,为什么在程序开始时将整个数据表移动到内存中,我学会了爱大O符号。
答案 7 :(得分:0)
我将一个完全用Perl编写的动态构建过程转换为一个C#/ .Net解决方案,使用了一个同事开发的工作流引擎(它仍处于测试阶段 - 所以我不得不做一些改进)。这让我有机会为构建过程添加故障安全和故障转移功能。
在您提出之前 - 否 - 无法使用microsoft workflow-foundation,因为您无法在运行时动态更改进程。
我学到了什么:
最后,它覆盖了来自3 200个LoC Perl文件的大约5k - 6k(包括wf引擎)LoC原点。但这很有趣 - 最终会好得多;)
答案 8 :(得分:0)
将用PHP编写的vBulletin转换为C#/ Asp.NET。我对这两种语言非常熟悉,但PHP是构建该软件的最佳选择。后方最大的痛苦是需要使用C#等效的PHP eval()来调用模板。
这是我尝试转换的第一个挑战。我了解到我需要更多使用C#的经验,而且从头开始编写它有时会更容易。
答案 9 :(得分:0)
为处理合法发票的公司重新编写了一个系统 - 原始系统是一个VB怪物,它不知道好的OO原则 - 一切都混合在一起。 HTML做了SQL,SQL写了HTML。其中很大一部分是自定义规则引擎,它使用类似XML的规则。
两支队伍重写了大约9个月。一个团队完成了Web前端和后端工作流程,而另一个团队(我在那里)重新编写了规则引擎。新系统是用C#编写的,并且是先测试完成的。我们完成后向系统添加新规则很简单,而且都是可测试的。在此过程中,我们做了一些事情,比如将公司从VSS转换为SVN,实现持续集成,自动化部署,并教其他开发人员如何进行TDD和其他Scrum / XP实践。
通过该项目管理期望至关重要。让一个精通软件的客户非常有帮助。
混合大规模(端到端)测试以及全面的单元和集成测试有助于吨。
答案 10 :(得分:0)
几个。但我提到了一个。
这是一个性能建模工具。部分delphi 1,部分turbo pascal。它需要重写,否则它无法生存。所以我们从一个2人的团队开始,但只有我幸存到最后。我在截止日期前准备好了; - )。
我们做了几件事:
我们真的把这个弄干净了,最后还是付了很多钱。这么大的学习经历。
答案 11 :(得分:0)
十年前,我成立了一个团队,将CAD系统从DOS转换为Windows。 DOS版本使用home-brew libraries进行图形绘制,Windows版本使用MFC。该软件在转换时大约有70,000行C代码。我们在这个过程中学到的最重要的事情是抽象的力量。所有特定于设备的非可移植例程都在几个文件中隔离。因此,通过使用Windows API调用直接访问帧缓冲区来替换调用基于DOS的库是相对容易的。同样,对于输入,我们只是使用相应的Windows事件循环替换了检查键盘和鼠标事件的事件循环。我们继续执行将非便携式(此时为Windows)代码与系统其他部分隔离的策略,但我们尚未发现这一点特别有用。也许有一天我们会将系统移植到Mac OS X并再次感谢。
答案 12 :(得分:0)
将主公司应用程序从预标准C ++转换为标准C ++。我们有一个数百万美元的销售,它依赖于它在AIX上工作,看了之后我们决定转换到标准C ++就像转换到IBM的传统C ++一样简单。
我不知道行数,但源代码运行到数百兆字节。
我们使用标准的Unix工具来完成这项工作,包括vi和各种编译器。
花了几个月的时间。大多数修复都是简单的,由编译器捕获并几乎机械修复。其中一些要复杂得多。
我认为我的主要内容是:不要使用尚未标准化的语言中的代码过于聪明,或者可能会以意想不到的方式改变事物。我们不得不在C ++流的一些巧妙的改编/滥用中进行大量挖掘。
答案 13 :(得分:0)
我们的应用程序框架中有一个代码生成工具,用于读取基于文本的数据文件,大约20个其他应用程序使用它。
我们希望使用XML数据文件而不是基于结构化文本的文件。原始代码已经过时且难以维护。我们通过XSLT脚本和实用程序库的组合替换了此工具。对于实用程序库,我们可以在旧工具中使用一些代码。
结果是所有20个应用程序现在都可以使用基于文本的过时文件格式或基于XML的新格式。我们还提供了一个转换生成工具,可将旧数据文件转换为新的XML数据文件。
在推出一个或两个版本后,我们现在决定不再支持旧的基于文本的格式,并且每个人都能够将其数据转换为XML。
我们几乎不需要进行手动转换,
答案 14 :(得分:0)
我将一个客户端服务器Powerbuilder应用程序(几百个屏幕)移植到ASP.NET应用程序(C#)中。
由于性能和可维护性问题,我在去年将大量嵌入式SQL从Powerbuilder脚本中移出并存储到了存储过程中。
虽然这会让很多人感到畏缩,但在数据库中有很多业务逻辑,这意味着Powerbuilder应用程序相对“轻松”,当我们构建.Net前端时,它可以利用SQL代码库并且已经构建和测试了许多功能。
不是说我建议以这种方式构建应用程序,但在这种情况下它确实对我们有利。
答案 15 :(得分:0)
我将一个30,000行的MS-DOS C ++程序移植/重新设计/重写为类似长度但更全功能且可用的Java Swing程序。
我学会了从不接受涉及C ++或Java的其他工作。
答案 16 :(得分:0)
我正在将Inhouse Project管理系统重写为更标准的MVC模型。它在LAMP堆栈(PHP)中,我接近第一个里程碑。
我从中学到的东西目前是程序在开始时感觉有多简单,我试图在我不得不增加复杂性之前。
示例是我首先编写了所有功能(就像我是管理员用户),然后当它被整理出来时,添加限制的复杂性(用户级别等)