目标状态:将VB6代码移植到C#中,承担整个项目以及涉及到的所有可能的过程。
如果您不了解该领域的知识,您会采取什么方法?
几乎所有的文档都是用VB6编写的,只有遗留代码(多达100.000 - 300.000行代码和注释vb6文件,其中包含多达14.000行代码)。
发布于 2010-07-24 05:11:23
免责声明:我为大迁移工作
我们以用.NET (主要是C#)重写大型VB6/ASP/COM应用程序为生,并开发了一个软件分析和再工程工具来帮助我们做到这一点。这个工具本质上就像一个VB6/ASP/COM编译器和一个编写.NET代码的反编译器。当然,由于VB6平台与.NET有很大的不同,直接编译/反编译是不可取的,也是不可行的,所以我们的工具有一个“分析器”,它实现了各种代码重新工程算法来处理VB6 C#的不兼容性。还有一个可编程的“作者”,它允许迁移团队根据团队的需要或需要,为设置.NET代码文件、重构代码以及执行诸如用.NET类替换COM API和ActiveX控件之类的操作制定规则。
作为编译和分析代码的副产品,我们的工具生成了正在升级的整个VB6/ASP/COM系统的模型。此模型可用于生成有关系统内部结构的极其详细的报告。这些模型可以用来帮助对代码进行反向工程--如果您知道要问的正确问题,并且您需要了解问题域才能做好工作。
当然,一旦你有了构建完成的.NET,你就可以使用各种分析和代码审查工具来处理程序集。Visual Studio的一些版本有这些工具,还有一些开源工具,如FxCop、NDepends)。我还使用过一些非常棒的动态分析工具(EQUATEC Tracer)。
但最终,迁移团队将很难验证任何未知的系统。即使您停留在相同的平台上,如果您不知道如何运行应用程序以及如何设置/输入预期输入和查找/验证预期输出,您也无法证明应用程序是“正确的”。我们通常把这个问题留给客户!
如果我们为客户做验证,我们很大程度上依赖于并行测试来验证您的系统的新版本-假设我们知道如何运行遗留应用程序,我们假设给定相同的输入和用例集,它应该表现出相同的行为和产生相同的结果。我在单元测试圈子里听说过这个批准测试。
我承认我们在很大程度上依赖于这样的知识,即VB6/COM代码是对系统的数据结构和逻辑的完整、详细、正式和生产测试的描述,我们正在将这些信息通过测试和重新测试的系统转换。我们自1977年以来一直在开发编译器,我们一直在非常努力地开发这个VB6/ASP编译器,以确保我们生成的.NET代码保留了原始VB6 /ASP编译器的语义。它并不是每次都是100%的--但它一直在变得越来越近。再说一次,手工操作也不能保证第一次尝试的代码是100%正确的。
发布于 2010-07-26 16:32:35
mark关于大迁移的回答非常好,要知道还有一些竞争对手的自动化工具,它们也有很好的口碑。
https://stackoverflow.com/questions/3321448
复制相似问题