我们需要在64位Windows中测试32位软件吗?


31

我正在软件开发团队中担任软件开发人员。我已经在同一个项目上工作了三年。该软件是.NET 4中基于32位桌面的C#应用​​程序。Windows7是我们的目标平台(直到去年我们都必须支持Windows XP)。该软件与编写了定制驱动程序的各种定制硬件进行通信。硬件制造和驱动程序软件由我们的客户编写。当然,对于32位和64位Windows,有不同的驱动程序。

在系统测试阶段,我们将同时在32位和64位Windows 7中执行所有/大多数测试用例。我不记得我们的软件中是否存在只有一种Windows风格的错误。有了这种经验,我开始怀疑,我们真的需要在64位Windows上测试32位软件吗?

行业标准是什么?


1
您的.NET应用程序是否对本机DLL有任何依赖关系?我只在一个平台上进行测试就被咬了几次,主要是因为我忘记了将x86本机DLL与我的软件以及x64 DLL打包在一起。如果您开始使用新的第三方库,则该库也可能会尝试在后台加载本机DLL,直到它在x86 PC上崩溃后,您才会注意到。我还必须编写代码,根据我的.NET应用程序是否在64位模式下运行来选择要使用的DLL,并且还需要对该代码进行测试。
菲尔(Phil)

@Phil:点指出。DLL确实使用了很多外部库。我相信所有这些DLL都是针对x86编译的。应用程序本身不依赖于本机DLL,但是会调用本机win32 API。
Donotalo

Answers:


31

我们在64位Windows上运行32位软件时遇到的大多数错误都与软件的位置(Program Files (x86)而不是Program Files),注册表项的位置(某些在Wow6432Node中找到)有关。我们遇到这些问题主要是因为我们需要与其他软件(也是32位)进行通信,因此我们需要在32位和64位上测试该软件...

当您没有这些问题时,我相信在以32位模式进行显式编译时不在两个平台上进行测试都是很安全的。当以32位编译时,.NET运行时将以32位模式运行所有内容,并且应与32位平台上的32位模式相同。

根据64位应用程序MSDN),32位应用程序以Wow64模式运行,而运行32位应用程序(MSDN)更详细地说明了此模式。


您是说如果在64位操作系统上运行32位软件,则该OS上的.NET将以32位模式运行该软件-与在.NET中的32位OS中运行该软件相同?有文件吗?
Donotalo 2014年

4
@Donotalo:您应该在Visual Studio配置管理器(或每个项目的编译设置)中使用“ x86”,“ x64”和“任何CPU”选项来告知自己有关基本开关的信息。当您找到该开关时,F1可能是您的朋友。
布朗

文档已添加到我的答案中
David Perfors 2014年

1
我们遇到的最大问题是与其他32位库一起运行,.NET在64位计算机上运行时根本无法加载它们。
gbjbaanb 2014年

1
@gbjbaanb:您肯定是说,当您忘记使用“ x86”作为平台时。
布朗

23

硬件制造和驱动程序软件由我们的客户编写。当然,有适用于32位和64位Windows的不同驱动程序。

因此,在32位Windows上,您的软件与一个驱动程序通信,而在64位Windows上,它与另一驱动程序通信?让我们假设这些驱动程序不时有新版本。因此,当您仅在32位Windows上测试软件时,您将无法确定64位驱动程序不会有任何差异,这将导致您的软件+ 64位驱动程序的组合失败。从您的用户的角度来看,应该归咎于谁(您或驱动程序的作者)无关紧要,他们所看到的只是一个无法正常工作的系统。因此,即使您的代码没有错误,测试也可能会发现64位驱动程序中的错误,而发现此类错误可能会帮助您采取正确的措施(例如将错误报告发送给驱动程序的作者)。

当然,当您使用这两种驱动程序已有多年,并且对行为完全相同很有信心时,可以遵循@DavidPerfors答案中的参数跳过对一个平台的测试。作为一种折衷,只有在有新的驱动程序版本可用时,才可以在64位Windows上运行测试。实际上,这取决于驱动程序的复杂性,您对驱动程序的经验和信心。

