Was sind Software-Anforderungen? Eine Einführung.
In meinem letzten Artikel "Anforderungen an IT Projekte formulieren" haben wir damit begonnen einen Blick auf das Thema Requirements Engineering - hier speziell in der IT - zu werfen:
Heute wollen wir mit den Grundbegriffen des Requirements Engineering starten, denn wie in vielen Themenbereichen ist es hilfreich, dass man ein einheitliches Verständnis darüber hat, was die Begriffe bedeuten bevor man sich in unglaubliche Flughöhen begibt. In der Praxis wird durch die Vermischung von diesen Begriffen meist schon der erste Baustein gelegt, um ein Projekt später zum Scheitern zu bringen, in dem z.B. Anforderungen mit der Äußerung von Visionen und Zielen verwechselt werden.
Anforderungen (Requirements)
Nach IEEE (Institute of Electrical and Electronics Engineers) ist eine Softwareanforderung eine Beschreibung dessen, was ein Softwareprodukt tun soll, einschließlich der zu implementierenden Funktionalitäten und der Beschränkungen seines Betriebs. Im Original-Ton ist es ungefähr so definiert (entnommen aus dem guten Artikel von Martin Weck)
In diesen Begriffen ist schon einmal eine ganze Menge Stoff, über den man philosophieren könnte. Als besonders wichtig empfinde ich den Hinweis, dass man ein "Ziel erreichen will" oder einen Standard/Spezifikation erfüllen muss.
Wenn wir uns in einem der zukünftigen Artikel über die Ermittlungstechniken für die Erhebung on Anforderungen unterhalten, werden wir sehen, wie schwierig es manchmal ist, herauszufinden was
Aus der Praxis: Blicke ich auf die Zeit vor ca.10 Jahren zurück, in der ich noch hauptsächlich klassische Workshops am Anfang des Projektes durchgeführt habe (Wasserfall-Methode), muss ich feststellen: Leider änderte sich die Einschätzung, "was man braucht" ständig während der Projekte, denn dies ist ein dynamischer Prozess (--> Agilität). Wie oft haben wir am Anfang des Projektes Anforderungen definiert und aufwändig implementiert, die später kein User tatsächlich verwendet hat. Und anders herum: Wie oft, war ein Thema am Anfang des Projektes ein hartes "Must-have" und am Ende wurde es aus dem Pflichtenheft wegen der Kosten herausgestrichen - und es hat nichts ausgemacht! Die Einschätzung der Stabilität einer Anforderung ist deshalb sehr entscheidend.
Kategorien von Anforderungen
Softwareanforderungen werden üblicherweise in zwei Hauptkategorien unterteilt: funktionale und nicht-funktionale Anforderungen.
In der Praxis muss man feststellen, dass der Fokus sehr stark auf der Analyse und Erfassung der funktionalen Anforderungen liegt, was ein großes Problem darstellt. Denn die Anwender haben immer sehr "praktische Themen" vor Augen und wünschen sich bestimmte Funktionen, ohne auf die Nicht-Funktionalen Anforderungen Rücksicht zu nehmen.
Ich erlebe diesen Effekt häufig, wenn ein Kunde z.B. selbst im Haus eine/n Entwickler/in beschäftigt. Die User fangen dann an, diese Entwickler/-innen zu "umgarnen" (und teilweise zu "bestechen") und bitten diese ständig um die Umsetzung spezieller Anforderungen. Kommt man dann als Berater ein paar Jahre später zu so einem System als Experte dazu, findet man ein vollkommen verbautes Software-Produkt vor, welches nun ganz deutlich eine ganze Reihe von nicht-funktionalen Anforderungen nicht mehr erfüllt, wie z.B. die Wartbarkeit, Update-Fähigkeit oder die Performance-Anforderungen. Nicht selten ist das Software-Produkt mit der Zeit so stark individualisiert worden, dass jede/r AnwenderIn ein auf sich komplett zugeschnittenes Funktionsset hat. Nun, wo es selbst der Geschäftsleitung auffällt, dass es implizite Nicht-Funktionale Anforderungen gibt - die man vorher nicht richtig formulieren konnte - ist es allerdings zu spät! Man findet sich - analog gesehen - in einem völlig verbauten Haus wieder, in dem Handwerker an jedem Tag des Jahres an irgendeiner Ecke etwas über Jahre hinweg dazugebastelt haben. Häufig ist es dann das Beste und Günstigste, man reißt das Haus komplett ab, bevor man versucht, hier noch etwas zu retten und aufwendig zu "sanieren", was am Ende dann trotzdem nicht hält.
The Hidden Champion - Nicht-Funktionale Anforderungen
Die Nicht-Funktionalen-Anforderungen (NFAs) sind meiner Meinung nach die "Hidden Champions", denn diese Anforderungen sind es häufig, welche später
Merkwürdigerweise werden diese NFAs selten in Projekten ausführlich analysiert, dokumentiert und beschrieben. Dies hängt damit zusammen, dass viele dieser Punkte aus Sicht des Kunden "selbstverständlich" und "klar sind". Sofern man eine/n Berater/in hat, welche die Firma und die Branche gut kennt, mag dies auch sein. Aber nicht immer kann man von dieser Situation ausgehen.
Praxistipp für Profis: Ich empfehle hierzu in den Tools wie Microsoft DevOps oder Jira eigene Item-Types anzulegen, welche zur Dokumentation von NFAs genutzt werden. Diese können dann mit Nicht-Funktionalen-Anforderungen verbunden werden. In einem SCRUM-Vorgehen kann man z.B. in der Definition of Ready festlegen, dass die Items gegen alle NFAs geprüft und verbunden werden müssen, bevor sie den Sprint betreten dürfen. Damit ist die ständige Berücksichtigung der NFAs während des Projektverlaufes gewährleistet.
Die Klassifikation dieser NFAs ist in der Literatur umstritten, wie diese exakt gegeneinander abgegrenzt werden, aber glücklicherweise muss ich als Praktiker in einem populär-wissenschaftlichen Artikel wie diesem hier nicht so sehr darauf Rücksicht nehmen (LOL). Ich nenne deshalb hier einfach einmal ein paar der gängigen Begriffe, ohne zu gewährleisten, dass diese lupenrein gegeneinander abgegrenzt werden können:
Empfohlen von LinkedIn
Qualitätsanforderungen, wie z.B.
Randbedingungen, wie z.B.
In diesem Zusammenhang würde ich zusätzlich immer empfehlen, eine Liste mit folgenden speziellen Informationen zu einem Projekt zu führen:
Festlegungen
Definieren, wie das System konfiguriert/genutzt wird. Dies könnten z.B. Aussagen sein:
Annahmen/Prämissen
Diese Dokumentieren die Rahmenbedingungen/Annahmen, wie man sie zum Zeitpunkt der Anforderungsaufnahme hatte, z.B.
Die Herstellung der Visibilität dieser Punkte ermöglicht es dem Kunden/Auftraggeber/Sponsor, diese zu prüfen und ggfs. Änderungen vorzunehmen, falls er/sie dies anders wünscht oder einschätzt.
Delta-Anforderungen
Eine Besondere Schwierigkeit ergibt sich, wenn man Anforderungen gegenüber einem Basis-System definieren muss, wie z.B. einem ERP-System (SAP, Microsoft Dynamics 365 Business Central) oder einem Web-System auf Basis von Typo3 oder Wordpress.
Die Schwierigkeit hierbei ist, dass das Grundsystem schon eine Vielzahl an Anforderungen abdeckt und man praktisch "nur noch" das Delta zum Kundenwunsch festlegen muss. Es macht keine Sinn, hier am Anfang eines Projektes ALLE Anforderungen einzusammeln (was unendlich lang dauern würde bei ERP-Systemen). Gleichzeitig ist es aber nicht so einfach mit der Delta-Analyse, wie es scheint:
Die Firma SOPHIST aus Nürnberg hat zum Thema der Delta-Analyse einige gute Artikel veröffentlicht, weshalb ich hier beispielhaft auf diesen Artikel von Dominik Häußer verweisen möchte, der online auf der Webseite von SOPHIST verfügbar ist. Ich denke, es wäre es wert, das Thema der Delta-Analyse auch einmal in einem eigenen Blog-Artikel zukünftig zu behandeln, da es ein besonders schwieriges Umfeld der Anforderungsaufnahme darstellt, denn die Frage ist, wie beschreibt man die Änderungen verständlich und klar, ohne das Grundsystem jedes Mal noch einmal komplett erklären und darstellen zu müssen.
Ausblick
Nachdem wir heute ein paar der Grundbegriffe zum Thema der Anforderungs-Aufnahme geklärt haben, können wir in den nächsten Ausgaben des Newsletters weiter voranschreiten und schauen uns Themen wie Systemkontext, Stakeholer-Analyse und der Artefakten-Dokumentation gemeinsam an.
Stay tuned and learn on!
Just a few days left to launch something GR8! 🚀 | „Servant“ ✨
10 MonateSehr guter Artikel mal wieder Michi, danke dafür!