it-swarm-eu.dev

Funktionale oder nicht funktionale Anforderung?

Ich frage mich über funktionale oder nicht funktionale Anforderungen. Ich habe viele verschiedene Definitionen für diese Begriffe gefunden und kann einige meiner Anforderungen nicht der richtigen Kategorie zuordnen.

Ich frage mich über Anforderungen, die nicht mit einer Aktion verbunden sind oder zusätzliche Bedingungen haben, zum Beispiel:

  1. In der Liste der ausgewählten Geräte kann das Gerät wiederholt werden.
  2. Die Datenbank muss mindestens 100 Elemente enthalten
  3. Die Währung eines bestimmten Wertes muss in USD angegeben sein.
  4. Das Gerät muss einen Namen und einen Stromverbrauchswert in Watt haben.

sind diese Anforderungen funktional oder nicht funktionsfähig?

34
Piotr Müller

Funktionale Anforderungen definieren was das System oder die Anwendung - speziell im Kontext einer externen Interaktion (mit einem Benutzer oder mit einem anderen System).

Bei einer neuen Bestellung zeigt das System die Gesamtkosten an und muss vom Benutzer bestätigt werden. Dies ist eine funktionale Anforderung. es beschreibt eine Funktion des Systems.

Weitere Informationen finden Sie unter Wikipedia: Functional Requirement .

Nicht funktionale Anforderungen sind alle Anforderungen, die nicht das Eingabe-/Ausgabeverhalten des Systems beschreiben. Beachten Sie, dass wir immer noch über Anforderungen sprechen, nicht über Implementierungsdetails. Nur weil wir den Ausdruck "nicht funktionsfähig" verwenden, heißt das nicht alles ist ein faires Spiel in diesem Abschnitt.

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

Dies sind alles Querschnittsthemen, die sich auf jedes "Feature" auswirken, aber selbst nicht wirklich Features sind. Sie ähneln eher Feature-Metadaten und beschreiben nicht nur ob das System tut, was es soll, sondern auch wie gut es tut es. Nehmen Sie diese Analogie jedoch nicht zu weit - es ist nur eine Analogie.

Nichtfunktionale Anforderungen sind nicht subjektiv oder handgewellt, im Gegensatz zu dem, was einige Leute hier zu vermuten scheinen. Tatsächlich ist ihnen sollte eine feste Metrik zugeordnet (d. H. Eine Antwortzeit von nicht mehr als 100 ms). NF-Anforderungen sind auch keine Implementierungsdetails oder Aufgaben wie "Upgrade des ORM-Frameworks" - keine Ahnung, woher jemand diese Idee haben würde.

Weitere Details unter Wikipedia: Nicht funktionale Anforderung .


Um die Beispiele in der Frage speziell anzusprechen:

  1. In der Liste der ausgewählten Geräte kann das Gerät wiederholt werden.

    • Ganz klar eine funktionale Anforderung. Beschreibt, wie die Ausgabe des Systems aussieht.
  2. Die Datenbank muss mindestens 100 Elemente enthalten

    • Klingt nach einer Geschäftsregel, also auch nach einer funktionalen Anforderung. Es scheint jedoch unvollständig. Was ist der Grund für diese Regel? Was passiert/sollte passieren, wenn die Datenbank weniger als 100 Elemente enthält?
  3. Die Währung eines bestimmten Wertes muss in USD angegeben sein.

    • Funktionsanforderung, aber nicht wirklich richtig angegeben. Ein nützlicherer Wortlaut wäre: Das System soll eine Währung (USD) unterstützen. Dies würde natürlich geändert, wenn mehr als eine Währung unterstützt werden müsste und die Anforderung dann Informationen enthalten müsste über Währungsumrechnungen und so weiter.
  4. Das Gerät muss einen Namen und einen Stromverbrauchswert in Watt haben.

    • Nicht wirklich irgendeine Anforderung, dies ist eher eine technische Spezifikation. Eine funktionale Anforderung würde angegeben werden als die Nennleistung wird in Watt angenommen. Wenn es mehr als eine Einheit gibt, sollten die funktionalen Anforderungen wie bei der Währung Abschnitte über Einheitenumrechnungen enthalten, wobei/wie sie konfiguriert sind usw. (falls zutreffend).
