Müssen wir 32-Bit-Software in 64-Bit-Windows testen?

31

Ich arbeite in einem Softwareentwicklungsteam als Softwareentwickler. Ich arbeite jetzt seit drei Jahren am selben Projekt. Die Software ist eine 32-Bit-Desktop-basierte C # -Anwendung in .NET 4. Unsere Zielplattform in Windows 7 (wir mussten Windows XP bis zum letzten Jahr unterstützen). Die Software kommuniziert mit verschiedenen benutzerdefinierten Hardwarekomponenten, für die benutzerdefinierte Treiber geschrieben wurden. Die Hardwareherstellung und Treibersoftware wird von unserem Kunden geschrieben. Es gibt natürlich unterschiedliche Treiber für 32-Bit- und 64-Bit-Windows.

Während unserer Systemtestphase führen wir alle / die meisten Testfälle sowohl in 32-Bit- als auch in 64-Bit-Windows 7 aus. Ich kann mich nicht erinnern, ob in unserer Software Fehler aufgetreten sind, die nur in einer Windows-Version vorhanden sind. Nach dieser Erfahrung habe ich mich gefragt, ob wir wirklich 32-Bit-Software unter 64-Bit-Windows testen müssen.

Was ist der Industriestandard?

Donotalo
quelle
1
Hat Ihre .NET-Anwendung Abhängigkeiten von nativen DLLs? Ich habe ein paar Mal nur auf einer Plattform getestet, hauptsächlich, weil ich vergessen habe, die nativen x86-DLLs mit meiner Software zusammen mit den x64-DLLs zu packen. Wenn Sie anfangen, eine neue Bibliothek eines Drittanbieters zu verwenden, versucht diese Bibliothek möglicherweise auch, native DLLs im Hintergrund zu laden, und Sie werden es erst bemerken, wenn sie auf einem x86-PC abstürzt. Ich musste auch Code schreiben, der auswählt, welche DLLs verwendet werden sollen, je nachdem, ob meine .NET-App im 64-Bit-Modus ausgeführt wird oder nicht, und dieser Code muss ebenfalls getestet werden.
Phil
@ Phil: Punkt notiert. Die DLL verwendet viele externe Bibliotheken. Ich glaube, alle diese DLLs sind für x86 kompiliert. Die Anwendung selbst ist nicht von nativen DLLs abhängig, ruft jedoch die native Win32-API auf.
Donotalo

Antworten:

31

Die meisten Fehler, die wir beim Ausführen von 32-Bit-Software unter 64-Bit-Fenstern festgestellt haben , haben mit dem Speicherort der Software ( Program Files (x86)anstelle von Program Files) und dem Speicherort der Registrierungsschlüssel zu tun (einige wurden in Wow6432Node gefunden). Wir hatten diese Probleme hauptsächlich, weil wir mit anderer Software (auch 32-Bit) kommunizieren mussten und deshalb die Software sowohl auf 32-Bit als auch auf 64-Bit testen mussten ...

Wenn Sie diese Probleme nicht hatten, ist es meiner Meinung nach ziemlich sicher, nicht auf beiden Plattformen zu testen, wenn Sie explizit im 32-Bit-Modus kompilieren. Bei der 32-Bit-Kompilierung führt die .NET-Laufzeitumgebung alles im 32-Bit-Modus aus und sollte auf 32-Bit-Plattformen genauso funktionieren wie der 32-Bit-Modus.

Gemäß 64-Bit-Anwendungen ( MSDN ) werden 32-Bit-Anwendungen im Wow64-Modus ausgeführt, und unter Ausführen von 32-Bit-Anwendungen (MSDN) wird dieser Modus ausführlicher erläutert.

David Perfors
quelle
Wollen Sie damit sagen, dass bei einer 32-Bit-Software unter 64-Bit-Betriebssystemen das .NET unter diesem Betriebssystem die Software im 32-Bit-Modus ausführt - genau wie bei einer Software unter 32-Bit-Betriebssystemen in .NET? Gibt es Unterlagen?
Donotalo
4
@Donotalo: Sie sollten sich über den grundlegenden Switch in Ihrem Visual Studio-Konfigurationsmanager (oder über die Kompilierungseinstellungen jedes Projekts) mit dem Namen "platform" mit den Optionen "x86", "x64" und "Any CPU" informieren. Als Sie diesen Schalter gefunden haben, ist F1 wahrscheinlich Ihr Freund.
Doc Brown
Zu meiner Antwort wurde eine Dokumentation hinzugefügt
David Perfors
1
Das größte Problem, das wir hatten, war das Ausführen mit anderen 32-Bit-Bibliotheken. .NET konnte sie auf einem 64-Bit-Computer einfach nicht laden.
gbjbaanb
1
@gbjbaanb: du meintest sicherlich, als du vergessen hast "x86" als plattform zu verwenden.
Doc Brown
23

