In der Technik, den Ingenieurwissenschaften und der Informatik ist eine Anforderung (englisch requirement) eine spezifische Angabe, die die zu erfüllende Funktionalität, Eigenschaft oder Leistung eines Produkts, Systems oder Prozesses beschreibt.
Technischen Anforderungen grenzen sich in ihrer Charakteristik und Ausprägung von anderen Anforderungen ab. In der Regel unterscheiden sie sich in ihrer Art, ihrer Struktur und ihren Inhalten. Genauer gesagt existieren Anforderungen auf verschiedenen Ebenen, die die verschiedenen Detailtiefen eines zu bauenden Produkts beschreiben. Ein Produkt kann eine Hardware (Elektrik, Elektronik oder Mechanik), eine Software, ein Softwaresystem oder ein informationstechnisches System sein. Der Begriff Produkt umfasst somit mechanische oder elektronische Geräte, Maschinen, Konstruktionen, Anlagen oder andere Systeme.
Die praktische Ausarbeitung der technischen Anforderungen in Form von Ermittlung, Analyse (Systemanalyse) und Spezifikation ist Teil des Requirements Engineering (RE), einer Teildisziplin des Anforderungsmanagements. Sie müssen so formuliert sein, dass sie verifizierbar und validierbar sind. Dazu dienen Methoden und Aktivitäten wie Experimente, Tests oder Erprobungen.
In der computerbasierten Entwicklung wird seit den 1990er Jahren auf Anforderungsmanagement-Software zurückgegriffen, um der Komplexität technischer Produkte mit geeigneten Werkzeugen gerecht zu werden. Anforderungen werden in der Softwaretechnik und dem Systems Engineering zudem mithilfe von Modellierungssprachen wie UML oder SysML entwickelt. Anforderungen an Software wurden in der ISO/IEC/IEEE 29148 normiert. Die Softwareentwicklung nach dem agilen Modell verwendet dabei auf iterative Vorgehensmodelle ausgerichtete Werkzeuge. Bei dieser Methode werden Anforderungen als Teil des Scrum als Backlog, Features oder Epics verwaltet.
Es existieren unterschiedliche Ansätze zur Klassifikation von Anforderungen. Wenn sie als Qualitätskriterien an Systeme und Softwareprodukte verstanden werden, können sie nach ISO/IEC 25000, bzw. entsprechend der Qualitätsmodelle aus ISO/IEC 25010 klassifiziert werden. Am verbreitetsten ist dabei die Unterteilung in funktionale und nichtfunktionale Anforderungen:
Die nichtfunktionalen Anforderungen beschreiben, wie gut das System die Leistung erbringen soll; sie werden vielfach als Randbedingungen und Qualitätseigenschaften verstanden. Ein Beispiel: „Das Produkt soll dem Anwender innerhalb von einer Sekunde antworten.“ ist eine nichtfunktionale Anforderung bezogen auf die Reaktionszeit.
Auf übergeordneter Ebene, im Inhalts- und Umfangsmanagement als Teil des Projektmanagements, werden Randbedingungen zu Anforderungen. Beispiele hierfür sind eine Obergrenze für die Projektkosten oder ein einzuhaltender Termin für den Abschluss des Projekts (Schedulemanagement).
Anders als bei funktionalen bzw. nichtfunktionalen Anforderungen beschreiben Testfälle, wie ein Produkt überprüft und somit verifiziert oder validiert werden kann.
Während funktionale Anforderungen je nach Projekt unterschiedlich geordnet werden, gibt es für nichtfunktionale Anforderungen typische Gliederungen, beispielsweise als Vorlagen von dem Beratungsunternehmen Volere oder aus der DIN 66272. Nichtfunktionale Anforderungen können in zwei Hauptkategorien unterteilt werden:
Dies ist während des Betriebs (zur Laufzeit) beobachtbar.
Dies ist in der statischen Struktur des Systems verkörpert.
Technische Anforderungen werden in den folgenden Formaten erfasst:
Bereits erwähnt wurden Hilfswerkzeuge wie die Modellierungssprachen UML oder SysML. Müssen die Anforderungen möglichst detailliert erfasst werden, kommen formale Methoden zum Einsatz. Anforderungen sollten kurz, prägnant und eindeutig formuliert werden. Sie beschreiben, was ein technisches Produkt, System oder Prozess leisten oder erfüllen soll, nicht, wie die Umsetzung erfolgt. Dazu werden funktionale Anforderungen geschrieben. Nichtfunktionale Anforderungen beschreiben Qualitätsmerkmale und Rahmenbedingungen, etwa Leistung oder Verfügbarkeit.
Die Verwendung von Schlüsselwörtern konkretisiert die Definition von Anforderungen oder Spezifikationen. Typische Schlüsselwörter sind:
Ein einfaches Beispiel:
Alle Anforderungen sollten verifizierbar sein. Zu diesem Zweck werden Tests eingesetzt und von Testingenieuren oder Entwicklern geplant und durchgeführt. Die Maßnahmen sind Teil einer Verifizierung und Validierung (V&V). Zudem müssen Anforderungen an die Qualität im Rahmen der Qualitätssicherung definiert und erfüllt werden.
Zur Verbesserung der Qualität definierte die IEEE 830 Software Requirements Specification folgende Charakteristiken. Eine Anforderung sollte
„Korrekt“ und „vollständig“ beziehen sich dabei auf tatsächlichen Anforderungen (externer Bezug). Widerspruchsfreiheit bezieht sich auf die Anforderungen in einer Spezifikation (interner Bezug). Unzweideutigkeit lässt genau eine Interpretation zu, Verifizierbarkeit begrenzt die Komplexität einer Anforderungsbeschreibung zusätzlich auf ein effizient prüfbares Maß. Modifizierbarkeit setzt insbesondere Redundanzfreiheit voraus. Rückverfolgbarkeit umfasst die vor- und rückwärtige Richtung.
Anforderungen können inhaltlich und in ihren Eigenschaften unterschiedlich aufgebaut sein. Im Folgenden wird eine grobe Übersicht gegeben, welche Bestandteile oder Merkmale eine Anforderung aufweisen kann. In der Regel werden diese Merkmale bereits exemplarisch von einer Anforderungsmanagement-Software vorgegeben, sollten jedoch projektspezifisch hinterfragt und angepasst werden. Einige Elemente werden implizit von einer Anwendersoftware erledigt, beispielsweise die Identifizierung, Verknüpfung oder Versionskontrolle der Inhalte. Die Struktur ist allgemein gehalten und sollte von allen Ebenen berücksichtigt werden. Nur im Detail unterscheiden sich die Anforderungen.
Typischerweise besteht eine einzelne Anforderung aus folgenden Standardbestandteilen:
Optionale Elemente:
Da Anforderungen nicht konstant bleiben, sondern sich im Verlauf eines Projektes verändern, werden auch Informationen zu ihrem Lebenszyklus benötigt:
Neben diesen Standardbestandteilen existieren zusätzlich Kontrollelemente. Eine wichtige Rolle spielt dabei die Priorisierung von miteinander konkurrierenden Anforderungen um die Reihenfolge der Realisierung festzulegen oder eine Auswahl zu treffen, wenn die zur Verfügung stehenden Ressourcen (Zeit, Geld und Personen) nicht ausreichen, um alle Anforderungen zu erfüllen. Die folgenden Eigenschaften können beschrieben werden:
Die folgenden Eigenschaften bieten sich an, um die Anforderungen bestimmten Produkten zuzuordnen:
Diese Aspekte werden explizit im Rahmen des Konfigurationsmanagement und Variantenmanagement bearbeitet.
Die eigentliche Beschreibung der Anforderung kann durch folgende Elemente unterstützt werden und somit das Verständnis gefördert und Missverständnisse vermieden werden:
Schlussendlich stehen Anforderungen miteinander und mit anderen Artefakten eines Entwicklungsprozesses in Beziehung. Beispielsweise kann eine grobe Anforderung zu mehreren genaueren verfeinert werden. Oder es kann zu Konflikten zwischen Anforderungen kommen, die behoben werden müssen. Grundsätzlich müssen die Anforderungen aber zurückverfolgbar sein.
Im Verlauf des Anforderungsmanagements werden wirtschaftliche Aspekte berücksichtigt, die zur Formulierung oder Verlinkungen von Anforderungen herangezogen werden können:
Anforderungen können frühzeitig mit Eigenschaften im Hinblick auf die Qualität des Produkts ausgestattet werden. Beispiele sind: