Funktionale Anforderungen legen fest, was das System oder die Anwendung tun soll – insbesondere im Zusammenhang mit einer externen Interaktion (mit einem Benutzer oder einem anderen System).

Wenn eine neue Bestellung aufgegeben wird, soll das System die Gesamtkosten anzeigen und vom Benutzer eine Bestätigung verlangen. Das ist eine funktionale Anforderung; sie beschreibt eine Funktion des Systems.

Nicht-funktionale Anforderungen sind alle Anforderungen, die nicht das Eingabe-/Ausgabeverhalten des Systems beschreiben. Beachtet, dass es hier immer noch um Anforderungen und nicht um Implementierungsdetails geht. Nur weil wir den Begriff „nicht-funktional“ verwenden, heißt das nicht, dass alles in diesen Abschnitt aufgenommen werden kann.

Die häufigsten nicht-funktionalen Anforderungen beziehen sich auf den Systembetrieb (Verfügbarkeit, Kontinuität, DR), die Leistung (Durchsatz, Latenz, Speicherkapazität) und die Sicherheit (Authentifizierung, Autorisierung, Prüfung, Datenschutz).

Dies sind alles übergreifende Belange, die sich auf jede „Funktion“ auswirken, aber keine wirklichen Funktionen sind. Sie sind eher wie Metadaten zu den Funktionen, die nicht nur beschreiben, ob das System funktioniert, was es tun soll, sondern auch, wie gut es funktioniert. Übertreibt diese Analogie aber nicht – es ist nur eine Analogie.

Nicht-funktionale Anforderungen sind nicht subjektiv oder willkürlich, im Gegensatz zu dem, was einige Leute hier zu behaupten scheinen. Sie sollten sogar mit einer harten Metrik versehen sein (z. B. Antwortzeit von nicht mehr als 100 ms). NF-Anforderungen sind auch keine Implementierungsdetails oder Aufgaben wie „Upgrade des ORM-Frameworks“ – keine Ahnung, wie jemand auf diese Idee kommen könnte.


 

 

Einige Beispiele:

  • In der Liste der ausgewählten Geräte kann das Gerät wiederholt ausgewählt werden.
    • Eindeutig eine funktionale Anforderung. Beschreibt, wie die Ausgabe des Systems aussieht.
  • Die Datenbank muss mindestens 100 Einträge enthalten
    • Klingt nach einer Geschäftsregel, also auch nach einer funktionalen Anforderung. Sie scheint jedoch unvollständig zu sein. Was ist der Grund für diese Regel? Was geschieht/sollte geschehen, wenn die Datenbank weniger als 100 Elemente enthält?
  • Die Währung eines bestimmten Wertes muss in € angegeben werden.
    • Eine funktionale Anforderung, aber nicht wirklich eine richtig formulierte Anforderung. Eine sinnvollere Formulierung wäre: Das System muss eine Währung (€) unterstützen. Natürlich würde dies geändert werden, wenn mehr als eine Währung unterstützt werden müsste, und dann müsste die Anforderung Informationen über Währungsumrechnungen usw. enthalten.
  • Das Gerät muss einen Namen und einen Wert für die Leistungsaufnahme in Watt haben.
    • Es handelt sich nicht wirklich um eine Anforderung, sondern eher um eine technische Spezifikation. Eine funktionale Anforderung würde lauten, dass die Nennleistung in Watt angegeben werden soll. Wenn es mehr als eine UOM gibt, sollten die funktionalen Anforderungen, wie bei der Währung, Abschnitte über die Umrechnung von Einheiten, wo/wie sie konfiguriert werden usw. enthalten (falls zutreffend).

Eine nicht-funktionale Anforderung ist „eine Qualität oder Eigenschaft, die das Produkt haben muss“ . James Taylor erklärt, dass eine nicht-funktionale Anforderung „[…] dennoch eine Anforderung ist, und sie ist für den Kunden wichtig – manchmal sogar wichtiger als eine funktionale Anforderung“. Er nennt dann zwei Beispiele: das Logo des Produkts und die Genauigkeit und Zuverlässigkeit der Ausrüstung. Diese beiden Beispiele zeigen sehr gut, dass:

  • Die nicht-funktionalen Anforderungen sind kein Marketing-Geschwafel wie: „Das Internet ist heutzutage wichtig und wir wollen eine Website haben“.
  • Die nicht-funktionalen Anforderungen betreffen die Kunden, da sie deren Produktivität und die Fähigkeit, das Produkt zu nutzen, stark beeinflussen können.
  • Die nicht-funktionalen Anforderungen sind völlig objektiv.

