In meiner Software erwarten viele Dienste, dass der Benutzer vor der Ausführung authentifiziert wird.
In positiven Szenarien habe ich diese Art von Kontext:
Given I am authenticated
When I create meeting X
Then meeting X is well created
Ich bin es gewohnt, für jeden meiner Dienste, der sich mit der Anforderung der Benutzerauthentifizierung befasst, ein symmetrisches Szenario wie dieses zu schreiben:
Given I am not authenticated //note the 'not' word
When I create meeting X
Then meeting X is not created
And an authentication error should be thrown
Es zwingt den Entwickler, die Überprüfung der Benutzerauthentifizierung an der Spitze der Dienstimplementierung vorzunehmen, um zu verhindern, dass potenzielle „Hacker“ oder bösartiger Code die API (in diesem Beispiel „Meeting-Erstellung“) direkt aufrufen, ohne authentifiziert zu werden.
Ist es eine Praxis, die ich beibehalten sollte?
Liege ich richtig, wenn ich dieses „defensive“ Szenario als eine echte Geschäftsregel betrachte, die ich mit dem „Business“-Team besprechen kann?
Beachten Sie, dass meine Akzeptanztests nicht über den GUI-Teil testen, sondern nur direkt über den Anwendungsfallteil (Dienste / Geschäftsregeln).
Kurze Antwort: Ja, es ist völlig in Ordnung, negative Fälle zu berücksichtigen.
Ich bin es gewohnt, das etwas anders zu sehen. Normalerweise ist eine User Story eine Stufe höher wie:
Als Benutzer möchte ich in der Lage sein, eine Besprechung zum Kalender hinzuzufügen, damit ich meinen Zeitplan für den Tag verfolgen kann."
Dann hätte ich beides als Akzeptanzkriterien für diese Geschichte.
Diese Empfehlung ist jedoch eher eine Frage des Stils. Das gefällt mir, weil es sie besser gruppiert, sodass wichtige Geschäftsfälle nicht durch das Raster fallen. Was Sie tun, ist sicherlich nicht falsch.
Ist es eine Praxis, die ich beibehalten sollte?
Vielleicht. Negative Testfälle, wie Randbedingungen, sind aus Sicht der Qualitätssicherung gut zu testen. Aus technischer oder Produktmanagement-Perspektive lohnt es sich jedoch zu fragen, warum Sie ein solches eng gefasstes Szenario statt einer umfassenderen Funktion oder einer Szenarioskizze benötigen. Und aus geschäftlicher Sicht sind Details auf niedriger Ebene in Akzeptanztests im Allgemeinen ein Anti-Pattern.
Anstatt zum Beispiel alle möglichen seltsamen Einstiegspunkte als separate Anwendungsfälle zu haben, könnte ein umfassenderes Feature sagen:
Given that a user is not authenticated
When the user performs any action
Then the user is redirected to the login page.
Dadurch wird der reale Business Case besser und klarer erfasst, obwohl Sie sich wahrscheinlich einzelne Schritte oder eine Szenarioskizze wünschen würden, um alle möglichen Einstiegspunkte zu testen und einzelne Fehler effektiver melden zu können.
Der Vorteil dieser Art von Story besteht darin, dass sie die Geschäftslogik viel besser erfasst als eine implementierungszentrierte Story. Andererseits ist ein Fehler innerhalb eines der Schritte viel weniger kommunikativ und erfordert Kenntnisse der zugrunde liegenden Schritte, um bestimmte Fehler einzugrenzen.
Es gibt einen Mittelweg: Senario-Umrisse.
Das Hauptproblem beim Ausdrücken nur der Geschäftsdomäne, ohne auch Kontext oder gezielte Anwendungsfälle zu definieren, besteht darin, dass Sie nicht genau bestimmen können, wo eine Testgruppe fehlschlägt. Hier können die Umrisse von Cucumber-Szenarien helfen.
Zum Beispiel:
Scenario Outline: force authentication on all pages
Given an unauthenticated user
When the user connected to the <function> page
Then the user should be redirected to the login page.
Examples:
| function |
| meeting |
| calendar |
| profile |
| launch thermonuclear warheads |
Mit dieser Art von Gliederung ist das Geschäftsziel klar, und Sie haben auch eine Reihe von High-Level-Tests, die unabhängig voneinander bestanden oder nicht bestanden werden können. Die Berichterstattung auf oberster Ebene ist sowohl granular als auch zusammenhängend, während die Art von „Test-Wildwuchs“ vermieden wird, die Sie erhalten würden, wenn Sie negative Szenarien für jedes Verhalten hinzufügen würden.
Das Testen ist eher eine Kunstform als eine Wissenschaft, daher kann Ihre Laufleistung variieren. Agiles Testen sollte jedoch als selbstdokumentierendes Verhalten und nicht als Detail auf niedriger Ebene fungieren, und Akzeptanzkriterien sollten sich mehr auf die Geschäftslogik oder das für den Benutzer sichtbare Verhalten als auf die zugrunde liegenden Implementierungsdetails konzentrieren.
TL;DR: Ja, Sie können es so belassen.
Lange Antwort
Je nachdem, wofür Sie die Szenarien oder Geschäftsregeln verwenden , gibt es mehrere Möglichkeiten, sie aufzuschreiben
Erster Fall: Das Szenario wird für Akzeptanzkriterien verwendet
Geschichte
Als Benutzer möchte ich Meetings erstellen, um...
Akzeptanzkriterium
Erster Fall: Das Szenario wird für Akzeptanz- / Regressionstests verwendet , das sind fragmentierte Anweisungen, um sich durch die Anwendung zu klicken. All diese Tests sollten nach jeder Story (oder zumindest vor jeder Veröffentlichung) bestanden werden.
Unvollständiges Beispiel:
glücklicher Weg
ohne Authentifizierung
Randnotiz
Ich würde empfehlen, die Regressionstests von einem Benutzer über die GUI durchzuführen. Wenn sie gut geschrieben sind, können sie in Code implementiert und automatisch ausgeführt werden.
Wie andere geschrieben haben, ist die Berücksichtigung negativer Fälle gut. Die Struktur Ihres negativen Falls ist es jedoch nicht, da sie einen inneren Widerspruch enthält.
Das Problem ist, dass Sie Ergebnisse so beschreiben, als wären sie Benutzeraktionen. Aber sie sind eigentlich die Aktion, die die Software als Reaktion auf die Benutzeraktion ausführt. Fehler haben Benutzeraktionen, aber die erwartete Ausgabe tritt nie auf, da der Fehler verhindert, dass sie tatsächlich eintritt, sodass eine auf dem Ereignis basierende Geschichte niemals erfüllt ist.
Schlecht:
Vorausgesetzt, ich bin authentifiziert
Wenn ich Besprechung X erstelle
Besser:
Vorausgesetzt, ich bin authentifiziert
Wenn ich eine „Meeting erstellen“-Anfrage sende
Dies funktioniert immer noch auf der Ebene des Backends, bezieht sich nicht auf bestimmte UI-Elemente wie Menüs oder Schaltflächen und deckt Netzwerkaktivitäten ab, die nicht vom genehmigten Frontend generiert werden (was die „Hack“-Bedenken abdeckt).
Todd A. Jacobs
Todd A. Jacobs