Was ist die richtige Balance zwischen Einheit vs. Funktionsprüfung in einer typischen Web-Anwendung?

StackOverflow https://stackoverflow.com/questions/312904

  •  10-07-2019
  •  | 
  •  

Frage

Unit-Tests sind billiger zu schreiben und zu pflegen, aber sie haben nicht alle Szenarien abdecken. Was ist die richtige Balance zwischen ihnen?

War es hilfreich?

Lösung

Ich mag Brian Marick des Quadranten für automatisierte Tests, bei denen die Unterschiede Business vs. Technologie gegenüber und Unterstützung Programmierung gegen Kritik Produkt.

Mit diesem Rahmen die Frage des Gleichgewichts wird, was muss ich jetzt?

Andere Tipps

Es ist wichtig, zwischen dem Ziel und Umfang dieser beiden Arten von Tests zu unterscheiden:

  • Unit-Test testen typischerweise eine bestimmte Funktion im Modul / Klassenstufe , z.B create-X, update-Y, foo-the-bar, kompakt-the-whizbang usw. Eine Klasse kann mehrere Komponententests haben

  • Funktionstest , auch ein 'Abnahmetest' genannt typischerweise testet ein Use-case-Szenario von der äußersten Schnittstelle bis zum Ende der Verarbeitung, zB von der Benutzer-Schnittstelle zur Datenbank und wieder zurück, von dem Eingabeprozess auf die Benachrichtigung Dienstprogramm, etc.

diese beiden Arten von Tests sind nicht austauschbare , und sind im Allgemeinen disjoint . So ist der Begriff eine ‚Balance‘ zwischen ihnen auffällig macht keinen Sinn. Sie müssen entweder sie oder nicht.

Wenn Sie auf die Leichtigkeit beziehen Kodierung jede Art von Test in Ihrem Test-Framework, das ist eine andere Frage - aber die Verwendung des Rahmens (sagen wir, NUnit im Vergleich zu einem Benutzer-bot) nicht die Art ändern / Art des Tests.

die beste „Balance“ im Allgemeinen zu Unit-Test für das Vertrauen und die Vollständigkeit und Funktionstest für Kundenakzeptanz würde

ich mit Steven Lowe darüber einig, dass es kein Kompromiss zwischen Unit-Tests und Funktionstests, wie sie für ganz unterschiedliche Zwecke verwendet werden.

Unit-Tests sind über Methode und Typprüfung und auch Regressionstests. Funktionsprüfungen sind über funktionelles, Szenario und Machbarkeitsprüfung. Meiner Meinung nach gibt es so gut wie keine Überschneidungen,

Wenn es hilft, hier sind meine Testkategorien.

Entwickler von innen beginnen und nach außen, auf Code Fokussierung:

  • Assertions - überprüfen den Datenfluss und Strukturen
  • Debugger - überprüfen Code Fluss und Daten
  • Unit-Tests - überprüft jede Funktion
  • Integrationstest - überprüfen Subsystemen
  • Systemprüfung - überprüfen Sie die Funktion
  • Regressionstests - überprüfen Defekte bleiben feste
  • Sicherheitstests - überprüft System nicht leicht durchdrungen werden.

Tester von außen beginnen und nach innen, auf Funktionen konzentriert:

  • Abnahmetests - Endbenutzeranforderungen überprüfen
  • Szenario-Tests - überprüfen reale Situationen
  • Globale Tests - überprüfen machbar Eingänge
  • Regressionstests - überprüfen Defekte bleiben feste
  • Usability-Tests - das System überprüfen, ist einfach zu bedienen
  • Sicherheitstests - überprüfen System nicht leicht durchdrungen werden
  • Code-Coverage - Prüfung unangetastet Code
  • Kompatibilität - auch in früheren Versionen
  • Suchen nach Macken und Ecken und Kanten.

Endanwender arbeitet von außen, und hat in der Regel wenig Fokus:

  • Abnahmetests - Endbenutzeranforderungen überprüfen
  • Szenario-Tests - überprüfen reale Situationen
  • Usability-Tests - das System überprüfen, ist einfach zu bedienen
  • Suchen nach Macken und Ecken und Kanten.

Auf dem app ich arbeite im Moment an, es gibt wahrscheinlich 10: 1 Einheit zu Funktionstests. Die Unit-Test-Arbeit einfach Dinge wie Personen aus DB abrufen, die Fehlerbehandlung Tests für db / Netzwerk-Konnektivität usw. Diese Dinge laufen schnell - Minuten oder weniger und werden von Devs täglich ausgeführt

.

Funktionstests während weniger dazu neigen, Küchenspüle Ansatz zu sein - können Benutzer der vollständige Ordnung usw. neigt dazu, das Business-Bereich Ende der Dinge zur Deckung von Geschäft analsyts und Operationen läuft - leider für uns, die oft von der Hand. Diese Dinge nehmen Wochen zu laufen und in der Regel einen Release-Zyklus zu beenden.

