Seitdem Anforderungen an Software erhoben und spezifiziert werden, versucht man, funktionale von nicht-funktionalen Anforderungen zu unterscheiden. Lehrbücher wurden auf der Suche nach einer klaren Antwort auf die Frage nach diesem Unterschied gefüllt. Für die systematische Erfassung von Anforderungen ist die Unterscheidung von Kategorien, die nach den unterschiedlichen Zwecken der Anforderungen fragt, natürlich sinnvoll, aber fraglich ist, ob so eine viel-diskutierte und unpräzise Trennung wie die in funktionale und nicht-funktionale Anforderungen wirklich zielführend ist.
In den letzten Jahren hat sich in der Literatur die Überzeugung durchgesetzt, dass nicht-funktionale Anforderungen
- entscheidend für die Benutzerzufriedenheit sind,
- durch Architektur-Entscheidungen umgesetzt werden.
Das gibt uns vielleicht einen Hinweis darauf, was nicht-funktionale Anforderungen wirklich sind. Dazu ein Beispiel aus der Welt, aus der der begriff “Architektur” eigentlich stammt:
Ein Haus wird im Erdgeschoss und im Keller lange Zeit als Möbelhaus mit Lager genutzt. Nach einem kleinen Umbau dienen die gleichen Flächen als Kino mit Gastronomie. Die Architektur des Hauses hat es möglich gemacht. Welche Anforderungen wurden durch die Architektur bereits erfüllt? Es sind Basis-Anforderungen: Man braucht ausreichend Platz für große Gegenstände und für eine größere Anzahl von Personen, die sich gleichzeitig auf einer Fläche bewegen können (Verkaufsausstellung, Veranstaltung, Vortrag, Vorführung – all das sind Nutzungen dieser Art).
Analog kann man für eine Software, z.B. für ein Data Warehouse festhalten: Sie soll den schnellen Zugriff auf große Daten-Mengen für einen geschlossenen Benutzerkreis ermöglichen, Berechnungen, Zusammenfassungen, müssen sehr schnell erfolgen. Das kann man als Nicht-Funktionale Anforderungen bezeichnen, besser wäre aber, es als (abstrakte) Basis-Anforderungen zu bezeichnen. In einem objektorientierten Anforderungsmodell sind das die Basisklassen, von denen die weiteren Anforderungen (Welche Daten sollen genau für welche Benutzer auf welche Weise und wie oft) als abgeleitete Klassen aufsetzen.
Die Anforderungsanalyse beginnt dann mit diesen Basis-Anforderungen und ordnet diesen die speziellen Anforderungen zu. Und so kann dann auch der Architektur-Entwurf der Anwendung erfolgen. Wie im Bauwesen: Erst wird das Grundgerüst entworfen, welches die flexible Nutzbarkeit für die Basis-Anforderungen erfüllt, dann werden die speziellen Nutzungsformen berücksichtigt. Auf diese Weise entstehen flexible, langlebige Architekturen.