需要考虑的其他一些事项:

  • 您的用户群最常使用哪种操作系统?32位或64位Windows?如果您决定仅在一种平台上进行测试,请选择用户最常使用的平台。
  • 当新发行的软件无法在较少使用的平台上运行时,其严重程度如何?例如,您的客户能否立即退后一步并安装以前的工作版本?这样做给他们带来的不便还是真正的经济损失?如果是前者,那么仅在一个平台上进行测试可能很好,如果是后者,则显然不行。

16

开明的质量检查圈子中的默认假设是“如果没有测试,那就行不通”。

实际上,以几乎相同的方式争取应用程序工程师可能希望对所有内容进行单元测试的目标通常是无法实现的。但他们不相信会达到目标并按计划发布。

但是,您的问题只能由销售和营销或与之结合才能回答。您向他们提供测试成本,并且他们提供了市场收益的分析。如果估计双方双方都足够准确,答案是简单

if B > C:
    test_32bit_version()

根据我的经验,每个人的成本估算都不准确。至于等式的另一面,迪尔伯特曾经用“我只是问我的猫咪咪咪”来嘲弄那里的决策。为了做得更好,他们需要接受人类学领域方法方面的培训。


在经过质量检查的质量检查圈子中,默认的假设是“如果没有测试,那就行不通”。-并且操作界的默认假设是“如果您没有对其进行测试,那就准备好被愤怒的系统管理员像狂犬一样追捕”。很难测试所有场景,但是最好尝试测试所有合理的场景。事后评估最终决定花费在测试系统上的时间正常工作是浪费时间,这是非常罕见的。
罗伯·摩尔

6

在Windows 7及更高版本的所有Windows安装中以及99%的Vista中,有99%是64位的,为什么您还要考虑不对该平台进行测试?
除非您是专门为非常有限的一组用户而设计的,否则您将不费吹灰之力,因为您知道他们正在使用32位Windows,并且在产品生命周期内将继续这样做。

是的,请测试64位问题。实际上,它是在64位平台上开发的,并且可能为过去6-8年左右未升级到新计算机和操作系统的少数客户提供标准的64位版本和32位编译版本的选项。 。


1
我大部分都同意,但是同时提供32位和64位版本会增加复杂性,如果没有基于性能或功能的良好原理,可能不应该这样做。

4
我了解需要提供32位二进制文​​件。我只是不知道他是否应该在没有令人信服的理由的情况下费心提供本机的64位。

1
如果我要在2014年在这里发布桌面软件,那么我可能只会发布64位二进制文​​件。还记得90年代人们从DOS过渡到Windows 95的时候吗?那时我们有一个类似的论点-显然DOS被遗忘了,就像现在的32位(至少在台式机上,不是嵌入式或移动式)一样。

4
我必须问@jwenting。您是从哪里获得的99%?您可以对此进行改进并发布源代码吗?
马拉沃斯2014年

1
是的,我完全不相信这99%。商业世界仍然有很多 32位Windows安装,是在未更新的旧计算机之间(从早期开始运行Win7)之间,或者是出于对兼容性的担心。“大多数”可能是64位,但是如果没有很好的证据,我不太可能相信任何很高的百分比。
2014年

2

根据我的经验,我会在尽可能多的不同Windows设置上测试任何安装程序,这些安装程序最有可能在不同系统上失败。

否则,从您对给定软件的经验中可以知道,错误极不可能出现在32位或64位上,并且您可能会冒一些一定的风险。

首先,您应该有很多测试周期,并且随着即将交付,在以后的周期之间几乎没有代码更改。您可以随时保存创建更多的测试用例,和/或允许更多(因此更短)的周期,从而提供更快的反馈。(花时间测试X的风险可能会比不测试Y的风险大,因为您测试X的过多。)

因此

  • 尝试对进行后续测试周期所用的“其他问题”进行测试。
  • 如果您知道开发人员使用的“位数”,请从对另一位进行测试开始。
  • 将测试用例划分为“位数”以覆盖每个
  • 但是在每个测试周期的“ binnes”之间交换它们。

2

不。同样,当FDA在老鼠和大鼠上完成对新药的测试后,他们跳过了对猴子的测试,只卖给人类食用。

</ sarcasm>

是的,是的,是的,是的。如果您不测试所有可能的平台,那么您的软件将无济于事。事情总是不同的,并且在项目期间设计者/编码人员头脑中的假设通常只能很接近地模拟现实生活。因此,请测试您的软件。请。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.