2009-04-16 10 views
3

Nur neugierigQ/A, baut Veröffentlichung vs Debug baut und Assertions

Beim Loslassen Software Q/A baut, bevorzugen Sie immer die "RELEASE" Version zu verwenden, oder verwenden Sie manchmal die DEBUG-Version?

Hier ist mein Rätsel: Wir verwenden Asserts, um für Bedingungen zu fangen, die nie passieren sollten.

Auf der einen Seite kann es für Q/A hilfreich sein, unsere Software mit den aktivierten Assertions zu testen, damit sie, wenn sie ein Szenario erstellen können, das eine Assertion auslöst, es uns melden können.

Auf der anderen Seite besteht immer das Risiko, dass ein Entwickler eine Assertion so codiert hat, dass sie das Verhalten des Codes ändert. In diesem Fall sollte Q/A den a build mit deaktivierten Assertions testen.

Bis heute haben wir immer Q/A auf unseren Relesae-Builds ausgeführt, da dies der Code war, der ausgeliefert werden würde. Ich denke jedoch darüber nach, ein Muster zu versuchen, bei dem unsere wirklich frühen Releases für Q/A mit bestätigten Assertionen ausgehen würden. Wenn wir uns dem Versand nähern, werden wir ihnen mitteilen, dass ihre Builds deaktiviert sind.

Was denkst du?

+0

Seitennotiz: Für diejenigen, die TDD tun, finden Sie, dass Einheitentests die Notwendigkeit oder den Nutzen von Behauptungen in Ihrem Code beseitigen? – JMarsch

+0

Sogenannte defensive Programmierung macht, wenn sie gründlich verwendet wird, einige grundlegende Tests etwas veraltet. Noch richtiges TDD würde erfordern, zuerst die Tests zu schreiben, die irgendeine Ausnahme in jenen Fällen erwarten (wie ArgumentOutOfRangeException etc.). – Lucero

+1

Ich stimme der defensiven Programmierung zu, und wir tun das - null überprüft Reichweitenüberprüfungen, etc. Es gibt jedoch einige Arten von Überprüfungen, die teuer zu machen sind, und Bedingungen abdecken, die nur passieren könnten, wenn einer unserer Programmierer ein Fehler. Wir verwenden gerne Behauptungen für diese Bedingungen. – JMarsch

Antwort

3

Wir geben beide zu Q/A frei, und die Testdurchläufe sind auf beiden komplett. Wenn Sie sich für automatisierte Tests entscheiden, wird dies zu einem Problem, wenn Sie zusätzliche Hardware für die Tests benötigen.

Release-Versionen müssen getestet werden, da sie die tatsächlichen Kunden verwenden. Debug-Versionen enthalten Zusatzbestätigungen/Validierungen/Tracing/etc., Die unglaublich nützlich sind, um nicht-offensichtliche Fehler zu finden.

0

Wir liefern Release-Builds mit Debug-Symbolen, so dass die Leistung stimmt (umfangreiche Verwendung von Debug-Ausgaben und Assertions kann die Vorgänge ein wenig verlangsamen), aber sie melden dennoch bedeutsame Stack-Traces, wenn eine Ausnahme auftritt.

Für Ausnahmen haben wir die allgemeine Regel nur Ausnahmen abzufangen, mit denen wir umgehen können, so dass sie in QA auftauchen, wenn an etwas nicht gedacht wurde. Catch-All sind generell in unserer Firma verboten.

1

Debug-Builds für QA in frühen Entwicklungsstadien zu verwenden und später auf Release-Builds umzustellen ist genau das, was wir auch tun.

1

Ich würde definitiv befürworten, QA-Überprüfung nicht nur die Releases, die an den Kunden gehen, sondern auch einige Zwischen-Builds, vielleicht alle zwei Wochen oder einmal im Monat.

Dies entspricht dem Prinzip, Ihr Produkt so früh wie möglich im Entwicklungsprozess zu prüfen. Wenn Sie es nur tun, wenn Sie eine Version veröffentlichen, tun Sie es zu spät.

Und ich würde ihnen die Debug-Build, mit aktiviert für diese frühen Tests geben. Wenn Sie im Fehlercode eine Bestätigung haben, liegt ein Fehler vor. Entweder ist der Code falsch oder die Assert. In beiden Fällen möchten Sie, dass QA dies testet.

1

Ich auch auf Debug früh/Release spät; Die offizielle Politik meines früheren Arbeitgebers (manchmal verletzt, aber nicht von mir) bestand darin, Debug-Builds bis zur Beta-Version zu testen, und Release-Builds danach. Es lohnt sich natürlich, Debug-Builds gelegentlich bis zum Versand auszuführen, aber eine unglückliche politische Realität ist, dass viele Programm-Manager keinen Bug haben, der behoben wird, wenn sie gegen einen Debug-Build berichtet werden.