Frage

Ich habe Testing vor kurzem gehört Functional Testing über Einheit.

Ich verstehe, dass Unit Testing testet jede der Möglichkeiten eines bestimmtes Stück Code von seiner atomaren Form. Aber was ist Functional Testing?

Das klingt für mich wie die Prüfung nur dann, wenn der Code funktioniert, aber es ist so zuverlässig wie Unit Testing?

Ich habe gesagt, war es zwei Schule der Gedanken für die Angelegenheit. Certains würde Unit Testing, andere Funktionsprüfung vorziehen.

Gibt es eine gute Ressourcen, Links, Bücher, alle Verweise oder einer von euch alle, die erklären können, und moderneren Lokale meinen Weg zu dem Thema?

Danke!

War es hilfreich?

Lösung

Jasons Antwort ist richtig. Verschiedene Arten von Tests dienen unterschiedlichen Zwecken und kann für die besten Ergebnisse (gutes Design, Veranstaltungs Spezifikationen, reduzierte Defekte) überlagert werden.

  • Unit-Tests = Antriebe Design (mit Testgetriebene Entwicklung oder TDD)
  • Integration testen = tun alle die Stücke zusammenarbeiten
  • Kundenakzeptanztest = macht es die Anforderungen des Kunden erfüllen
  • Manuelles Testen = deckt oft die Benutzeroberfläche; dedizierte Tester können, welche Automatisierung Misses
  • finden
  • Der Belastungstest = wie gut funktioniert das System durchführt mit realistischen Datenmengen

Es gibt einige Überschneidungen zwischen diesen Kategorien; Unit-Tests Verhalten angeben, zum Beispiel.

Und es gibt andere; für mehr als die meisten Menschen zu wissen, Pflege finden Sie unter Software Testing .

Ein Punkt Mensch vermisst ist, dass Unit-Tests testen Teile des Codes in Isolation . Gute Unit-Tests nicht treffen die Datenbank, zum Beispiel. Dies hat zwei Vorteile: es macht die Tests schnell laufen, so dass Sie sie öfter laufen werden, und es zwingt Sie lose gekoppelte Klassen (besseres Design) zu schreiben

.

Sie baten um Ressourcen; Ich empfehle Roy Osherove Buch The Art of Unit Testing mit den Beispielen in .NET . Während kein Buch ist perfekt, dieses viele ausgezeichnete Zeiger gibt gute Tests zu schreiben.

EDIT: Und für die Tests gegen bestehende Software zu schreiben, geht nichts über Michael Feathers' Buch Arbeits Effektiv mit Legacy-Code .

Andere Tipps

Unit-Tests im Vergleich zu Funktionstests sind kein xor, sondern eine and. Unit-Tests sind über Einheiten in Isolation zu testen, während Funktionstests sind die gesamten über die Prüfung bei der Integration (alle Einheiten tun arbeitet richtig?).

Beide sind notwendige Bestandteile von guten Software-Engineering-Praktiken.

Unit-Tests testen Ihre Codeeinheiten (Methoden, etc.), um sicherzustellen, dass sie tun, was man von ihnen erwarten.

Funktionsprüfung testet Ihr System-Design sicher, dass die Stücke richtig interagieren zu lassen. Wenn Sie einen Befehl schreiben, und int nimmt und gibt einen String zurück und testen Sie es vollständig, können Sie sicher sein, es funktioniert. Aber wenn Sie nicht über Systemtests haben, können Sie nie bemerken, dass der Rest des Codes denkt kann es eine Null annehmen, aber es kann nicht.

Beiden Arten von Tests sind wichtig.

edit: Um eine etwas andere Ansicht hinzuzufügen, was gbjbaanb sagte:

  • Unit-Test = mein Code funktioniert
  • Funktionstest = meine Design-Arbeiten
  • Integration Test = mein Code Ihrer 3rd-Party-Sachen wird mit richtig (Datenbanken, etc.)
  • Factory Acceptance Test = mein System funktioniert
  • Site Acceptance Test = Code saugt diese komplett ist nicht das, was ich gefragt!?!
  • Unit-Test = niedrigste, granulare Ebene.
  • Funktionstest = middling, modular Ebene.
  • Integrationstest = höhere Anwendungsebene.
  • Factory Acceptance Test = sehen es alle Arbeiten
  • Site Acceptance Test = sehen es alle fehlschlagen:)

