你做了什么成功的软件转换/重写?

时间:2009-02-26 20:43:05

标签: refactoring code-migration

您对所涉及的软件进行了哪些成功的转换/重写?过程中涉及的语言和框架在哪里?有问题的软件有多大?最后,您从参与该过程中学到的最重要的一件事是什么。

这与此question

有关

17 个答案:

答案 0 :(得分:3)

我要在这里“最深奥”:

  • 移植一个8080模拟器 FORTRAN 77从DECSystem-10运行TOPS-10到 运行VM / CMS的IBM 4381大型机。

答案 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%全自动转化。认真!

主要教训:使用可配置的自动转换工具是一个巨大的胜利

请参阅DMS Software Reengineering Toolkit

答案 5 :(得分:0)

将理论上可移植的C代码转换为跨架构的理论上可移植的C代码,以支持硬件更改,从而为每个单元节省公司X美元。

规模各不相同 - 这是一个常见的需求,我做过小型和大型项目。

我学会了编写更多可移植的C代码。优雅很棒,但是当它出现时,编译器会处理性能,代码应该尽可能简单和便携。

答案 6 :(得分:0)

将Fortran 77中编写的模拟(尽管是在90年代编写)移植到C / Java,因为原始版仅适用于小型数据集。经过多次解释,为什么在程序开始时将整个数据表移动到内存中,我学会了爱大O符号。

答案 7 :(得分:0)

我将一个完全用Perl编写的动态构建过程转换为一个C#/ .Net解决方案,使用了一个同事开发的工作流引擎(它仍处于测试阶段 - 所以我不得不做一些改进)。这让我有机会为构建过程添加故障安全和故障转移功能。

在您提出之前 - 否 - 无法使用microsoft workflow-foundation,因为您无法在运行时动态更改进程。

我学到了什么:

  • 讨厌Perl-developer
  • 使用wf-engine进行流程优化
  • 故障安全和故障转移策略
  • 一些C#调整;)

最后,它覆盖了来自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)中,我接近第一个里程碑。

我从中学到的东西目前是程序在开始时感觉有多简单,我试图在我不得不增加复杂性之前。

示例是我首先编写了所有功能(就像我是管理员用户),然后当它被整理出来时,添加限制的复杂性(用户级别等)