首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不具备领域知识的逆向工程VB6代码的最佳实践方法

不具备领域知识的逆向工程VB6代码的最佳实践方法
EN

Stack Overflow用户
提问于 2010-07-24 02:57:27
回答 2查看 2.4K关注 0票数 3

目标状态:将VB6代码移植到C#中,承担整个项目以及涉及到的所有可能的过程。

如果您不了解该领域的知识,您会采取什么方法?

几乎所有的文档都是用VB6编写的,只有遗留代码(多达100.000 - 300.000行代码和注释vb6文件,其中包含多达14.000行代码)。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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%正确的。

票数 6
EN

Stack Overflow用户

发布于 2010-07-26 16:32:35

mark关于大迁移的回答非常好,要知道还有一些竞争对手的自动化工具,它们也有很好的口碑。

  • Artinsoft的VB Upgrade Companion
  • Francesco Balena的VB Migration Partner
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3321448

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档