Komponententests vs. Abnahmetests
Sind Sie für den einen oder anderen? Oder beides?
Mein Verständnis ist, unit-tests:
- Validierung des Systems aus der Entwickler-Sicht
- helfen Sie den Entwicklern, Praxis TDD
- halten code modular
- unterstützen in der Aufdeckung von Fehlern bei der niedrigen Ebenen der Granularität
Acceptance tests:
- überprüfen Sie das system von der Geschäfts-und QC /QA-Gesichtspunkten
- neigen dazu, high-level, wie Sie sind, oft geschrieben von Leuten, die nicht vertraut mit dem Innenleben der code
Fühle ich, beide sind notwendig. Jedoch, für die Reduzierung von redundanten arbeiten, ist es eine gute Idee, zu versuchen, zu integrieren, unit tests, Akzeptanz-tests? In anderen Worten, die letztere nennen erstere. Nicht in die entgegengesetzte Richtung machen keinen Sinn?
Was sind Ihre Gedanken im Allgemeinen auf unit-tests vs. Akzeptanz-tests, und wie Sie zu verwalten, die in Bezug aufeinander?
InformationsquelleAutor der Frage Calvin | 2010-11-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
Akzeptanz und integration-tests sagen Ihnen, ob Ihr code funktioniert und vollständig ist, unit-tests sagen Ihnen, wo es fehlschlägt.
Wenn Sie getan haben einen guten job mit Akzeptanz und integration tests, und Sie sind vorbei, Sie Ihren code implementieren alle Funktionen, die es soll, und es funktioniert. Das ist schön zu wissen (es ist auch toll zu wissen, dass es Sie nicht). Aber wenn es nicht funktioniert, eine Abnahme nicht geben Ihnen viel Einblick in das, was schief gegangen ist; da es tests, viele Einheiten von Funktionalität, es kann sein Art bird ' s-eye-view-of-failure. Dies ist, wo unit-tests glänzen. Gute unit-tests sagen Ihnen genau, was schief gelaufen ist, genau das, was mit Ihrem code. Es ist schwieriger zu wissen, ob Sie schon genug geschrieben unit-tests als Akzeptanz-tests, aber wenn man einen fehlerhaften Annahme zu testen, ohne eine entsprechende fehlschlagenden unit-test - es ist Zeit, zu schreiben, dass unit-test.
Dass alles aus der Perspektive des testens. Und, natürlich, TDD nicht (und ATDD nicht) zum testen. Mit Bezug auf das fahren Ihres design -, Annahme-tests geben Ihnen eine Breite roadmap ("hier ist, wo Sie gehen wollen"), während unit-tests, nehmen Sie an der nächsten Kreuzung ("Links"). Sie sind beide wertvoll in dieser Hinsicht und, wieder, deren Wert sich ergänzen.
Nicht zu verwechseln; nicht miscegenate. Unit-tests, insbesondere, sollte nicht davon abhängen, nichts anderes, und es wäre ein Fehler, beschränken Sie Ihre unit-tests durch Abnahme von Ihnen abhängig. Natürlich können Sie teilen einige framework-code, aber Sie sollte unabhängig sein.
InformationsquelleAutor der Antwort Carl Manaster
Nicht.
Nicht stören.
Akzeptanztests sind oft politisch. Sie zeigen Menschen, die-basierend auf Ihr Bauchgefühl -- entscheiden, zu akzeptieren oder abzulehnen.
Dann Sie streiten über die Gültigkeit der Akzeptanz-tests.
Dann Sie streiten über den Umfang der arbeiten und in der nächsten Version.
Akzeptanz-tests nicht -- allgemein -- technische. Wenn Sie das wären, dann hätten Sie formal unit-tests und das wäre, dass.
Versuchen Sie nicht auf finesse der Politik. Es umarmen. Lassen Sie es geschehen.
Kann man hoffen, dass Acceptance Test-Driven Development (ATDD) führt zu "Akzeptanz-tests geschrieben werden und vereinbart die gesamte Mannschaft, bevor die Entwicklung beginnt." Aber Sie müssen der Realität, dass alles, was im Voraus geschrieben ist irreführend bestenfalls-und verhandelbar, im schlimmsten Fall.
Ist die Prämisse hinter allen Agilen Methoden ist, dass Sie nur Zustimmen können, um etwas zu bekommen, lösbare. Alles danach ist Verhandlungssache.
Ist die Prämisse hinter allen test-first (TDD, ATDD, oder irgendetwas anderes) ist das ein test ist eine eiserne Vereinbarung. Außer es ist nicht. Mit jedem TDD (oder ATDD) - Methode können Sie Zustimmen -- im Prinzip -- der test Ergebnisseaber Sie haben nicht wirklich stimmte dem test sich.
Kann es vorkommen, dass der test nicht einfach geschrieben werden. Oder noch schlimmer, kann nicht geschrieben werden, an alle. Sie können vereinbaren, die Ergebnisse, die scheinen getestet werden, sondern erweisen sich als schlecht-definiert. Was nun? Dies sind die Dinge, die Sie nicht wissen können, bis Sie beginnen, Entwicklung und lernen details.
Alle Tests wichtig ist. Und keine bestimmte Art von Tests kann eine Untermenge oder Teilmenge einer anderen Art testen. Sie sind immer teilweise überlappenden sets. Versuchen zu kombinieren, um irgendwie einige Arbeit spart, ist wahrscheinlich erweisen sich als eine Verschwendung von Zeit.
Mehr Tests besser ist als alles andere. Die union aller tests, die mehr Wert hat, als zu versuchen zu zwingen, eine subset-superset Beziehung zwischen tests.
InformationsquelleAutor der Antwort S.Lott
Unit-Tests - meine bestimmte Funktion tut, was es tun soll, nichts mehr und nichts weniger.
Acceptance Test - meine Anwendung tut, was es tun soll.
Beispiel: Applikation zur Berechnung der Wurzeln von quadratischen Funktionen. Dauert Eingänge a, b, und c, gibt Wurzeln x1 und x2. Diese Anwendung wird erstellt, indem Funktionen, die ich Schreibe, um zwei zahlen zu addieren, subtrahiert zwei zahlen multipliziert zwei zahlen dividieren von zwei zahlen, und nehmen Sie die Quadratwurzel von zwei zahlen.
Unit-tests - überprüfen, dass meine dividieren und multiplizieren Funktionen arbeiten korrekt, mein square root funktioniert richtig, meiner addieren und subtrahieren korrekt funktionieren.
Funktionstests zu überprüfen, ob mein Programm berechnet Wurzeln der quadratischen Funktionen.
Da meine gesamte Anwendung ist die Berechnung von Wurzeln, die ich nicht haben sollte ein unit-test, der berechnet auch die Wurzeln, weil es keine einzelne Funktion, die das tut.
InformationsquelleAutor der Antwort iheanyi
Als eine Zusammenfassung aller oben
InformationsquelleAutor der Antwort tharindu_DG
Dies sind nur meine persönliche Meinung über das Problem von einigen Arten von tests:
Ich würde das zweite S. Lott ist nicht auf dieser und fügt hinzu, dass es besteht hier die Gefahr der unit-tests manipuliert zum Teil können einige Fehler passieren. Zum Beispiel, auf einem drop-down kann jemand testen, ein paar Staaten, aber wahrscheinlich nicht alle von Ihnen, wo ein tester verwenden möglicherweise unterschiedliche Daten aufzudecken, die einen möglichen Fehler.
Ich würde vorsichtig sein, der jemals Kupplung zusammen. Die unit-tests stellen tests des kleinsten bits der Funktionalität, Häufig so klein, dass ein end-Nutzer würden nicht verstehen, dass es möglicherweise Hunderte von tests, nur um ein web-Formular zur Eingabe von Daten in ein CRM-system. Acceptance-tests werden mehr über das, was der Benutzer der Anwendung möchte, die mehr subjektive,z.B. "das sieht hübsch?" versus "das sieht Recht?" Kann es sein, dass die Note "gut genug" mit Akzeptanz-tests, die ich bin mir nicht sicher, würde die Arbeit mit unit-tests. In der Regel, wenn ein unit test fehlschlägt, dann hat jemand entweder entscheiden, zu beheben, den code oder entfernen Sie die Probe, jeder kann eine gute option sein, je nach Umstand.
Unit-tests sind zur überprüfung der einfachste code-Stücken. Kann es sein, integration tests, aber das ist eine Ebene höher, als wenn alle die kleinen Stücke sind geprüft, tun die Kombination der Stücke, die zusammen arbeiten,z.B. gab es Samstag morgen cartoons sah ich aufwuchs, hatte Spielzeug könnte man zusammen wie "Voltron" oder verschiedene Transformatoren wie die Constructicons, die gebildet Devastator. Acceptance-tests werden in der Regel von einem end-user Perspektive, "Kann ich X mit dem Programm jetzt?" eine Antwort "ja", bevor etwas geht aus der Tür. Während einige Fehler Fällen kann geprüft werden, eine Abnahme, es ist nicht üblich, zu tun, eine Gründliche Prüfung jeder möglichen Kombination, die man geben könnte, die in eine Anwendung. Aber unit-tests abdecken können, werden Randbedingungen und ein paar andere zufällige-wie Fällen.
InformationsquelleAutor der Antwort JB King