Frage

Nehmen wir an, wir haben eine einfache Funktion, die in einer Pseudosprache definiert ist.

List<Numbers> SortNumbers(List<Numbers> unsorted, bool ascending);

Wir übergeben eine unsortierte Liste von Zahlen und einen booleschen Wert, der die aufsteigende oder absteigende Sortierreihenfolge angibt.Im Gegenzug erhalten wir eine sortierte Zahlenliste.

Meiner Erfahrung nach können manche Menschen Randbedingungen besser erfassen als andere.Die Frage lautet: „Woher wissen Sie, wann Sie mit der Erfassung von Testfällen fertig sind?“

Wir können jetzt damit beginnen, Fälle aufzulisten, und einer klugen Person wird zweifellos noch „ein weiterer“ Fall einfallen, der in keinem der vorherigen Fälle abgedeckt ist.

War es hilfreich?

Lösung

Verschwenden Sie nicht zu viel Zeit damit, darüber nachzudenken jeden Grenzbedingung.Ihre Tests werden nicht in der Lage sein, zu fangen jeden Fehler beim ersten Mal.Die Idee ist, Tests durchzuführen ziemlich gut, und dann jedes Mal ein Fehler tut Schreiben Sie einen neuen Test speziell für diesen Fehler, damit Sie nie wieder etwas davon hören.

Ich möchte noch eine weitere Anmerkung zu Code-Coverage-Tools machen.In einer Sprache wie C# oder Java, in der es viele Get/Set- und ähnliche Methoden gibt, sollten Sie dies tun nicht Achten Sie auf eine 100-prozentige Abdeckung.Das bedeutet, dass Sie zu viel Zeit damit verschwenden, Tests für trivialen Code zu schreiben.Du nur Sie möchten eine 100-prozentige Abdeckung Ihrer komplexen Geschäftslogik.Wenn die Abdeckung Ihrer gesamten Codebasis eher bei 70–80 % liegt, leisten Sie gute Arbeit.Wenn Ihr Code-Coverage-Tool mehrere Coverage-Metriken zulässt, ist die beste Methode die „Block Coverage“, die die Coverage von „Basisblöcken“ misst.Andere Typen sind Klassen- und Methodenabdeckung (die Ihnen nicht so viele Informationen liefern) und Linienabdeckung (die zu feinkörnig ist).

Andere Tipps

Woher wissen Sie, wann Sie mit der Erfassung von Testfällen „fertig“ sind?

Das ist nicht der Fall. Außer in den trivialsten Fällen kann man nicht 100 % erreichen.Auch eine 100-prozentige Abdeckung (von Linien, Pfaden, Bedingungen ...) sagt Ihnen nicht, dass Sie alle Randbedingungen erfüllt haben.

Am wichtigsten ist, dass die Testfälle nicht „Write-and-Forget“ sind. Schreiben Sie jedes Mal, wenn Sie einen Fehler finden, einen zusätzlichen Test. Überprüfen Sie, ob es mit dem Originalprogramm fehlschlägt, überprüfen Sie, ob es mit dem korrigierten Programm erfolgreich ist, und fügen Sie es Ihrem Testsatz hinzu.

Ein Auszug aus Die Kunst des Softwaretests von Glenford J.Myers:

  1. Wenn eine Eingabebedingung einen Wertebereich angibt, schreiben Sie Testfälle für die Enden des Bereichs und Testfälle mit ungültigen Eingaben für Situationen direkt hinter den Enden.
  2. Wenn eine Eingabebedingung eine Anzahl von Werten angibt, schreiben Sie Testfälle für die minimale und maximale Anzahl von Werten sowie einen Wert unterhalb und darüber hinaus.
  3. Verwenden Sie Richtlinie 1 für jede Ausgabebedingung.
  4. Verwenden Sie Richtlinie 2 für jede Ausgabebedingung.
  5. Wenn die Eingabe oder Ausgabe eines Programms eine geordnete Menge ist, konzentrieren Sie sich auf das erste und letzte Element der Menge.
  6. Nutzen Sie außerdem Ihren Einfallsreichtum, um nach weiteren Randbedingungen zu suchen

(Aus urheberrechtlichen Gründen habe ich nur das Nötigste eingefügt.)

Punkte 3.und 4.oben sind sehr wichtig.Menschen neigen dazu, Randbedingungen für die Ergebnisse zu vergessen.5.ist in Ordnung.6.hilft wirklich nicht :-)

Kurze Prüfung

Das ist schwieriger als es aussieht.Myers bietet diesen Test an:

Das Programm liest drei ganzzahlige Werte aus einem Eingabedialog.Die drei Werte stellen die Längen der Seiten eines Dreiecks dar.Das Programm zeigt eine Meldung an, die angibt, ob das Dreieck ungleichseitig, gleichschenklig oder gleichseitig ist.

Denken Sie daran, dass bei einem ungleichseitigen Dreieck keine zwei Seiten gleich sind, während ein gleichschenkliges Dreieck zwei gleiche Seiten hat und ein gleichseitiges Dreieck drei Seiten gleicher Länge hat.Darüber hinaus sind auch die Winkel gegenüber den gleichen Seiten in einem gleichschenkligen Dreieck gleich (daraus folgt auch, dass die Seiten gegenüber gleichen Winkeln in einem Dreieck gleich sind), und alle Winkel in einem gleichseitigen Dreieck sind gleich.

Schreiben Sie Ihre Testfälle.Wie viele haben Sie?Myers stellt 14 Fragen zu Ihrem Testset und berichtet, dass hochqualifizierte Berufsprogramme im Durchschnitt 7,8 von 14 möglichen Punkten erreichen.

Aus praktischer Sicht erstelle ich eine Liste von Tests, die meiner Meinung nach vor der Annahme bestanden werden müssen.Ich teste diese und automatisiere, wo möglich.Basierend darauf, wie viel Zeit ich für die Aufgabe veranschlagt habe oder wie viel Zeit mir gegeben wurde, erweitere ich meinen Testumfang um Elemente, die vor der Annahme bestanden werden sollten.Natürlich ist die Grenze zwischen Muss und Soll subjektiv.Danach aktualisiere ich automatisierte Tests, sobald Fehler entdeckt werden.

@Keith

Ich denke, Sie haben es auf den Punkt gebracht. Es ist wichtig, sich die Codeabdeckung anzusehen, wenn Sie sehen möchten, wie „fertig“ Sie sind, aber ich denke, 100 % ist ein etwas unrealistisches Ziel.Wenn Sie 75-90 % anstreben, erhalten Sie eine ziemlich gute Abdeckung, ohne es zu übertreiben ...Testen Sie nicht nur, um 100 % zu erreichen, denn an diesem Punkt verschwenden Sie nur Ihre Zeit.

Ein gutes Code-Coverage-Tool hilft wirklich.

Eine 100-prozentige Abdeckung bedeutet nicht unbedingt, dass es ausreichend getestet wurde, ist aber ein guter Indikator.

Für .Net ist NCover ganz gut, aber nicht mehr Open Source.


@Mike Stone - ja, vielleicht hätte das "hohe Berichterstattung" sein sollen - wir streben ein Minimum von 80% an, über 95% über 95%.

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