Kann Unit-Test-Software verwendet werden, um sich selbst zu testen?

8

QUnit bewirbt sich auf seiner Webseite wie folgt:

... in der Lage, jeden generischen JavaScript-Code zu testen, auch sich selbst!

Können Sie wirklich Unit-Testing-Software verwenden, um sich selbst zu testen? Würden Fehler in der Software nicht bedeuten, dass die Ergebnisse unzuverlässig sind?

JJJ
quelle
2
Ist das wirklich ein Problem, das Sie lösen möchten? Oder möchten Sie eine Debatte über Theorie beginnen?
Jim G.
8
@ JimG. Ich bin mir ziemlich sicher, dass diese Frage eine endgültige, nicht umstrittene Antwort hat.
JJJ

Antworten:

16

Ja, kann es. JUnit verfügt über eine umfangreiche Testsuite, um seine eigenen Funktionen zu testen und einen der Autoren zu fragen, die Ihnen gefallen. Sie werden Ihnen mitteilen, dass dies für ihre Produktivität bei der Erweiterung des Projekts von entscheidender Bedeutung ist. Wahrscheinlich machen die meisten Testwerkzeuge dasselbe.

Der Trick besteht darin , dass es keine besondere Notwendigkeit besteht , für einen Test einer neuen Funktion tatsächlich die neue Funktion zu verwenden selbst - es hat nur zu trainieren es und das Ergebnis zu testen. Auf diese Weise kann das Vertrauen in einen Teil der Funktionalität eines Systems verwendet werden, um das Vertrauen in einen viel größeren Teil herzustellen. Dies ähnelt der Art und Weise, wie selbsthostende Compiler gebootet werden, und ist eine grundlegende Technik in der Computertheorie.

Kilian Foth
quelle
Das Beispiel für das Schreiben eines
Testframeworks
7

Kent Becks Buch "Test Driven Development By Example" macht genau das: Als Beispiel für TDD bootet er ein Test-Framework, das von Anfang an verwendet wird, um sich selbst zu entwickeln.

Frank Shearar
quelle
Vielleicht ist dies das Buch, auf das ich verweisen wollte, nicht Clean Code ... zu viele Bücher, zu wenig Gedächtnis.
CaffGeek
1
+1 für Bootstraping, das für Test-Frameworks genauso relevant ist wie für Compiler, siehe auch Hundefutter .
Mark Booth
3

Sie haben Recht, Fehler in der Software bedeuten, dass die Ergebnisse unzuverlässig sind. Es gibt jedoch eine Möglichkeit, dies zu umgehen und eine zuverlässige Testsuite zu erstellen.

Die Idee ist, ein kleines Testgeschirr zu bauen, das die grundlegende "Kern" -Funktionalität jeder Komponente des Testsystems testet (normalerweise besteht es aus mindestens einem Framework und einem Runner). Wenn das Testframework flexibel genug ist, sollten Sie in der Lage sein, diesen Kabelbaum direkt in Ihr System einzustecken, indem Sie beispielsweise eine Schnittstelle implementieren oder die erforderlichen Methoden für die Implementierung Ihres Kabelbaums bereitstellen.

Der Rest der Funktionalität sollte ausschließlich anhand der "Kern" -Funktionalität getestet werden, die bereits mit dem Kabelbaum getestet wurde. Wenn Sie nur die Funktionalität des "Kerns" zum Testen der Nicht-Kern-Funktionalität verwenden, verfügen Sie über eine Reihe von Tests, denen Sie vertrauen können.

dasblinkenlight
quelle
0

Ich weiß nichts über qunit, aber ich habe mehrere Projekte bearbeitet, in denen frühere Versionen einer Lösung zur Validierung späterer Versionen verwendet wurden, sodass ich dies nicht als ungültigen Ansatz betrachte.

Jedes Unit-Test-Paket in einem Vakuum ohne Integration oder UAT-Test ist anfällig für einen Fehler im Testpaket selbst sowie für alle üblichen Integrationsprobleme, die eine Unit-Test-Suite nicht abdecken kann, sodass ich nicht sicher bin, ob ich überhaupt gehen würde Selbsttests mit derselben Version sind fehlerhafter als das Vertrauen in neue Komponententests in einem anderen Projekt.

Wenn man die verlinkte Site des Projekts kurz liest, hört es sich eher so an, als würden sie darauf hinweisen, dass es nichts Besonderes an dem Testszenario oder den Zielen gibt, die man testen kann, als dass sie dafür werben, dass eine Selbsttestbibliothek eine perfekte Lösung ist.

Rechnung
quelle
-1

Nein, Sie können Software nicht mit sich selbst testen, zumindest nicht auf eine Weise, die in einer Auditsituation akzeptabel wäre. Die unabhängige Überprüfung ist zu einer etablierten Norm geworden, da es weitaus weniger wahrscheinlich ist, dass zwei verschiedene X (Personen, Frameworks, Tools) denselben Fehler machen / dieselben Fehler aufweisen. Dies garantiert nicht, dass alles, was Sie testen, tatsächlich korrekt ist, bedeutet jedoch, dass die Wahrscheinlichkeit geringer ist, dass ein Test falsch bestanden wird. Das Testen von etwas mit sich selbst kann Ihr Vertrauen in die ordnungsgemäße Funktion nicht erhöhen, kann jedoch als schnelle und schmutzige Überprüfung hilfreich sein, um die Zeit zu verkürzen, die zum Empfangen von Feedback erforderlich ist.

Ryathal
quelle
Sie wissen, dass Tests sowohl Erfolgs- als auch Misserfolgsfälle testen sollten? Wenn Sie ein Testframework mit sich selbst testen, sollten Sie normalerweise eine "bekanntermaßen gute" Version des Frameworks verwenden. Ich würde nur eine "Entwicklungs" -Version eines Test-Frameworks als endgültigen Abnahmetest verwenden, bevor ich zur Veröffentlichung gehe.
Binarycleric