41
Aaronaught

Es gibt bereits eine ausgezeichnete Antwort von Aaronaught, aber da jetzt andere Antworten entfernt wurden, die völlig falsch waren, was eine nicht funktionierende Anforderung ist, halte ich es für nützlich, ein paar Erklärungen hinzuzufügen, um die Fehler darüber zu vermeiden, was a nicht funktionale Anforderung ist.


Eine nicht funktionale Anforderung ist "eine Qualität oder Eigenschaft, die das Produkt haben muss" ¹. James Taylor sagt, dass eine nicht funktionale Anforderung "[...] [dennoch] eine Anforderung ist und für den Kunden wichtig ist - manchmal sogar wichtiger als eine funktionale Anforderung" . Anschließend nennt er zwei Beispiele: das Logo des Produkts sowie die Genauigkeit und Zuverlässigkeit der Geräte. Diese beiden Beispiele zeigen sehr gut, dass:

  • Die nicht funktionalen Anforderungen sind kein Marketing-Jibber-Jabber wie: "Internet ist heutzutage wichtig und wir wollen eine Website haben".
  • Die nicht funktionalen Anforderungen betreffen die Kunden, da sie ihre Produktivität und die Fähigkeit, das Produkt selbst zu verwenden, stark beeinträchtigen können.
  • Die nicht funktionalen Anforderungen sind absolut objektiv.

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

Denken Sie daran, dass die Liste der Anforderungen wie ein Vertrag ist (und in den meisten Fällen Teil eines Vertrags ist). Es wird vom Kunden und der Entwicklungsfirma unterzeichnet und im Falle eines Rechtsstreits legal verwendet, um festzustellen, ob Sie Ihre Arbeit korrekt ausgeführt haben. Was ist, wenn ich Ihnen ein Softwareprodukt bestelle, "das Produkt muss großartig sein" und die Zahlung verweigere, wenn das Produkt fertig ist, denn für mich ist das, was Sie tatsächlich getan haben, kein tolles Produkt?

Schauen wir uns also einige Beispiele an.

1. Das Softwareprodukt reagiert auf den Endbenutzer.

Dies ist keine Voraussetzung. Keine funktionale. Nicht funktionsunfähig. Es ist einfach keine Voraussetzung. Überhaupt nicht. Es hat den Wert Null. Sie können beim Validierungstest nicht überprüfen, ob das Softwaresystem diese Anforderung erfüllt. Weder Sie - die QS-Abteilung noch der Kunde.

2. Das Neuladen der Benutzerstatistik erfolgt 90% der Zeit unter 100 ms, wenn es auf einer Maschine mit den in Anhang G Teil 2 angegebenen Leistungen und einer Last unter 10% für die CPU und unter 50% für den Speicher getestet wird und keine aktiven R/W-Plattenoperationen.

Es ist eine Voraussetzung. Wenn der Anhang G Teil 2 genau genug ist, kann ich die Maschine mit der ähnlichen Hardware nehmen und den Validierungstest in der QS-Abteilung durchführen, und ich erhalte immer ein binäres Ergebnis: bestanden oder nicht bestanden.

Ist es eine funktionale Anforderung? Nein. Es gibt nicht an , was das System tun muss. Es gab wahrscheinlich zuvor eine funktionale Anforderung, die angab, dass die Softwareanwendung in der Lage sein muss, Benutzerstatistiken neu zu laden.

Ist es eine nicht funktionale Anforderung? Es ist. Es gibt eine Eigenschaft an, die ein Produkt haben muss, d. H. Die maximale/durchschnittliche Antwortzeit angesichts des prozentualen Schwellenwerts.

. Die Anwendung ist in C # geschrieben.

Ist das eine Voraussetzung? Wir wissen es nicht wirklich ohne Kontext. Es könnte ein Wunsch des Hauptentwicklers sein, der durch Einfügen dieser Anforderung eine spätere Diskussion mit seinen Kollegen über die zu verwendende Sprache vermeiden möchte. Dies kann auch eine Anforderung sein, die auf Hardware/Software, Legacy- oder Kompatibilitätselementen basiert. Wir wissen es nicht.