Mein aktuelles Projekt ist bei etwa 60% Einheit Testabdeckung und alle User Storys haben glücklich Tages Berichterstattung über User Stories in Selen-Tests, haben einige zusätzliche Abdeckung.

Wir diskutieren ständig diese: Gibt es wirklich einen beliebigen Punkt der Schubeinheit-Testabdeckung von zunehmend absurde Szenarien für viel höhere Reichweite?

Das Argument ist, dass expandierende Selen Tests Testabdeckung auf Dinge erhöht die Business-Wert haben. Hat der Kunde wirklich über Unit-Test Eckfällen kümmern, die fehlschlagen können?

Wenn Sie an Selen Tests gut erhalten, die Kosten für neue Tests mit Geschäftswert des Schreibens abnimmt. Für uns sind sie genauso einfach wie Unit-Tests.

Die Laufzeitkosten ist ein anderes Thema. Wir haben eine kleine Gruppe von Boxen dieser Tests aller Zeit ausgeführt wird.

So neigt wir Web-Tests mehr zu bevorzugen, wahrscheinlich, weil wir sie schreiben gut bekommen haben und sie bieten unbestreitbaren Mehrwert.

Ursprünglich lehnte ich mich stark auf vorzieht Unit-Tests über Funktions- / Abnahmen aufgrund der anfänglichen Kostenfaktor von Akzeptanztests. Doch im Laufe der Zeit habe ich meine Philosophie und bin jetzt ein starker Befürworter der Wahl Akzeptanztests geändert, wo immer möglich und nur Unit-Tests verwenden, wenn Akzeptanztests können nicht meine Bedürfnisse erfüllen.

Der Grund rationale Akzeptanz über Unit-Tests für die Wahl der gleichen wie der Grund rational ist SOLID Code. Ihre Umsetzung sollte drastisch ändern kann, mit Refactoring etc, aber alle Geschäftsfällen - Akzeptanz tests- sollte in der Lage sein, un-verändert zu bleiben und akzeptabel Systemverhalten unter Beweis stellt (Tests bestehen). Mit Unit-Tests gibt es oft eine natürliche starke Kopplung von Test Implementierungscode. Auch wenn es Testcode ist, ist es immer noch Code und starke Kopplung wie-wir-wissen sollten vermieden werden. Durch die Wahl Abnahmen sind Sie oft führen die Spirale des Erfolgs nach unten zu schaffen, gut geplanten, Verbrauch entkoppelten api Ihre Implementierung Wechsel ohne zwingen Ihre Tests hinter den Kulissen lassen sie ändern. Auch Ihre Entwickler Implementierung Gedanken sind in-line mit den Business-System-Verhalten Gedanken. Am Ende finde ich, dass all dies ist besser für die Wirtschaft und für Coder Zufriedenheit.

Von einer Theorie Standpunkt oft ich meine Selbst fragen, ob ein Stück Code kann nicht über eine Abnahmeprüfung geprüft werden, warum soll das Stück Code existieren? IE - wenn sie nicht Teil eines gültigen Geschäftsszenario ist, hat dann diesen Code addierten Wert oder ist es zur Zeit und wird es bleiben nur kosten

? wenn Sie

Darüber hinaus kommentieren / dokumentieren Sie Ihre Abnahmetests gut, diese Kommentare / Dokumente sind in der Regel die aktuellsten und genauesten Sprache des Systems - die in der Regel lassen Sie andere, weniger wertvolle Dokumentation Ansätze vermeiden. Unit-Tests eignen sich nicht zu dieser Form der "Business-Begriff" Kommunikation.

Schließlich Ich habe diesen Standpunkt nicht aus nur meine persönlichen Entwicklung gebildet wird, ist es mit ein paar verschiedenen Projektteams in meinem „sehr corporate“ Arbeitsumfeld bewährt.

JB http://jb-brown.blogspot.com

Die Tests sollten schnell und helfen laufen Probleme zu lokalisieren. Unit-Tests können Sie dies tun, indem nur das betreffende Modul testen. Allerdings Funktions- / Integration / Abnahmetests ausreichend schnell in den meisten Web-Szenarien werden laufen.

Ich habe einmal gelesen, dass ein Unit-Test eine „Executable Anforderung“ ist, was mir durchaus Sinn macht. Wenn Ihr Test zu beweisen, eine Geschäftsanforderung nicht fokussiert ist, dann ist es wirklich nichts. Wenn Sie Anforderungen detailliert haben (und das ist der Säure-Test), dann werden Sie eine Reihe von Unit-Tests schreiben, um jedes mögliche Szenario auszuüben, die wiederum die Integrität Ihrer Datenstruktur Algorithmen und Logik gewährleisten. Wenn Sie etwas testen, die nicht erforderlich ist, aber Sie wissen müssen wahr sein, dass der Test dann passieren ist es mehr als wahrscheinlich, dass Sie fehlen Anforderungen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top