Was sind die Vor- und Nachteile der manuellen Unit-Tests gegenüber dem automatisierten Unit-Testing?

8

Kann ich die Vor- und Nachteile von Manuelle Einheitentests mit dem Automatisierten Prozess vergleichen.

    
Debajyoti 01.06.2010, 08:46
quelle

3 Antworten

14

Seltsame Frage - Unit Testing soll automatisch, wiederholbar und einfach zu bedienen sein. Für viele (auch für mich) ist "manual unit test" ein Widerspruch in sich.

Manuelles Testen kann in solchen Fällen nützlich sein, in denen man keine automatisierten Tests durchführen kann. Diese liegen typischerweise nicht auf dem Einheitentestniveau, sondern höher - z.B. Integration, GUI, Stress etc. Tests.

Mit Komponententests testen Sie kleine Teile Ihres Codes (normalerweise einzelne Methoden / Klassen) gleichzeitig. Die Tests sind selbst in Code geschrieben, so dass sie (fast immer) automatisch von einem Unit-Testing-Framework ausgeführt werden können.

Update: Jetzt, da Sie Ihrer Frage einen konkreteren Kontext geben, ist es einfacher, eine konkrete Antwort zu geben: -)

Ich bin überzeugt, dass automatisierte Komponententests sich während der gesamten Laufzeit eines SW-Projekts praktisch immer amortisieren. Das Einrichten ist teurer als das manuelle Testen, aber je mehr Sie es ausführen, desto mehr Zeit sparen Sie - und desto früher erhalten Sie Feedback darüber, wo Ihr Code durch neue Änderungen unterbrochen wird.

Legacy-Code mit Komponententests abzudecken, ist definitiv nicht einfach, aber wenn das Produkt für Ihr Unternehmen wertvoll ist und voraussichtlich noch jahrelang Bestand haben wird, ist es immer noch eine würdige Anstrengung. Besonders, da ein Produktionssystem im wirklichen Leben die erwartete Lebensdauer übertrifft.

Ein Aspekt ist, dass Sie "versuchen, alle von uns geschriebenen Codepfade zu überprüfen" - mit automatisierten Unit-Tests in Kombination mit einem Code-Coverage-Tool, das Sie automatisch sehen können - oft direkt in Ihrer IDE, wenn das Coverage-Tool integriert ist Nun, welche Code Pfade sind nicht durch Ihre neuesten Unit-Tests abgedeckt.

Ich empfehle Effektiv mit Legacy-Code - es enthält a Viel wertvolles Wissen darüber, wie man Komponententests für verschlungenen, schlecht geschriebenen Legacy-Code schreibt.

    
Péter Török 01.06.2010, 08:48
quelle
4

"Manual Unit Testing" ist ziemlich unmöglich. Komponententests sind definiert als isolierte Tests von kleinen Codeeinheiten. Sie können das nicht wirklich manuell tun.

Wenn Sie jetzt von Integrationstests sprechen, ist das eine andere Sache:

Pro manuelle Integrationstests:

  • Tester sind billiger als Entwickler
  • Tester können die Tests intelligent an Änderungen in der Anwendung anpassen - sie sind nicht so spröde wie automatische Tests
  • Tester können Bugs erkennen, die ein automatisierter Test möglicherweise nicht erkennt (z. B. fehlende oder falsche Werte, für die nicht explizit getestet wird, oder Layoutprobleme)
  • Erfordert keine zusätzliche Testsoftware, die teuer sein kann und / oder viel Zeit zum Lernen braucht
  • Immer möglich; Es gibt keine technischen Voraussetzungen, die Sie erfüllen müssen
  • Du kannst einfach anfangen; Die anfänglichen Kosten für einen einzelnen Test sind viel niedriger als für die Einrichtung und Implementierung eines automatisierten Tests.

Con manuelle Integrationstests:

  • Du musst jedes Mal einen Menschen bezahlen, wenn du sie tust. Auf lange Sicht ist das sehr sehr teuer.
  • Komplette Regressionstests nach Fehlerbehebungen sind grundsätzlich nicht möglich (zu teuer).
  • Dies bedeutet, dass Sie sehr vorsichtig mit Veränderungen im späten Entwicklungszyklus und großen Veränderungen im Allgemeinen sein müssen. Kein ständiges Refactoring - besser mit schlechtem Code leben als katastrophale Nebenwirkungen riskieren.
  • Sie müssen sehr sorgfältig planen, wenn Sie die Tests durchführen, um das maximale Preis-Leistungs-Verhältnis zu erhalten. Bis zu einem gewissen Grad müssen Sie Ihre Entwicklungspraktiken entsprechend anpassen.

Alles in allem ist es das Beste, beide manuelle und automatisierte Integrationstests zu haben; Diese können sich manchmal gut ergänzen, da einige Dinge tatsächlich einfacher automatisiert zu testen sind, während andere überhaupt nicht automatisiert werden können.

    
Michael Borgwardt 01.06.2010 09:25
quelle
1

Ich denke, dass die einzige wirkliche Antwort auf Ihre Frage ist, spielt keine Rolle, weil Sie beide haben müssen.

Mit automatisierten Komponententests können Ihre Entwickler Tests programmieren, die den Code automatisch nach ihrem Verständnis der Spezifikationen validieren. Da sie automatisiert sind, können sie jedes Mal mit wenig oder keiner Variation wiederholt werden. Per Definition werden diese Komponententests wissen, wie die Software funktioniert, und können daher als white box testing betrachtet werden - die Tests kennen einige, wenn nicht alle zugrunde liegenden Codes .

Manuelles Testen wird andererseits Probleme aus Sicht der Benutzer aufdecken. Sie können herausfinden, welche Fehler von Entitäten auftreten können, die nicht mit dem zugrunde liegenden Code und der zugrunde liegenden Struktur vertraut sind, sowie bei Problemen mit der Benutzerfreundlichkeit Ihres Programms. Dies wird als Blackbox-Test betrachtet.

    
Jon Limjap 01.06.2010 09:17
quelle

Tags und Links