next up previous contents
Nächste Seite: 2.2 Softwareengineering Aufwärts: 2. Softwareentwicklung Vorherige Seite: 2. Softwareentwicklung   Inhalt

Unterabschnitte


2.1 Grundlagen der Softwareentwicklung


2.1.1 Programmieren im Großen

Computer werden eingesetzt, um Menschen zu helfen, bestimmte Probleme effizienter als sie selbst oder überhaupt erst lösen zu können. Damit der Computer diese Aufgabe erfüllen kann, müssen ihm Anleitungen zum Lösen der Probleme gegeben werden. Solche Arbeitsanleitungen werden als Programme, komplexe Programme auch als Softwaresysteme bezeichnet. Die Menge aller Programme auf einem Computer zusammen mit begleitenden Dokumenten, die für ihre Anwendung notwendig oder hilfreich sind, wird unter dem Begriff Software zusammengefaßt. Dabei wird unterschieden zwischen System- und Anwendungssoftware. Zur Systemsoftware zählen die Programme, die für den korrekten Betrieb eines Computers erforderlich sind (Betriebssystem), sowie Programme, die allgemeine Dienstleistungen erbringen wie Editoren oder Kommunikationssoftware. Anwendungssoftware dient zur Lösung spezieller Anwendungsprobleme, etwa aus der Betriebswirtschaft oder der Medizin, und greift dabei in der Regel zur Erfüllung der eigenen Aufgaben auf die Systemsoftware zurück.

Probleme, die mit Hilfe von Software gelöst werden sollen, können unterschiedliche Komplexität aufweisen. Sie reichen vom einfachen Addieren von Zahlen oder dem Sortieren von Datenmengen über die Realisierung von Computerspielen oder der Datenverwaltung von Firmen hin zur komplexen Aufgabe der Steuerung von Raketen. Programme zur Lösung einfacher Probleme können meist binnen weniger Minuten bzw. Stunden von einzelnen geschrieben werden. Hingegen kann das Entwickeln von Programmen zur Lösung komplexer Probleme mehrere Monate oder sogar Jahre dauern und den Einsatz eines ganzen Teams von Experten unterschiedlicher Fachgebiete erforderlich machen.

Der Komplexität der Probleme entsprechend werden unterschiedliche Verfahren zur Entwicklung der Programme eingesetzt. Das Erstellen von Programmen geringerer Komplexität wird auch als Programmieren im Kleinen bezeichnet. Zentrale Aufgabe hierbei ist der Entwurf eines Lösungsalgorithmus. Das Problem wird sukzessive in Teilprobleme zerlegt, und die dazu jeweils gefundenen Teillösungen werden schließlich zur Gesamtlösung zusammengesetzt. Bausteine des Programmierens im Kleinen sind Prozeduren. Man spricht daher auch von prozeduraler Zerlegung.

Auch beim Programmieren im Großen, d.h. der Entwicklung von Programmen zu Problemen sehr hoher Komplexität, wird das Prinzip der Zerlegung des Gesamtproblems in überschaubare Teile angewendet. Während die Zerlegung beim Programmieren im Kleinen jedoch eher an den einzelnen Funktionalitäten des Programms ausgerichtet ist, orientiert sich die Zerlegung beim Programmieren im Großen an den Elementen (Daten, Objekte) des Problembereichs. Die Datenstrukturen sowie Prozeduren zum Zugriff und zur Manipulation der Daten werden in Komponenten (Module, Klassen) zusammengefaßt. Diese werden strukturiert zusammengesetzt und bilden die sogenannte Architektur des Softwaresystems. Während bisher das Programmieren im Kleinen behandelt wurde, steht in diesem Kapitel das Programmieren im Großen im Vordergrund.


2.1.2 Anforderungen an Software

Genauso wie ein Architekturbüro gewisse Anforderungen wie Stabilität oder Wärmedämmung an von ihm entworfene Gebäude stellt, muß auch die Softwareentwicklung bestimmte Ziele im Auge behalten. Allerdings ist Software im Gegensatz zu einem Gebäude ein immaterielles Produkt, bei dem die im folgenden aufgeführten Qualitätsfaktoren nicht immer einheitlich bewertbar sind. Zudem ist zu berücksichtigen, daß unterschiedliche Personen, die mit dem Produkt in Berührung kommen, nicht unbedingt dieselben Anforderungen stellen: Auftraggeber erwarten z.B. ein produktivitätssteigerndes, aber kostengünstiges Produkt, Benutzer und Benutzerinnen ein einfach zu bedienendes, aber ausreichend funktionsfähiges Programm, und Administrationsfachleute sind an einem niedrigen Wartungsaufwand interessiert.

Die wesentlichen Qualitätskriterien an Software lassen sich wie folgt definieren:

