Wann Debug-vs Unit-Tests verwendet werden?

8

Ich bin ein bisschen verwirrt, was ist besser, Debug-oder Unit-Test schreiben zu verwenden? und ist das allgemein oder gibt es Fälle, in denen Debug besser als Unit-Test ist oder sollte ich beide verwenden?

Danke

    
Feras Odeh 02.10.2010, 14:46
quelle

6 Antworten

15

Das Debuggen hilft Ihnen, nicht funktionierenden Code zu diagnostizieren.

Komponententests bieten Folgendes:

  1. eine wiederholbare Methode, um zu ermitteln, ob Ihr Code sowohl für allgemeine als auch für Randfälle funktioniert. Sie ermöglichen es Ihnen, Ihren Code mit der Gewissheit zu überarbeiten, dass er immer noch funktioniert.
  2. eine nachweisbare Spezifikation des Codes. In Ermangelung einer schriftlichen Spezifikation testet Ihre Unit die Spezifikation Ihres Codes. Dies gilt insbesondere in der agilen Welt.
  3. eine Hilfe zum Aufbau von gut strukturiertem Code. Da Sie Komponententests eigenständig ausführen möchten, müssen Sie Ihre Klassen testen, um verschiedene (manchmal verspottete) Datenquellen, Senken usw. zu akzeptieren. Durch die Förderung dieser Abstraktionen und der Trennung von Problemen wird Ihr Code gut strukturiert (Sie können, Natürlich, schreiben Sie gut strukturierten Code ohne Komponententests)

Ihre Komponententests sollten wiederholt ausgeführt werden (meistens als Teil Ihres Build-Prozesses). Wenn Sie sie brechen (meistens aufgrund eines Programmierfehlers), dann ist es an der Zeit, den Debugger auszubrechen, um die Probleme zu identifizieren und den Code entsprechend zu korrigieren (oder den Test zu ändern).

    
Brian Agnew 02.10.2010, 14:49
quelle
5

Komponententest wird verwendet, um sicherzustellen, dass der Code wie erwartet funktioniert. Debuggen wird verwendet, wenn Sie herausfinden müssen, warum der Code nicht wie erwartet funktioniert.

    
Ladislav Mrnka 02.10.2010 14:49
quelle
2

Wenn Sie den Fehler im Komponententest reproduzieren können, verwenden Sie einen Komponententest. Es wird dauern, nachdem der Fehler behoben ist und den Code in Zukunft davor "schützen".

Wenn Sie Schwierigkeiten haben, den fehlerhaften Code zu finden, ist das Debuggen wahrscheinlich eine bessere Lösung. Aber sobald Sie wissen, wo das Problem liegt - schreiben Sie einen Test, stellen Sie sicher, dass es fehlschlägt und beheben Sie den Fehler.

Das Debugging benötigt mehr Zeit und es ist eine "einmalige" Lösung. Wenn Sie die Möglichkeit zum Komponententest haben, bevorzugen einen Komponententest .

    
Elisha 02.10.2010 14:48
quelle
1

Debugging und Schreiben von Unit-Tests sind zwei verschiedene Dinge. Theoretisch sollte Ihre Entwicklung durch Unit Tests erfolgen, die die verschiedenen Szenarien abdecken. Sie könnten debuggen, wenn Sie feststellen, dass etwas mit Ihrem Code nicht stimmt und versuchen, die Werte verschiedener Variablen in Runtime usw. zu sehen ... Im Grunde genommen könnten Sie nur debuggen, wenn etwas nicht stimmt.

    
Darin Dimitrov 02.10.2010 14:49
quelle
1

Eine andere Perspektive:

Machen Sie immer Unit-Tests von allem, was Sie tun können. Das Ideal ist, jede Komponente isoliert zu testen und Integrationstests von Komponenten durchzuführen.

Worüber Sie jedoch sprechen, ist eine andere Frage: Wenn etwas kaputt geht, was sollten Sie tun, gehen Sie, versuchen Sie einen Komponententest oder führen Sie den Debugger aus. Dies sind nicht wirklich die Möglichkeiten. Wenn etwas kaputt geht und Sie das Verhalten in einem Komponententest sehen können, ist das ideal. Aber Sie müssen immer noch den Grund für das Verhalten finden. Jetzt haben Sie die Wahl zwischen dem Hinzufügen von Protokollierung und dem Ausführen des Debuggers, und ich stimme mit den Leuten, die die Protokollierung verwenden, bis Sie nicht können. Die Debuggerzeit fügt dem Code keinen langfristigen Wert hinzu. Die Protokollierung funktioniert.

    
Rob 02.10.2010 15:20
quelle
1

Ich denke, dass diese Frage tiefer betrachtet werden kann, als einige der Antworten nahe legen ... obwohl sie vielleicht besser für den Austausch von Programmierstapeln passen.

Zuerst einige Kommentare darüber, wie Debugging und Komponententests interagieren

  • Unit-Tests können zuerst das Debuggen verhindern
  • Wenn etwas schwer genug zu debuggen ist, sollte man aufhören, das Problem zu beheben und Unit-Tests mit verwandten Typen problematischer Eingaben starten. Vielleicht möchten Sie versuchen, die Eingabe zu vereinfachen, die zuerst Probleme verursacht (vorausgesetzt, Ihr System ist deterministisch!)

  • Ähnlich wie oben beschrieben, können Sie Ihren problematischen Code durch das System verfolgen und damit beginnen, die Dinge in der Anrufkette mit identischen Eingaben zu testen

Komponententests können als "Debuggen vor der Zeit" oder "pessimistisches Debugging" betrachtet werden, vorausgesetzt, Sie haben einen Fehler, also versuchen Sie, ihn sofort zu debuggen. Wenn Sie dies tun, wenn Sie ein tatsächliches Problem haben, ist es eher so, als würde man raten, dass es in einem bestimmten Codeabschnitt einen Fehler gibt, den Sie durch Erraten gebrochener Eingaben herausfinden können.

    
Att Righ 13.10.2017 17:12
quelle

Tags und Links