Die Hardwareherstellung und Treibersoftware wird von unserem Kunden geschrieben. Es gibt natürlich verschiedene Treiber für 32-Bit- und 64-Bit-Windows.

Unter 32-Bit-Windows kommuniziert Ihre Software mit einem Treiber und unter 64-Bit-Windows mit einem anderen? Nehmen wir an, dass es von Zeit zu Zeit neue Versionen dieser Treiber gibt. Wenn Sie Ihre Software also nur unter 32-Bit-Windows testen, können Sie nicht sicher sein, dass es keine Unterschiede im 64-Bit-Treiber gibt, die dazu führen, dass die Kombination von Software + 64-Bit-Treiber fehlschlägt. Und aus der Sicht Ihrer Benutzer spielt es keine Rolle, wer die Schuld trägt (Sie oder der Autor des Treibers), alles, was sie sehen, ist ein nicht funktionierendes System. Selbst wenn Ihr Code fehlerfrei ist, kann ein Test einen Fehler im 64-Bit-Treiber aufdecken, und das Auffinden eines solchen Fehlers kann Ihnen dabei helfen, die richtigen Maßnahmen zu ergreifen (wie das Senden eines Fehlerberichts an den Autor des Treibers).

Wenn Sie diese beiden Treiber jahrelang verwendet haben und sich sicher sind, dass das Verhalten genau gleich ist, können Sie natürlich die Tests für eine Plattform überspringen, indem Sie den Argumenten in der Antwort von @ DavidPerfors folgen. Als Kompromiss können Sie Tests unter 64-Bit-Windows nur ausführen, wenn eine neue Treiberversion verfügbar ist. Tatsächlich hängt dies von der Komplexität der Fahrer, Ihrer Erfahrung und Ihrem Vertrauen in sie ab.

Einige zusätzliche Dinge zu beachten:

  • Welchen Betriebssystemtyp verwendet Ihre Benutzerbasis am meisten? 32 Bit oder 64 Bit Windows? Wenn Sie nur auf einer Plattform testen möchten, wählen Sie die Plattform aus, die Ihre Benutzer am häufigsten verwenden.
  • Wie schwerwiegend ist es, wenn eine neue Version der Software auf einer weniger häufig genutzten Plattform nicht funktioniert? Können Ihre Kunden beispielsweise sofort einen Schritt zurücktreten und die vorherige Arbeitsversion installieren? Haben sie dadurch nur einige Unannehmlichkeiten oder einen echten finanziellen Verlust? Wenn es das erstere ist, kann das Testen auf nur einer Plattform in Ordnung sein, wenn es das letztere ist, offensichtlich nicht.
Doc Brown
quelle
16

Die Standardannahme in aufgeklärten QA-Kreisen lautet "Wenn Sie es nicht getestet haben, funktioniert es nicht".

In der Praxis ist dies in der Regel ein unerreichbares Ziel, um das sich Anwendungsingenieure auf die gleiche Weise bemühen, wie sie Unit-Tests für alles durchführen möchten. aber sie glauben nicht, dass sie es jemals erreichen und pünktlich veröffentlichen werden.

Ihre Frage kann jedoch nur durch oder in Verbindung mit Vertrieb und Marketing beantwortet werden. Sie stellen ihnen Testkosten zur Verfügung und analysieren den Marktnutzen. Wenn Schätzungen auf beiden Seiten ausreichend genau wären, wäre die Antwort einfach

if B > C:
    test_32bit_version()

Nach meiner Erfahrung sind die Kostenschätzungen für alle ungenau. Was die andere Seite der Gleichung angeht, so parodierte Dilbert einmal die Entscheidungsfindung dort mit "Ich habe gerade meine Katze gefragt, Fäustlinge". Um es besser zu machen, müssten sie in anthropologischen Feldmethoden geschult werden.

msw
quelle
Die Standardannahme in aufgeklärten QA-Kreisen lautet "Wenn Sie es nicht getestet haben, funktioniert es nicht". - und die Standardannahme in Operationskreisen ist "Wenn Sie es nicht getestet haben, dann seien Sie bereit, wie ein tollwütiger Hund von wütenden Sysadmins gejagt zu werden". Es ist schwierig, alle Szenarien zu testen, aber es ist eine gute Idee, alle vernünftigen Szenarien zu testen. Es kommt sehr selten vor, dass ein Post-Mortem-Projekt entscheidet, dass die Zeit, die für das Testen eines Systems aufgewendet wurde, Zeitverschwendung war.
Rob Moir
6