Weitere Qualitätskriterien sind etwa Überprüfungen und Bewertungen des Programms gegenüber den gestellten Anforderungen oder eine gute Verständlichkeit des Programms für jedermann. Kriterien, die in den letzten Jahren immer stärker in den Vordergrund getreten sind, um insbesondere die Produktivität des Softwareentwicklungsprozesses zu steigern, sind die unter Wartbarkeit bereits angesprochene Erweiterbarkeit sowie die Wiederverwendbarkeit von Teilen der Software in anderen Anwendungen und die Kompatibilität, d.h. die Möglichkeit, das Produkt relativ problemlos mit anderen Produkten zu verbinden.


2.1.3 Charakteristiken der Softwareentwicklung

Statistiken beweisen, daß lediglich 70 bis 80 Prozent aller Softwareprojekte erfolgreich abgeschlossen werden. Die Gründe hierfür sind in den Charakteristiken und Problemen des Softwareentwicklungsprozesses zu finden.

Ein wesentliches Problem tritt bereits während der Planung eines Softwareentwicklungsprojektes auf. Es ist kaum möglich, die exakte Dauer und die entstehenden Kosten eines Projektes abzuschätzen, vor allem weil sowohl Qualität (siehe Abschnitt 2.1.2) als auch Quantität von Software, die in der Regel in Anzahl der Programmzeilen gemessen wird, kaum bewertbar bzw. voraussagbar sind. Zwar existieren diverse Modelle zur Aufwandsabschätzung, aber es gibt etliche Faktoren, die während der Projektlaufzeit die Planungen durcheinander bringen können. Große Softwareprojekte dauern im Durchschnitt zwei bis drei Jahre. Die Weiterentwicklung zugrundeliegender Informationstechnologien, d.h. vor allem der für die Softwareerstellung nutzbaren Hard- und Software, ist aber so rasant, daß Änderungen zwangsläufig sind und im Entwicklungsprozeß jeweils direkt berücksichtigt werden sollten oder sogar müssen. Es kommt hinzu, daß sich häufiger als in anderen Bereichen während der Projektlaufzeit Anforderungen an das Produkt ändern und die Fluktuation von Softwarefachkräften überdurchschnittlich groß ist; die Nachfrage nach ihnen überstieg in den letzten Jahren deutlich das Angebot.

Ein besonderes Merkmal der Softwareentwicklung ist die Vielzahl und Heterogenität des erforderlichen Personals. Daraus resultiert ein hoher Kommunikations- und Koordinationsaufwand, worunter die Produktivität leidet. Ein Softwareentwicklungsteam muß neben der eigentlichen Programmierung z.B. die Bereiche Systemanalyse (im wesentlichen die genaue Analyse der Anforderungen an die Software), Softwaredesign (für den Entwurf der Softwarearchitektur), Qualitätssicherung (siehe Abschnitt 2.2.5) und Softwareergonomie (zur Sicherstellung einer benutzungsadäquaten Bedienbarkeit des Programms) abdecken. Darüber hinaus werden Fachleute benötigt, die für die inhaltlichen Anforderungen verantwortlich sind. Häufig sind bereits in der Entwicklungsphase spätere Benutzer und Benutzerinnen des Produktes involviert, um deren künftige Akzeptanz zu gewährleisten. Schließlich müssen Projektmanagement, -leitung und -administration insbesondere Meilensteine und Kostenentwicklung überwachen sowie die Zufriedenstellung der Auftraggeber sichern und gesetzliche Rahmenbedingungen beachten.

Um ein Softwareprojekt erfolgreich abschließen zu können, ist eine sorgfältige Vorgehensweise notwendig. Häufig wird jedoch viel zu früh mit der Implementierung, also der eigentlichen Programmierung begonnen, ohne die genauen Anforderungen an das zu erstellende Produkt vollständig definiert zu haben. Aus Zeitgründen wird vielfach auf eine ordentliche Dokumentation verzichtet. Tests werden vernachlässigt, obwohl Untersuchungen ergeben haben, daß während der Entwicklungsphase in 1.000 Zeilen Programmcode durchschnittlich 50 Fehler enthalten sind.

Solche Nachlässigkeiten schlagen sich spätestens in der Wartungsphase negativ nieder, deren Kosten dadurch überproportional ansteigen. Die Wartungsphase läuft nach der Übergabe parallel zum Praxiseinsatz des Produktes ab und setzt sich aus den Aktivitäten Fehlerkorrekturen, Portierung (Übertragung auf andere Rechner bzw. Betriebssysteme), Verbesserungen und Erweiterungen zusammen. Die in der Wartungsphase anfallenden Kosten sind heute vielfach höher als die gesamten Entwicklungskosten.


next up previous contents
Nächste Seite: 2.2 Softwareengineering Aufwärts: 2. Softwareentwicklung Vorherige Seite: 2. Softwareentwicklung   Inhalt
Ditrich Boles 2005-09-09