Der letzte Punkt ist wesentlich. Wenn die Anforderung subjektiv ist, hat sie in der Liste der Anforderungen nichts zu suchen. Es wäre unmöglich, aus etwas Subjektivem Validierungstests zu erstellen. Der einzige Zweck der Anforderungsliste besteht darin, die nicht eindeutigen Erwartungen des Kunden aufzuzählen. „Ich möchte, dass dieses Quadrat rot ist“ ist eine Anforderung. „Ich möchte, dass dieses Quadrat eine schöne Farbe hat“ ist ein Wunsch, der einer Erklärung bedarf.

Denkt daran, dass die Anforderungsliste wie ein Vertrag ist (und in den meisten Fällen auch Teil eines Vertrags ist). Sie wird vom Kunden und der Entwicklungsfirma unterschrieben, und im Falle eines Rechtsstreits wird sie rechtlich herangezogen, um festzustellen, ob ihr eure Arbeit richtig gemacht habt.

Was ist, wenn ich ein Softwareprodukt bei euch in Auftrag gebe, festlege, dass „das Produkt großartig sein muss“, und mich weigere zu zahlen, wenn das Produkt fertig ist, weil das, was ihr tatsächlich gemacht habt, in meinen Augen kein großartiges Produkt ist?

Sehen wir uns also weitere Beispiele an.

  • Das Softwareprodukt geht auf den Endbenutzer ein.

Dies ist keine Anforderung. Nicht funktional. Keine nicht-funktionale. Es ist einfach keine Anforderung. Überhaupt nicht. Sie hat null Wert. Sie können nicht überprüfen, ob das Softwaresystem diese Anforderung während der Validierungstests erfüllt. Weder Sie, die QA-Abteilung, noch der Kunde.

  • Das Nachladen der Benutzerstatistiken erfolgt in 90 % der Fälle in weniger als 100 ms, wenn es auf einem Rechner mit den in Anhang G Teil 2 angegebenen Leistungen und einer CPU-Last von weniger als 10 %, einer Speicherlast von weniger als 50 % und keinen aktiven R/W-Plattenoperationen getestet wird.

Dies ist eine Anforderung. Wenn Anhang G Teil 2 präzise genug ist, kann ich den Rechner mit ähnlicher Hardware nehmen und den Validierungstest in der QS-Abteilung durchführen, und ich werde immer ein binäres Ergebnis erhalten: bestanden oder nicht bestanden.

Ist dies eine funktionale Anforderung? Nein. Sie legt nicht fest, was das System tun muss. Wahrscheinlich gab es vorher eine funktionale Anforderung, die besagt, dass die Softwareanwendung in der Lage sein muss, die Benutzerstatistiken neu zu laden.

Handelt es sich um eine nicht-funktionale Anforderung? Ja, das ist sie. Sie spezifiziert eine Eigenschaft, die ein Produkt haben muss, d. h. die maximale/durchschnittliche Antwortzeit bei einem prozentualen Schwellenwert.

  • Die Anwendung ist in C# geschrieben.

Ist dies eine Anforderung? Ohne Kontext wissen wir das nicht wirklich. Es könnte ein Wunsch des leitenden Entwicklers sein, der mit dieser Anforderung eine spätere Diskussion mit seinen Kollegen über die zu verwendende Sprache vermeiden will. Es könnte auch eine Anforderung sein, die auf Hardware/Software, Legacy- oder Kompatibilitätselementen beruht. Wir wissen es nicht.

  • Die C#-Codebasis des Produkts folgt den Microsoft Minimum Recommended Rules und den Microsoft Globalization Rules.

