Funktionale oder nichtfunktionale Anforderung?

34

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:

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

Sind diese Anforderungen funktionsfähig oder nicht funktionsfähig?

Piotr Müller
quelle
4
Ich denke, die Unterscheidung zwischen "funktional" und "nicht funktional" ist irreführend und führt dazu, dass Software eine schlechte Bedienbarkeit aufweist. Ich habe festgestellt, dass das Nachdenken über "Endbenutzerfunktionen" und "Betriebsfunktionen" zu einer besseren Software führt: blog.softwareoperability.com/2013/04/08/… (mein Beitrag)
Matthew Skelton
@MatthewSkelton Ich konnte nicht sagen, ob (2.) eine En-User-Funktion oder eine Betriebsfunktion ist. Scheint ein "Test-Feature" zu sein.
Martin Thoma
@moose - Die Anforderung, dass die DB bestimmte Parameter einhält / einhält / 100 Elemente verwendet, ist eher eine Betriebsanforderung, obwohl dies die Endbenutzererfahrung beeinträchtigen kann, wenn die Leistung beeinträchtigt wird. Letztendlich würden wir wahrscheinlich etwas mehr Kontext zu den Anforderungen im OP benötigen, um in F und NF aufteilen zu können, obwohl ich - wie ich angedeutet habe - denke, dass dies ohnehin eine etwas falsche Unterscheidung ist :)
Matthew Skelton
Rückblickend: Die 10
wichtigsten

Antworten:

41

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:

  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. Eine Währung von irgendeinem Wert muss in USD sein.

    • Funktionale Anforderung, aber keine genau festgelegte. Eine nützlichere Formulierung wäre: Das System soll eine Währung (USD) unterstützen. Offensichtlich würde dies geändert, wenn mehr als eine Währung unterstützt werden müsste, und dann müsste die Anforderung Informationen über Währungsumrechnungen usw. enthalten.
  4. Das Gerät muss einen Namen und einen Stromverbrauchswert in Watt haben.

    • Eigentlich keine Anforderung, sondern eher eine technische Spezifikation. Eine funktionale Anforderung wird angegeben, da die Nennleistung in Watt angenommen wird. Wenn es mehr als eine Maßeinheit gibt, sollten die funktionalen Anforderungen wie bei der Währung Abschnitte über Einheitenumrechnungen, wo / wie sie konfiguriert sind usw. (falls zutreffend) enthalten.
Aaronaught
quelle
Nett! Was ich hinzufügen möchte, ist, dass funktionale Anforderungen sich nicht nur mit Interaktionen mit der externen Umgebung befassen müssen (ein verwandtes Konzept sind "Schnittstellenanforderungen" mit anderen Systemen). Ein Gegenbeispiel hierfür wäre "Das System muss alle 60 Minuten die Datenbank der Benutzer indizieren". Dies ist eindeutig intern.
Aram Kocharyan
2
@AramKocharyan: Das ist keine funktionale Anforderung. Es ist klar, dass sich irgendwo eine Kunden-SLA versteckt, und das ist die funktionale Anforderung. "Kontaktaktualisierungen müssen innerhalb von 60 Minuten bearbeitet werden, um einen zeitnahen Kundenservice / Marketing zu unterstützen" - das ist eine interne, funktionale Anforderung. "Die Datenbank der Benutzer indizieren" ist überhaupt keine Anforderung, sondern eine Implementierung. Eine andere Möglichkeit, diese SLA zu erfüllen, besteht beispielsweise darin, die Hintergrundindizierung in Echtzeit zu verwenden oder die Notwendigkeit der Indizierung vollständig zu beseitigen, indem ein Service Broker oder ein Bus verwendet und Aktualisierungen nahezu in Echtzeit verarbeitet werden.
Aaronaught
+1! darauf hin , dass das ist im Kern der in Bezug auf der Subjektivität von nicht-funktionalen Anforderungen, kann es ausreichend sein , sehr soliden RESTful - Architektur en.wikipedia.org/wiki/...
fr_andres SupportsMonicaCellio
18

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:

  • Die nicht-funktionalen Anforderungen sind kein Marketing-Jibber-Jabber wie: "Internet ist heutzutage wichtig und wir wollen eine Website haben".
  • Die nichtfunktionalen 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 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.

Arseni Mourzenko
quelle
+1 für Details. Ich stimme Ihrer Meinung in (1) nicht zu, Sie sagen "dies ist keine Voraussetzung". Ich denke, es ist eine Anforderung, aber der Business Analyst muss sie zu einer "messbaren" Anforderung machen, bevor sich das Team dazu verpflichtet fühlt. Ich mochte auch Ihre Verwendung des Wortes "Wunsch" und Ihre Unterscheidung zwischen "Wünsche" und "Anforderungen"
NoChance
@Emmad Kareem: Du hast recht. Ich beschränke mich auf rein technische Anforderungen, dh die Anforderungen, die Entwickler und QS verwenden würden. Für Business-Analysten liegen die Dinge etwas anders, und einige Elemente, die ich als nicht als Anforderungen qualifiziert habe, wären in der Tat absolut zutreffend.
Arseni Mourzenko
Ich würde argumentieren "Die Anwendung ist in C # geschrieben." ist eine Einschränkung, keine funktionale Anforderung, da sie nicht das Verhalten des Systems beschreibt, sondern dem Lösungsraum eine Beschränkung zuschreibt.
Aram Kocharyan
@AramKocharyan: Deshalb habe ich gesagt, dass wir nicht wissen, ob diese Aussage überhaupt erforderlich ist.
Arseni Mourzenko
3

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.

Juan Carlos Eduardo Romaina Ac
quelle
2

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.

DNA
quelle
0

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.

Mehrdad Ordoukhani
quelle
-1

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).

Kanwar
quelle
Warum sehen die aufgeführten Beispiele für Sie nach Geschäftsregeln aus?
Mücke
-4

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.

mattnz
quelle
1
-1. Beiden Kunden und Endverbraucher tun kümmern sich um nicht-funktionale Anforderungen, da sie direkt ihre Produktivität auswirken. Außerdem können nichtfunktionale Anforderungen nicht von Kunden in funktionale Anforderungen umgewandelt werden: Es liegt nicht am Kunden, zu entscheiden, ob eine Anforderung funktionsfähig oder nicht funktionsfähig ist.
Arseni Mourzenko
Nicht-Funk kann auch in die Qualitäten "Entwicklung" (Pflege der Entwickler, z. B. Wartbarkeit) und "Betrieb" (Pflege der Benutzer, z. B. Bedienbarkeit) unterteilt werden
Aram Kocharyan
-4

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.

Tibakula Dawson
quelle