4. Die C # -Codebasis des Produkts entspricht den empfohlenen Microsoft-Mindestregeln und den Microsoft-Globalisierungsregeln.

Das ist eine seltsame Sache. Persönlich würde ich es lieber nicht als Anforderung bezeichnen und es in ein separates Dokument aufnehmen, in dem die Standards und Best Practices angegeben sind.

5. Das Hauptfenster der Anwendung hat einen blauen (# 00f) 10px-Rand mit rosa (#fcc) gefüllten Kreisen. Diese Kreise befinden sich am inneren Rand des Randes und haben einen Durchmesser von 3px, getrennt durch 20px voneinander.

Es ist eine Anforderung und eine nicht funktionierende. Es gibt etwas an, das wir während des Validierungstests testen können, und es gibt eine Eigenschaft des Produkts an, nicht , was das Produkt tun soll.

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

Auch eine nicht funktionale Anforderung. Es gibt eine messbare Schwelle für die Präzision des Systems. Es sagt nicht, was das System tun muss, aber wie genau es seine Arbeit macht. Aber warte? Es sagt, dass das Fahrzeugverfolgungssystem die Geschwindigkeit misst , nicht wahr? Also ist es auch eine funktionale Anforderung? Nun, nein, da wir einen Akzent auf die Genauigkeit der Messung legen, nicht auf die Tatsache, dass die Messung durchgeführt wird.

7. Das Fahrzeugverfolgungssystem misst die Geschwindigkeit des Fahrzeugs.

Jetzt ist es eine funktionale Anforderung. Es sagt nicht, wie das System funktioniert, sondern was es tut. Durch funktionale Anforderungen konnten wir lernen, dass das Fahrzeugverfolgungssystem die Geschwindigkeit, die Batterieleistung, den Druck von Ich weiß nicht was und ob die Lichter an sind oder nicht, misst.

8. Das Laden der Seiten der Website dauert 850 ms.

Dies ist keine Voraussetzung. Is versucht eins zu sein, ist aber völlig ungültig. Wie würden Sie das nutzen? Welche Seiten? Alle? Getestet über ein lokales 1-Gbit/s-Netzwerk auf einem Quad-Core-Client-Computer und einem 8-Core-Server mit SSDs, die zu 2% verwendet werden, oder über ein Modem eines alten und beschissenen Laptops, während die Website von einem kleinen Server gehostet wird, der zu 99% verwendet wird ? Was ist mit "laden" gemeint? Bedeutet das Herunterladen der Seite? Herunterladen und anzeigen? Senden Sie die POST - Anfrage mit einigen großen Datenmengen, laden Sie dann die Antwort und zeigen Sie sie an?

Zusammenfassend lässt sich sagen, dass eine nicht funktionierende 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, anstatt zu sagen, was das System macht, es erklärt wie das System etwas macht oder wie das System ist selbst .


¹ Verwalten von Informationstechnologieprojekten: Anwenden von Projektmanagementstrategien auf Software-, Hardware- und Integrationsinitiativen, James Taylor, ISBN: 0814408117.

18

A funktionale Anforderung beschreibt das Ergebnis der Interaktion mit dem System (was das System in bestimmten Situationen tut), während nicht funktionale Anforderung normalerweise auf Besonderheiten in Bezug auf Leistung, Kapazität und Reaktion verweist Zeit usw. Dinge, die keine Funktionalität, keinen Prozess im System oder das Ergebnis einer Interaktion darstellen.

Allerdings ist die nicht funktionale Anforderung, die Sie beschreiben, tatsächlich eine funktionale Anforderung mit einer technischen Spezifikation (was sie tatsächlich zu einer schlechten Anforderung machen würde). Ein Beispiel für eine nicht funktionierende Anforderung für Ihren Fall wäre etwa Folgendes:

- Die Benutzeroberfläche darf nicht gesperrt sein, während die Animation der Würfel ausgeführt wird.

Benutzeranforderungen sind normalerweise spezifische Benutzeroberflächenanforderungen, die je nach Kontext funktional oder nicht funktionsfähig sind, während Systemanforderungen (z. B. gleichzeitige Benutzerkapazität) normalerweise die meisten sind die Zeit nicht funktionsfähig.

Nur um einige gute Antworten zu ergänzen, werden nicht-funktionale Anforderungen manchmal als "Fähigkeiten" bezeichnet - Eigenschaften, die das System zusätzlich zu seiner einfachen Funktionalität besitzen muss. "Fähigkeiten" umfassen Verfügbarkeit, Benutzerfreundlichkeit, Sicherheit, Flexibilität - und noch subjektivere Ästhetik.

Einige davon sind sehr schwer zu spezifizieren und zu bewerten. Trotzdem sind sie wichtig. Wenn Sie sich vertraglich bei ihnen anmelden, sollten Sie die bedeutungslosen handgewellten Versionen vermeiden, z. "Das System muss sicher sein". Das Problem beim Versuch, solche Anforderungen festzunageln, besteht darin, dass die Menschen eher zu den Dingen tendieren, die leicht messbar sind, als zu den Dingen, die wichtig sind (und die Anforderungen können durchaus von Personen geschrieben werden, die keine Grundlage für die relevanten Fachgebiete haben ). Das Endergebnis ist, dass Sie im Allgemeinen Systeme haben, die weder sicher, verwendbar noch flexibel sind (die Verfügbarkeit ist nicht so schwer zu spezifizieren und zu messen, obwohl sie immer noch viele Kopfschmerzen verursacht).

Hier gibt es kulturelle Unterschiede zwischen Leuten, die sich mit Verträgen und formalen Dingen befassen, und Leuten, die sich mit allgemeineren Analysen, Architekturen, Forschungen usw. befassen. Eine vage handgewellte Anforderung ist immer noch eine Anforderung soweit die Letzteres ist besorgniserregend, weil es Dinge ausdrückt, die für den Kunden wichtig sind, auch wenn sie vollständig mit den Vertragsleuten sympathisieren, dass es keine nützliche vertragliche Anforderung ist, bis es im Detail untersucht und gründlich festgenagelt wurde.

Ein letzter Punkt: Wenn Sie (noch) kein objektives Maß für eine "Fähigkeit" finden können, heißt das nicht, dass der Kunde es nicht benötigt. Vage! = Unnötig. Dies kann jedoch bedeuten, dass wir bessere Methoden entwickeln müssen, um solche Dinge zu messen, nicht funktionale Anforderungen schrittweise zu ermitteln und zu verfeinern oder auf eine Weise (Agile usw.) zu kontrahieren, die ohne vorherige objektive Maßnahmen für alles funktionieren kann.

2
DNA

Diese Kommentare sind alle sehr gut, aber sie sind viel zu viel gekocht und bieten keine klare Vorlage für die Arbeit. Wäre es nicht klar, es wie folgt anzugeben:

Meiner Meinung nach ist eine funktionale Anforderung das, was der Benutzer bei der Verwendung der Anwendung erlebt. Diese Anforderung muss erfüllt sein, wenn ein Entwickler versucht, dies von Grund auf neu zu implementieren, Verbesserungen oder Modifikationen vorzunehmen. Beispiel: Der Benutzer sollte sich anmelden. Wenn Sie beispielsweise eine neue Methode zum Ausführen der Anwendung über eine Eingabeaufforderung hinzufügen, muss sich der Benutzer weiterhin anmelden.

Eine nicht funktionierende Anforderung tritt unter der Motorhaube auf. Der Benutzer ist sich dessen nicht bewusst, aber es muss vorhanden sein, jedoch ist es implementiert. Zum Beispiel: Die Anwendung sollte in C # entwickelt werden. Wenn es in einer anderen Sprache entwickelt wurde, wird der Benutzer es nicht bemerken. Dies kann jedoch erforderlich sein, da es auf vorhandenem Code basiert. Ein anderes Beispiel wäre, dass es auf einem bestimmten Server installiert werden muss. Das Verschieben von Servern wird vom Benutzer nicht bemerkt.

0