Dies ist eine seltsame Sache. Ich persönlich würde es lieber nicht als Anforderung bezeichnen und es in ein separates Dokument aufnehmen, in dem die Standards und Best Practices beschrieben werden.

  • Das Hauptfenster der Anwendung hat einen blauen (#00f) 10px Rand mit rosa (#fcc) gefüllten Kreisen, wobei diese Kreise am inneren Rand des Randes platziert sind und einen Durchmesser von 3px haben, mit einem Abstand von 20px zueinander.

Dies ist eine Anforderung, und zwar eine nicht-funktionale. Sie spezifiziert etwas, das wir während der Validierungstests testen können, und sie spezifiziert eine Eigenschaft des Produkts, nicht das, was das Produkt tun soll.

  • Das Fahrzeugverfolgungssystem misst die Geschwindigkeit mit einer Genauigkeit von ±0,016 mph.

Ebenfalls eine nicht-funktionale Anforderung. Sie gibt einen messbaren Schwellenwert für die Genauigkeit des Systems an. Sie sagt nicht, was das System tun muss, sondern wie genau es seine Arbeit verrichtet. Aber Moment mal? Sie besagt, dass das Fahrzeugverfolgungssystem die Geschwindigkeit misst, nicht wahr? Also ist das auch eine funktionale Anforderung? Nein, denn wir legen den Schwerpunkt auf die Genauigkeit der Messung und nicht auf die Tatsache, dass die Messung durchgeführt wird.

  • Das Fahrzeugverfolgungssystem misst die Geschwindigkeit des Fahrzeugs.

Das ist eine funktionale Anforderung. Sie sagt nicht, wie das System funktioniert, sondern was es tut. Durch funktionale Anforderungen könnten wir erfahren, dass das Fahrzeugverfolgungssystem die Geschwindigkeit, die Batterieleistung, den Druck von ich weiß nicht was und ob die Lichter an sind oder nicht, misst.

  • Die Seiten der Website brauchen 850 ms zum Laden.

Dies ist keine Anforderung. Es wird versucht, eine zu sein, ist aber völlig ungültig. Wie würden Sie das bewerten? Welche Seiten? Alle? Getestet über ein lokales 1-Gbps-Netzwerk auf einem Quad-Core-Client-Rechner und einem Acht-Core-Server mit SSDs, die zu 2 % ausgelastet sind, oder über ein Modem eines alten und miserablen Laptops, während die Website auf einem kleinen Server gehostet wird, der zu 99 % ausgelastet ist? Was ist mit „laden“ gemeint? Bedeutet es das Herunterladen der Seite? Herunterladen und Anzeigen der Seite? Das Senden der POST-Anforderung mit einigen großen Daten, das Laden der Antwort und das Anzeigen der Seite?

Abschließend sei gesagt, dass eine nicht-funktionale Anforderung immer eine Anforderung ist, was bedeutet, dass sie etwas beschreibt, das völlig objektiv ist und durch einen automatisierten oder manuellen Validierungstest überprüft werden kann, aber anstatt zu sagen, was das System tut, erklärt sie, wie das System etwas tut oder wie das System selbst ist.

 

Nicht- Funktionale Testing-Tools

Die folgende Abbildung zeigt die Arten von nicht-funktionalen Tests:

 

Die verschiedenen Arten von nicht-funktionalen Tests

Im Folgenden sind die gängigsten Arten von nicht-funktionalen Tests aufgeführt.

  • Performance Testing
  • Load Testing
  • Failover Testing
  • Compatibility Testing
  • Usability Testing
  • Stress Testing
  • Maintainability Testing
  • Scalability Testing
  • Volume Testing
  • Security Testing
  • Disaster Recovery Testing
  • Compliance Testing
  • Portability Testing
  • Efficiency Testing
  • Reliability Testing
  • Baseline Testing
  • Endurance Testing
  • Documentation Testing
  • Recovery Testing
  • Internationalization Testing
  • Localization Testing

Im folgenden eine kurze Übersicht am Beispiel Load-und Performance Testing

Leistungstests:

Leistungstest bewerten die Gesamtleistung des Systems.

Die Schlüsselelemente sind wie folgt:

  • Es wird überprüft, ob das System die erwartete Antwortzeit einhält.
  • Bewertet, ob die wesentlichen Elemente der Anwendung die gewünschte Reaktionszeit einhalten.
  • Die Leistungstests können auch als Teil der Integrations- und Systemtests durchgeführt werden.

Tools die genutzt werden können:

  • JMeter
  • Loadster
  • Loadrunner
  • Loadstorm
  • Neoload
  • Forecast
  • Load Complete
  • Webserver Stress Tool
  • WebLoad Professional
  • Loadtracer
  • vPerformer