Ich wundere 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 wundere mich über Anforderungen, die nicht mit einer Aktion verbunden sind oder einige zusätzliche Bedingungen haben, zum Beispiel:
- In der Liste der ausgewählten Geräte kann das Gerät wiederholt werden.
- Die Datenbank muss mindestens 100 Elemente enthalten
- Eine Währung von irgendeinem Wert muss in USD sein.
- Das Gerät muss einen Namen und einen Stromverbrauchswert in Watt haben.
Sind diese Anforderungen funktionsfähig oder nicht funktionsfähig?
requirements
Piotr Müller
quelle
quelle
Antworten:
Funktionsanforderungen definieren, was das System oder die Anwendung tun wird - insbesondere 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. Das ist eine funktionale Anforderung; es beschreibt eine Funktion des Systems.
Weitere Informationen finden Sie in Wikipedia: Funktionale Anforderungen .
Nichtfunktionale Anforderungen sind alle Anforderungen, die das Eingabe- / Ausgabeverhalten des Systems nicht beschreiben. Beachten Sie, dass es sich immer noch um Anforderungen und nicht um Implementierungsdetails handelt. Nur weil wir den Ausdruck "nicht funktionsfähig" verwenden, bedeutet dies nicht, dass in diesem Abschnitt alles fair ist.
Die häufigsten nichtfunktionalen 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 Querschnittsthemen, die sich auf jedes "Merkmal" auswirken, jedoch nicht wirklich für sich selbst stehen. Sie ähneln eher Feature-Metadaten und beschreiben nicht nur, ob das System das tut, was es soll, sondern auch, wie gut es es tut. Nehmen Sie diese Analogie nicht zu weit - es ist nur eine Analogie.
Nicht-funktionale Anforderungen sind nicht subjektiv oder von Hand gewellt, im Gegensatz zu dem, was manche Leute hier vermuten. Tatsächlich sollte ihnen eine harte Metrik zugeordnet sein (dh eine Reaktionszeit von nicht mehr als 100 ms). NF-Anforderungen sind auch keine Implementierungsdetails oder Aufgaben wie "Upgrade des ORM-Frameworks" - kein Hinweis darauf, woher jemand diese Idee hätte.
Weitere Informationen bei Wikipedia: Nichtfunktionale Anforderung .
Um die Beispiele in der Frage spezifisch anzusprechen:
In der Liste der ausgewählten Geräte kann das Gerät wiederholt werden.
Die Datenbank muss mindestens 100 Elemente enthalten
Eine Währung von irgendeinem Wert muss in USD sein.
Das Gerät muss einen Namen und einen Stromverbrauchswert in Watt haben.
quelle
Es gibt bereits eine ausgezeichnete Antwort von Aaronaught, aber da es andere Antworten gab, die jetzt entfernt wurden und in Bezug auf eine nicht funktionierende Anforderung völlig falsch waren, halte ich es für nützlich, ein paar Erklärungen hinzuzufügen, um die Fehler bei einer zu vermeiden nichtfunktionale Anforderung ist.
Eine nichtfunktionale Anforderung ist "eine Qualität oder Eigenschaft, die das Produkt haben muss" ¹. James Taylor sagt, dass eine nicht funktionierende Anforderung "[...] dennoch eine Anforderung ist und für den Kunden wichtig ist - manchmal sogar wichtiger als eine funktionierende Anforderung" . Anschließend nennt er zwei Beispiele: das Logo des Produkts sowie die Genauigkeit und Zuverlässigkeit der Ausrüstung. Diese beiden Beispiele zeigen sehr gut, dass:
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 subjektivem Material zu erstellen . Der einzige Zweck der Anforderungsliste besteht darin, die eindeutigen 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 erklärungsbedürftiger Wunsch.
Denken Sie daran, dass die Liste der Anforderungen einem Vertrag gleicht (und in den meisten Fällen Teil eines Vertrags ist). Es wird vom Kunden und der Entwicklungsfirma unterzeichnet und im Falle eines Rechtsstreits wird es rechtlich verwendet, um festzustellen, ob Sie Ihre Arbeit korrekt ausgeführt haben. Was passiert, wenn ich ein Softwareprodukt bestelle, festlege, dass "das Produkt großartig sein muss", und die Zahlung verweigere, wenn das Produkt fertig ist, weil für mich das, was Sie tatsächlich getan haben, kein großartiges Produkt ist?
Schauen wir uns einige Beispiele an.
1. Das Softwareprodukt reagiert auf den Endbenutzer.
Dies ist keine Voraussetzung. Kein funktionaler. Kein nicht funktionsfähiger. Es ist einfach keine Voraussetzung. Überhaupt. Es hat den Wert Null. Sie können während des Validierungstests nicht überprüfen, ob das Softwaresystem diese Anforderung erfüllt. Weder Sie - die QS-Abteilung noch der Kunde.
2. Das erneute Laden der Benutzerstatistik führt zu 90% der Zeit unter 100 ms aus. Bei Tests auf einem Computer mit den in Anhang G Teil 2 angegebenen Leistungen und einer Auslastung von weniger als 10% für die CPU, weniger als 50% für den Arbeitsspeicher und keinen aktiven R / W-Festplattenvorgängen.
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 eine funktionale Anforderung, die angab, dass die Softwareanwendung in der Lage sein muss, Benutzerstatistiken neu zu laden.
Ist es eine nicht funktionierende Anforderung? Es ist. Es gibt eine Eigenschaft an, die ein Produkt haben muss, dh die maximale / durchschnittliche Antwortzeit unter Berücksichtigung des prozentualen Schwellenwerts.
3. Die Anwendung ist in C # geschrieben.
Ist das eine Voraussetzung? Ohne Kontext wissen wir es nicht wirklich. Es könnte ein Wunsch des leitenden Entwicklers sein, durch das Einfügen dieser Anforderung eine spätere Diskussion mit seinen Kollegen über die zu verwendende Sprache zu vermeiden. 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 eher nicht als Anforderung bezeichnen und es in ein separates Dokument einfügen, in dem die Standards und Best Practices aufgeführt 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, der um 20px voneinander getrennt ist.
Es ist eine Anforderung und eine nicht funktionierende. Es gibt etwas an, das wir während des Validierungstests testen dürfen, und es gibt eine Eigenschaft des Produkts an, nicht die, für die das Produkt vorgesehen ist.
6. Das Fahrzeugverfolgungssystem misst die Geschwindigkeit mit einer Genauigkeit von ± 0,016 km / h.
Auch eine nicht funktionierende Anforderung. Es gibt eine messbare Schwelle für die Präzision des Systems. Es sagt nicht aus, was das System tun muss, sondern wie genau es seine Arbeit erledigt. Aber warte? Es sagt, dass das Fahrzeug-Tracking-System 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 Fahrzeug-Tracking-System die Geschwindigkeit, die Batterieleistung und den Druck misst, von dem ich nicht weiß, was und ob die Lichter an sind oder nicht.
8. Die Seiten der Website dauern 850 ms. Laden.
Dies ist keine Voraussetzung. Ist versucht einer zu sein, ist aber total ungültig. Wie würden Sie das verwerten? 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 ist eine nicht-funktionale Anforderung immer eine Anforderung, was bedeutet, dass sie etwas beschreibt, das absolut objektiv ist und durch einen automatisierten oder manuellen Validierungstest überprüft werden kann. Statt jedoch zu sagen, was das System tut, wird erläutert, wie das System arbeitet tut etwas oder wie das System selbst ist .
¹ Verwalten von Informationstechnologieprojekten: Anwenden von Projektmanagementstrategien auf Software-, Hardware- und Integrationsinitiativen, James Taylor, ISBN: 0814408117.
quelle
Eine funktionale Anforderung beschreibt das Ergebnis der Interaktion mit dem System (was das System in bestimmten Situationen tut), während sich eine nicht funktionale Anforderung normalerweise auf Besonderheiten wie Leistung, Kapazität, Reaktionszeit usw. bezieht. Dinge, die keine Funktionalität darstellen, a Prozess im System oder das Ergebnis einer Interaktion.
Abgesehen davon handelt es sich bei der von Ihnen beschriebenen nicht-funktionalen Anforderung tatsächlich um eine funktionale Anforderung mit einer technischen Spezifikation (die es 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 des Würfels ausgeführt wird.
Benutzeranforderungen sind in der Regel spezifische Benutzeroberflächenanforderungen, die je nach Kontext funktionsfähig oder nicht funktionsfähig sind, während Systemanforderungen (z. B. gleichzeitige Benutzerkapazität) in der Regel nicht funktionsfähig sind.
quelle
Nur um einige der vorhandenen guten 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 anmelden, sollten Sie die bedeutungslosen Hand-Wavy-Versionen vermeiden, z. B. "Das System muss sicher sein". Das Problem bei dem Versuch, solche Anforderungen zu präzisieren, besteht darin, dass die Menschen eher zu den leicht messbaren Dingen tendieren als zu den Dingen, die wichtig sind (und die Anforderungen können durchaus von Menschen geschrieben werden, die nicht mit den relevanten Fachgebieten vertraut sind ). Das Endergebnis ist, dass Sie im Allgemeinen mit Systemen enden, die weder sicher, verwendbar noch flexibel sind (Verfügbarkeit ist nicht so schwierig zu spezifizieren und zu messen, obwohl es immer noch viele Kopfschmerzen verursacht).
Es gibt kulturelle Unterschiede hier zwischen Leuten , die mit Verträgen und formalen Sachen beschäftigen, und Leuten , die in allgemeineren Analyse beschäftigen, Architektur, Forschung usw. Ein vagee Hand wellig Voraussetzung ist immer noch eine Anforderung , soweit letztere betrifft, weil es zum Ausdruck bringt Dinge, die für den Kunden wichtig sind, auch wenn er den Vertragspartnern völlig klar ist, dass dies keine sinnvolle Vertragsanforderung ist, bis sie im Detail untersucht und gründlich festgenagelt wurden.
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 braucht. Vage! = Unnötig. Dies kann jedoch bedeuten, dass wir bessere Methoden entwickeln müssen, um solche Dinge zu messen, nichtfunktionale 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.
quelle
Diese Kommentare sind alle sehr gut, aber sie sind überarbeitet und bieten keine klare Vorlage zum Arbeiten. Wäre es nicht klar zu spezifizieren als:
Meiner Meinung nach ist eine funktionale Anforderung, was der Benutzer bei der Verwendung der Anwendung erlebt. Es ist eine Anforderung, die erfüllt werden muss, wenn ein Entwickler versucht, dies von Grund auf neu zu implementieren, Verbesserungen vorzunehmen oder Änderungen vorzunehmen. Beispiel: Der Benutzer sollte sich anmelden. Nehmen wir an, Sie müssen sich weiterhin anmelden, wenn Sie eine neue Methode zum Ausführen der Anwendung über eine Eingabeaufforderung hinzufügen.
Eine nicht funktionierende Anforderung tritt unter der Motorhaube auf. Der Benutzer ist sich dessen nicht bewusst, aber es muss vorhanden sein, wie auch immer es implementiert ist. Zum Beispiel: Die Anwendung sollte in C # entwickelt werden. Wenn es in einer anderen Sprache entwickelt wird, wird der Benutzer 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 sein muss. Das Verschieben von Servern wird vom Benutzer nicht bemerkt.
quelle
Funktional oder nicht funktional? Ich würde auch nicht sagen. Die meisten, wenn nicht alle aufgeführten Beispiele sehen für mich wie Geschäftsregeln aus (Angabe prozessbezogener Einschränkungen und Entscheidungsregeln, denen Systemprozesse folgen müssen).
Sie sind etwas, das viele Ingenieure vergessen oder nicht kennen, da Geschäftsregeln in der Regel als Teil der Geschäftsanalyse erfasst werden (und häufig in Spezifikationen für funktionale Anforderungen eingebettet sind und nicht extern referenziert werden).
quelle
Eine funktionale Anforderung kann oder wird das System normalerweise erfüllen. Es kann als Ergebnis einer Handlung (eines negativen Ergebnisses) ausgedrückt werden. Eine nicht-funktionale Anforderung ist etwas, das den Kunden / Endbenutzer nicht interessiert und das das Ergebnis nicht beeinflusst - z. B.
- Windows hat einen blauen Rand mit rosa Punkten. - Das Programm wird in Java geschrieben.
- Alles, was mit Codierungsstandards, -methoden und -prozessen zu tun hat.
Seien Sie jedoch gewarnt, dass nicht-funktionale Anforderungen von Kunden in funktionale Anforderungen umgewandelt werden können. Beispiele könnten sein - Das Programm wird in Erlang geschrieben, weil der Kunde einen Zeitschriftenartikel darauf gelesen hat und es in Erlang geschrieben haben möchte. - Das Programm muss DB 2 verwenden, da der Kunde es auf seinen vorhandenen DB 2-Systemen ausführen wird. Er verfügt über langjährige Erfahrung und ein IT-Team, das mit dieser Plattform vertraut ist.
- Der Quellcode muss alle MISRA-Empfehlungen erfüllen.
Fazit: Wenn sich der Kunde darum kümmert, handelt es sich um eine funktionale Anforderung, ansonsten handelt es sich um eine nicht funktionale Anforderung oder möglicherweise auch nicht um eine Anforderung.
quelle
Ich denke, die funktionalen Anforderungen sind notwendig, um das System und sein Verhalten zu beschreiben, aber nicht-funktionale Anforderungen sind für das System nicht erforderlich und werden nicht während der Aushandlung des Entwurfs des Systems erhoben , Sicherheit, Wartbarkeit usw. aus dem gebauten System.
quelle