Alle oben genannten sind nützlich, aber sie sind nicht gegenseitig aus. Sie sollten die meisten von ihnen tun, aber die Menge an Zeit, die Sie auf jedem Teil verbringen hängt von den Ergebnissen Sie von ihnen erhalten, das ist alles. Wenn Ihr Code zu modular ist leicht zu sein Gerät getestet, dann Ihre Bemühungen auf den funktionalen Tests verbringen. Wenn Sie eine Bibliothek von kleinen Komponenten schreiben, verbringen Sie Ihre Zeit am Gerät testen sie, und wenn Sie schreiben Kontrollsysteme für militärische Raketen sollten Sie auf jeden Fall Site Acceptance sein, um sie zu testen (wie Explosionen, auch wenn es nicht Spaß :))

Funktionsprüfung, die auch als Systemtests , zielt auf das komplette System zu testen und zu überprüfen die funktionalen Anforderungen erfüllt sind.

Unit-Tests zielt auf die „Einheiten“ zu testen, dh die Funktionen oder Methoden das System Build von ist in Isolation . Es ist manchmal Entwickler-Tests genannt. Unit-Tests können nach der Tat schwierig sein, deshalb TDD den Test vor dem Code schreibt .

Das ist ergänzende , da die Einheiten können unabhängig voneinander arbeiten und nicht, wenn alle miteinander integriert, oder sie können die Unit-Tests passieren, und nicht alle Produktanforderungen erfüllen.

Unit Testing und Funktionstests haben zwei unterschiedliche Ergebnisse.

Unit Testing überprüft, dass ein kleines Stück Code wie erwartet funktioniert. Es wird in der Regel durch den Entwickler getan, um sicherzustellen, dass der Code korrekt funktioniert. Sie werden in der Regel durch einen Test-Framework automatisiert als auch.

Functional Testing überprüft, dass eine Funktion, indem Sie durch einen bestimmten Weg durch das Programm wie erwartet funktioniert. Sie werden in der Regel von einer Person auf der Software ausgeführt sicherzustellen, dass das Programm funktioniert sie, wie soll es für den Anwender. Es als solche ist höhere Ebene, und somit testet mehrere Einheiten auf einmal.

Ich denke, beide sind wichtig. Wenn Sie über begrenzte Ressourcen verfügen, aber, und müssen Techniken wählen / wählen, und ich denke, dass es auf den Produkten ab, die Sie erstellen, aber für das, was ich tue (Automobil-Control-Produkte von Menschen durch einige Tasten) Funktionstests am wichtigsten sind. Es wird überprüft, und stellt sicher, dass, wenn der Benutzer das Produkt bekommt, es tut, was es tun soll. Dies bedeutet nicht, dass wir von Unit-Tests entscheiden sollten, aber wenn Push-kommt-to-Schub, funktional ist die wichtigste positive Nutzererfahrung zu gewährleisten und das Produkt aus der Tür zu bekommen.

Wenn Sie produzieren, sagen wir, eine Datenbank-Engine (oder ein anderes Produkt, das nicht notwendigerweise Benutzer gerichtete ist), kann Unit-Test, was Sie wirklich tun sollten.

Ein Unit Test testet ein Stück Code und bestätigt für einen Programmierer, dass ein anderes Stück Code tut, was es soll. Im Test Driven Development, wird der Unit-Test zuerst geschrieben und zum Scheitern verurteilt beobachtet, bevor der Code geschrieben wird, wodurch der Test bestehen. Programmierer sind in Unit-Tests interessiert. Einheit Test ist schnell auszuführen.

Ein Funktionstest testet Ihre Blackbox Anforderung und zeigt, dass ein Stück User-Funktionalität vorhanden ist. Zum Beispiel, wenn ich den großen roten Knopf drücken, beginnt die Glocke zu läuten. Die Funktionsprüfung kann nicht einmal sein Code zu testen. Vielleicht gibt es einen mechanischen Prozess, der die Glocke zu Ring veranlassen, den Knopf gedrückt hat. Die Kunden sind in Funktionstests interessiert, da sie, dass ein hohes Maß Prozess bestätigen, wenn in einer Art und Weise arbeiten, dass sie verstehen. Sie sind oft langsam auszuführen.

Es gibt einen Platz für beide in den meisten Entwicklungsarbeit.

Unit-Tests gibt es kleine Einheiten von Code zu testen, um zu sehen, dass sie wie erwartet.

Die Funktionsprüfung ist es zu testen, dass die gesamte Funktionalität des Systems wird wie erwartet.

Sie sind auf verschiedenen Ebenen und beide verwendet werden soll.

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