Angesichts der Tatsache, dass 99% aller Windows-Installationen von Windows 7 und höher und auch ein Großteil von Vista 64-Bit-Versionen sind, warum sollten Sie überhaupt in Betracht ziehen, diese Plattform nicht zu testen?
Es ist nur ein Kinderspiel, es sei denn, Sie machen es speziell für eine sehr begrenzte Gruppe von Benutzern, von denen Sie wissen, dass sie 32-Bit-Windows verwenden, und dies wird auch für die Lebensdauer Ihres Produkts so bleiben.

Also ja, auf 64-Bit-Probleme testen. In der Tat auf 64-Bit-Plattformen entwickeln und wahrscheinlich eine 64-Bit-Version als Standard mit einer kompilierten 32-Bit-Version als Option für die wenigen Kunden bereitstellen, die in den letzten 6-8 Jahren kein Upgrade auf einen neuen Computer und ein neues Betriebssystem durchgeführt haben .

jwenting
quelle
1
Ich stimme dem größtenteils zu, aber die Bereitstellung von 32- und 64-Bit-Versionen erhöht die Komplexität und sollte wahrscheinlich nicht ohne eine gute, auf Leistung oder Funktionalität basierende Begründung erfolgen.
4
Ich verstehe die Notwendigkeit, 32-Bit-Binärdateien bereitzustellen. Ich weiß nur nicht, ob er sich die Mühe machen soll, native 64-Bit-Versionen ohne zwingenden Grund bereitzustellen.
1
Wenn ich 2014 hier Desktop-Software veröffentlichen würde, würde ich wahrscheinlich nur 64-Bit-Binärdateien veröffentlichen. Erinnern Sie sich noch an die 90er Jahre, als die Leute von DOS auf Windows 95 umstiegen? Wir hatten damals ein ähnliches Argument - und DOS blieb eindeutig im Staub, genau wie jetzt 32-Bit (zumindest auf dem Desktop, nicht eingebettet oder mobil).
4
Ich muss @jwenting fragen. Woher hast du das es 99% ist? Könntest du das verbessern und die Quelle posten?
Malavos
1
Ja, ich glaube den 99% überhaupt nicht. In der Geschäftswelt gibt es immer noch viele 32-Bit-Windows-Installationen zwischen alten Rechnern, die nicht aktualisiert wurden (unter Win7 von Anfang an) oder aus Angst vor Inkompatibilitäten. "Die Mehrheit" sind wahrscheinlich 64-Bit, aber ich würde kaum einen sehr hohen Prozentsatz ohne sehr gute Beweise glauben.
Joe
2

Ich würde jeden Installer auf so vielen verschiedenen Windows-Setups wie möglich testen, da die Installer meiner Erfahrung nach wahrscheinlich auf verschiedenen Systemen fehlschlagen.

Ansonsten, wie Sie wissen aus Ihrer Erfahrung mit der gegebenen Software sind Fehler sehr unwahrscheinlich zu nur auf 32-Bit zeigen oder 64-Bit, und Sie können einige kalkuliertes Risiko nehmen.

Erstens sollten Sie viele Testzyklen mit sehr wenig Code haben, der sich zwischen den späteren Zyklen ändert, je näher Sie dem Versand kommen. Wann immer Sie sparen können, können Sie mehr Testfälle erstellen und / oder mehr (und damit kleinere) Zyklen zulassen, um schnelleres Feedback zu erhalten. (Das Risiko, Zeit damit zu verbringen, X zu testen, ist möglicherweise größer als das Risiko, Y nicht zu testen, da Sie X zu häufig testen.)

Deshalb

  • Versuchen Sie, die „andere Bissigkeit“ zu testen, die Sie für den weiteren Testzyklus verwendet haben.
  • Wenn Sie wissen, welche "Bitness" Ihr Entwickler verwendet, beginnen Sie mit dem Testen einer anderen.
  • Teilen Sie die Testfälle auf die "Bitness" auf, um eine Berichterstattung zu erhalten
  • Tauschen Sie sie jedoch bei jedem Testzyklus zwischen den „Klassen“ aus.
Ian
quelle
2

Nee. Wenn die FDA damit fertig ist, neue Medikamente an Mäusen und Ratten zu testen, überspringen sie die Tests an Affen und verkaufen sie nur für den menschlichen Verzehr.

</ sarkasmus>

Ja ja ja ja ja. Wenn Sie nicht jede Plattform testen, die Sie möglicherweise können, ist Ihre Software nur traurig. Die Dinge sind immer anders und die Annahmen im Kopf des Designers / Programmierers während des Projekts kommen der Modellierung des realen Lebens normalerweise nur annähernd nahe. Testen Sie also bitte Ihre Software. Bitte.

kmort
quelle