2 Stimmen

Konzentrieren Sie sich mehr auf Unit-, Integrations- oder Akzeptanztests?

Bei den meisten Aufträgen, bei denen ich lande, gibt es entweder nur wenige oder gar keine Unit-Tests. Typischerweise sind die so genannten Unit-Tests in Wirklichkeit Integrationstests und werden nur selten vom Rechner des Entwicklers ausgeführt. Normalerweise beginne ich meine Evangelisation damit, den Unterschied zwischen den beiden zu predigen und versuche, die Leute dazu zu bringen, sehr fokussierte Unit-Tests zu schreiben und die Integrationstests für später aufzubewahren, d.h. wenn genug Leute Unit-Tests schreiben, können wir mit dem Schreiben der Integrationstests "weitermachen". Abnahme- oder Systemtests werden in der Regel manuell vom Entwickler und dann von der QA-Abteilung durchgeführt.

Meine Frage ist, wenn Sie außerhalb einer agilen Umgebung arbeiten, wie viel Aufwand stecken Sie in Unit-, Integrations- und Akzeptanztests und worin sehen Sie den größten Nutzen?

3voto

Tim Post Punkte 32750

Ich versuche, von Anfang an auf Unit-Tests zu setzen. Ich bin nicht der größte TDD-Fan der Welt, aber ich lege großen Wert auf Unit-Tests. Ich glaube nicht, dass eine magische Fee dafür sorgen wird, dass die Integrationstests mit Bravour bestanden werden, weil alle Unit-Tests funktionieren, aber es kommt dem schon verdammt nahe.

Was die Akzeptanztests angeht, so schaue ich mir etwas erst an, wenn ich sehe, dass die Unit-Tests erfolgreich sind (oder fehlschlagen, wenn sie fehlschlagen sollen). Ich kann mir nicht viele Fälle vorstellen, in denen ich ein völliges Fehlen von Unit-Tests akzeptieren würde. Was ist, wenn eine Kernlib in der Anwendung aktualisiert wird?

Viele werden argumentieren, dass Unit-Tests entwicklerzentriert sind, und das ist auch richtig so. Das Fehlen von Unit-Tests ist jedoch ein Indikator für sich selbst vor allem, wenn derjenige, der die Akzeptanztests durchführt, zufällig ein Entwickler ist :)

Edit :

Auch Integrationstests sind für mich wichtig. Wenn Integrationstests fehlschlagen (nachdem sie zuvor bestanden wurden), ist das ein deutlicher Hinweis auf eine Ausweitung des Umfangs. Wenn das passiert, muss jemand ein Zeichen setzen, bevor er es einfach behebt.

1voto

jan Punkte 273

Sehr oft geht die Antwort auf diese Frage ins Extreme. Zum Beispiel sollte man eine Abdeckung von fast 100% haben oder Unit-Tests sind dumm....

Ich glaube, dass man ein Gleichgewicht finden muss.

Verwenden Sie Unit-Tests, wenn es begründete Zweifel daran gibt, dass die Logik der Klasse versagen kann. Unit-Tests müssen für eine isolierte Klasse durchgeführt werden, was bedeutet, dass Sie wahrscheinlich Dienste nachbilden müssen, die die Klasse verwendet. Auf diese Weise können Sie sicher sein, dass Sie Refactoring durchführen können, da Unit-Tests sicherstellen, dass die Klasse immer noch wie erwartet funktioniert.

Integrationstests sind notwendig, um sicherzustellen, dass Ihre Anwendung überhaupt funktioniert. Sie können eine Reihe von Unit-Tests haben, aber das bedeutet nicht, dass Ihre Anwendung korrekt funktioniert.

Ich stimme Ihnen völlig zu, was die Abnahmeprüfung betrifft. Machen Sie sie am Ende (des Sprints) und teilweise müssen sie manuell durchgeführt werden.

1voto

Epaga Punkte 36700

Ich habe den Vergleich gehört, dass Unit-Tests wie das Testen der einzelnen Ziegelsteine in Ihrer Mauer sind und Funktions-/Integrationstests wie das Testen der gesamten Mauer auf Stabilität.

Die Unit-Tests sind für die Entwickler notwendig, um sicherzustellen, dass die Klassen das tun, was sie tun sollen.

Die Funktions-/Integrationstests sind notwendig, um sicherzustellen, dass das "große Ganze", d. h. die tatsächliche Bereitstellung bestimmter Funktionen, nicht verfehlt wird.

Also IMHO, beide sind absolut notwendig und aus ROI-Sicht wäre es eine schlechte Idee, einen von ihnen wegzulassen.

0voto

Alexander Punkte 3686

Ich denke, man kann es nicht verwechseln. Jeder der Tests, die Sie beschrieben haben, hat ein anderes Ziel.

Unit Tests sind für Entwickler gedacht. Sie schreiben einen Unit-Test vor oder parallel zur Implementierung eines Moduls, um sicherzustellen, dass es funktioniert oder alle Schnittstellen und Anforderungen erfüllt sind.

Ein Integrationstest wird nach der Entwicklung vom Testzentrum durchgeführt. Man testet nicht ein einzelnes Modul wie bei einem Unit-Test während der Entwicklung. Der Integrationstest deckt die Interaktion zwischen mehreren Modulen ab.

Bei einem Abnahmetest prüft der Kunde oft selbst, ob alle Anforderungen erfüllt und die Funktionen wie angegeben implementiert sind.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X