Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我们已将VB6代码迁移到.net中的C#_C#_Vb6_Vb6 Migration - Fatal编程技术网

我们已将VB6代码迁移到.net中的C#

我们已将VB6代码迁移到.net中的C#,c#,vb6,vb6-migration,C#,Vb6,Vb6 Migration,代码是使用第三方工具迁移的。该工具所不能做的事情都是由.net开发人员完成的,因此所有的编译问题都得到了解决。我的问题是,对于这种迁移活动,我们不需要为函数运行单元测试 第二,有人建议我们是否应该使用VSTS 10中的一些工具来创建此代码的UML模型,以最小化客户机可能发现的问题的风险。多麻烦啊 鉴于我们不知道原始VB6应用程序的功能,对于如何交付高质量的迁移代码,还有其他建议吗 对于这种迁移活动,我们不必为函数运行单元测试 我根本不相信新翻译的代码(机械的或其他的)。绝对需要测试 我们不知道原

代码是使用第三方工具迁移的。该工具所不能做的事情都是由.net开发人员完成的,因此所有的编译问题都得到了解决。我的问题是,对于这种迁移活动,我们不需要为函数运行单元测试

第二,有人建议我们是否应该使用VSTS 10中的一些工具来创建此代码的UML模型,以最小化客户机可能发现的问题的风险。多麻烦啊

鉴于我们不知道原始VB6应用程序的功能,对于如何交付高质量的迁移代码,还有其他建议吗

对于这种迁移活动,我们不必为函数运行单元测试

我根本不相信新翻译的代码(机械的或其他的)。绝对需要测试

我们不知道原始VB6应用程序的功能

这将使回归测试非常。。。具有挑战性的如果你不知道该怎么做,你怎么知道什么时候完成了


当然,您可以决定不对翻译后的代码进行单元测试,这样您也就不知道新的代码是如何工作的了-但不确定“unknown=unknown”是否算作“pass”。

从您的问题语气来看,您似乎知道答案!我要说的是,除了一整套回归测试之外的任何东西都会导致灾难!理想情况下,您希望对旧版本和新版本运行相同的测试集,尽管听起来您可能无法做到这一点


我诚实的回答-确保您有足够多的支持/维护开发人员随时准备解决支持问题

根据我的经验,绝大多数应用程序都提供了大量“未知”功能。毕竟,我们编写软件的原因是为了帮助我们管理信息,而管理信息的方式远远超出了我们的道德能力。随着时间的推移,我们软件的规模和复杂性不断增长,直到它包含大量“未知”功能。未知的功能可能在某一时间被知道并验证为“正确”,并且源代码详细捕获了它。然而,随着时间的推移,没有人完全记住/知道所有功能是什么,甚至不知道为什么它是“正确的”。完整的功能只被源代码“记住/知道”,团队“测试他们改变了什么”,其余的都被认为是正确的,除非出现问题。这对于多年来被许多人扩展和改变的系统来说尤其如此。当然,这会带来风险,我们可以做得更好,像TDD这样的过程和自动化单元测试的工具正在发挥作用,但对于许多旧系统来说,缺乏系统理解和不完整的测试是现实。我内心的技术理想主义者不喜欢这样,但我内心的商业现实主义者接受了这一点

尽管如此,这给迁移团队带来了一个主要问题。理论上,这些团队正在“改变一切”。在VB6到.NET的迁移中,“测试我们所更改的内容”意味着测试所有内容。哎哟此外,迁移的功能需求通常是“让它做它现在做的事情,但在新平台上。”当人们不知道/记住系统所做的一切时,这不是很有用,更不用说如何验证它是否正确。我与几位客户合作,他们拥有庞大的VB6应用程序,其中包含成百上千个LOC,或者组织成数百个表单和类,以及数千个方法、属性和事件处理程序。我确信这些应用程序包含10到数千个功能点。我想问迁移团队,如果我进入VB6并在某个地方“破坏”了一个小东西,他们需要多长时间才能找到错误。我很少得到答案

这就是我提倡使用方法论的原因。这个过程最关键的输入之一是经过生产测试的源代码。我们假设此代码是“正确的”,因为您或您的客户正在其上运行业务。源代码非常详细、正式且完整地回答了以下问题:系统做什么?在我们的方法中,迁移团队迭代地定制、校准和验证VB6源代码到完整.NET源代码的自动、系统化翻译和重新设计。我们翻译、测试、调整和重复;每次都在功能正确性和符合.NET编码标准方面提高翻译质量。验证和完善工具的功能是方法论的核心

为了验证代码质量,我们使用代码审查和“并行”测试。代码审查是通过使用eyes和其他工具(如.NET编译器、FXCop、NDependes等)检查.NET代码来完成的。我们还使用BeyondCompare之类的产品对翻译代码的连续几代进行了大量比较,以验证每个翻译调优更改都具有预期效果,并且没有不希望的副作用。并行测试就是它听起来的样子:一般的想法是在并行测试环境中运行遗留应用程序和.NET应用程序,并确保它们的结果和行为匹配。这里至少有几个挑战:

  • 当你“运行应用程序”时,你会做什么;及
  • 如何确保结果和行为匹配
  • 第一个问题通常根据测试数据、用例和自动化单元测试来回答;第二个问题的答案是查看应用程序UI以及来自两个系统的结果(数据、网页、报告)并进行比较(也称为基于批准的测试)。当然,测试工具可以大大提高效率。大规模迁移是讨论开始使用测试工具的好时机

    如果您计划迁移一个大型复杂的代码库,那么您需要计划对testi非常精明