Trends in der Software Entwicklung


Warum Software Entwicklung

Ziel der angewandten Methoden einer Software Entwicklung ist immer die kostengünstige Erzeugung hochwertiger Software. Um diese von anderer Software abzugrenzen werden im Weiteren, ohne Anspruch auf Vollständigkeit, folgende SW-Qualitäten unterschieden: Korrektheit, Zuverläßlichkeit und Benutzerfreundlichkeit auf der Anwenderseite sowie Wiederverwendbarkeit und Portierbarkeit auf Seiten des Herstellers. Hat sich im Lauf der Zeit die genutzte Methode geändert, so geschah dies aufgrund veränderter Umgebungsparameter - wie höhere Problemkomplexität - die ein Erreichen der erforderlichen Softwarequalität zu teuer machten und so eine neue Methodik erzwangen.

Software Entwicklung Früher

In den Anfängen der Informatik wurden Probleme "direkt" gelöst. Entwickler, Codierer und Anwender waren in einer Person vereint, die bei geringer Programmkomplexität keine Schwierigkeiten hatte, das Problem mit ad-hoc Methoden und hardwarenahen Programmiersprachen, wie Binärcodierung oder Assembler, in einer Umgebung, in der Hardware weit teurer als Software war, lösungbildend umzusetzen.

Als klassische Software-Entwicklungsmethode wurde die "Strukturierte Analyse" genutzt. Bei dieser werden Daten- und Verhaltensaspekte eines Programmes für jede Phase (Analyse, Entwurf, Implementierung) dieses Verfahrens getrennt betrachtet und mit eigenen Diagrammen dargestellt. Fehler im Code wurden dabei mittels "try and error" solange debuggt, bis die gewünschte Zuverläßlichkeit und Korrektheit erreicht wurde. Benutzerfreundlichkeit wurde dabei (notwendigerweise) als vernachlässigbar betrachtet, der Nutzer hatte sich dem Programm anzupassen, wenn er den Computer sinnvoll einsetzen wollte.

Methodenwechsel

Nach und nach veränderte sich obige Komplexität-, Kosten- und Entwicklungsstruktur. Mit Zunahme der Problemkomplexität stieg die Fehleranzahl in den Programmen. Daraus folgte eine vermehrte debugging-Tätigkeit, die den Programmcode noch unübersichtlicher und unverständlicher machten. Späteres Bearbeiten des Codes wurde so durch die verschiedensten nicht dokumentierten Zugriffe und Methoden nahezu unmöglich und die Kosten der Softwareentwicklung stiegen überproportional während die erreichten Softwarequalitäten, vor allem in Hinsicht auf Wiederverwendbarkeit, Zuverlässigkeit und Bedienerfreundlichkeit, stetig abnahmen.

Eine Fernwirkung, das Y2K Problem, erleben wir derzeit. Die eigentliche Problematik ist dabei nicht das 2stellige Abspeichern der Jahreszahl, den dieses wäre leicht lösbar, sondern die vielen, im Programm versteckten, nicht dokumentierten Zugriffe auf diese Speicherung, die eine 2stellige Zahl erwarten und bei denen eine 4stellige Zahl z.B. einen Speicherüberlauf, einen Indexfehler, eine Division durch Null oder einfach nur einen schweren Ausnahmefehler bewirken.

Ein weiteres Problem ergab sich durch die verwendeten Programmiersprachen und deren Konzepte, allen voran der prozedurale Ansatz, die oft ein Umdenken vom Codierer erforderten, da Funktionalität und Datenstruktur einer starken Trennung unterworfen wurden.

So kam es `68 zu der sogenannten Softwarekrise und in Folge davon zur NATO-Konferenz in Garmisch-Partenkirchen, bei der Lösungsmöglichkeiten dieser Probleme formuliert wurden:

Um die Problemkomplexität zu senken muß das Programm, bereits während der Entwurfphase, in, für den Codierer überschaubare Teile, modularisiert wird.

Die linearen Methoden wurden aufgrund ihrer Nachteile, Auftraggeber/Anwender sind an der Entwicklung nur wenig beteiligt, unrealistische strikte Reihenfolge, viele Anforderungen an das Programm stehen zu Beginn gar nicht fest, durch Methoden ersetzt, die einen Rückgriff während der Entwicklung erlauben.

Die bisher verwendeten Programmiersprachen, deren fehlertolerante Compiler nur geringe, bzw. gar keine Datenprüfungen sowie statische oder dynamische array index checks vornehmen, wurden durch restrektivere Sprachen/Compiler ersetzt.

Software Entwicklung Heute

Das Schlagwort der heutigen Software Entwicklung ist Objektorientierung. Im Vergleich zu klassischen Methoden erfordert dieses Konzept einen Mehraufwand von ca. 20%, trotzdem gibt es derzeit fast kein größeres Projekt, daß ohne objektorientierte Vorgehensweise abgeschlossen werden kann.

Ein großer Vorteil des objektorientierten Ansatzes besteht darin, daß die Modellierung des Programms eher dem intuitiven Verständnis des Problembereiches entspricht, da Funktionen und Daten nicht mehr getrennt betrachtet, sondern für jede Phase (Analyse, Entwurf, Implementierung) gekapselt, werden.

Weitere Vorteile der Objektorientierung werden durch die Betrachtung ihrer Kernkonzepte deutlich:

Diese Konzepte bewirken durch ihren Aufbau, auch bei komplexeren Problemen einen übersichtlichen, modularen Quellcode, der qualitativ hochwertig und somit, wie aufgeführt, wiederverwendbar, portierbar, zuverlässig, korrekt und benutzerfreundlich ist.

Ergänzend wurden die herkömmlichen, prozeduralen Sprachen, soweit möglich, durch neuere Sprachen wie C++ oder Java. Diese unterstützen bereits aufgrund ihres Aufbaus die objektorientierte Programmierung und verfügen über fehlerintolerante Compiler. Als weiterer Trend zeichnet sich hier die Programmierung in Entwicklungsumgebungen, wie Visual Basic, Visual C++, Delphi, Powerbuilder ab. Vorteil dieses Vorgehensweisen ist, daß die eigentliche Programmierung in den Hintergrund rückt und durch ein ganzheitliches Applikationsdesign abgelöst wird. Dabei werden Masken und Fenster zuerst entworfen; über die Objekte wird die Applikationslogik gesteuert.

Unterstützend greift man während der Entwicklung auf interaktive Modelle, wie evolutionäre Software Entwicklung oder Spiralmodell nach Boehm, die ein Backtracking erlauben, zurück.

Trends

Heutige Ziele der Software Entwicklung fordern einen möglichst flexiblen Entwurf und eine effiziente, sichere und portablen Implementierung. Ergänzt werden heutige Methoden um homogene Diagrammkonzepte wie UML oder softwaregesteuerte Entwicklung wie CASE.

UML: Unified Modeling Language

Modellierung ist der zentrale Bestandteil aller Aktivitäten, für die Entwicklung guter Software. UML unterstützt die einheitliche Modellierung durch seinen Aufbau. Die Phasen Analyse und Entwurf werden mit Hilfe verschiedener aufeinander abgestimmter Diagramme und deren definierten Schnittstellen zusammengefaß. Eine Implementierung kann nach der Modellierung mit Hilfe von geeigneten Programmen, wie z.B. Rational Rose, Innovator 6.0 oder Together / J 1.0 automatisch geschehen.

Die wichtigsten in UML verwendeten Diagramm sind:

CASE: Computer Aided Systems Engineering

Für die Unterstützung der Softwareentwicklung steht eine Vielzahl von (Software-) Werkzeugen zur Verfügung, z.B. Editoren, Debugger, Compiler, Maskengeneratoren, Testhilfen, Projektmanagementtools etc..

Der Begriff CASE spielt dabei eine besondere Rolle. CASE steht für "Computer Aided Software Engineering", auch die umfassender Intrepretation "Computer Aided Systems Engineering" ist möglich. Darunter versteht man die teilweise oder vollständige Unterstützung des Softwareentwicklungsprozesses durch computergestützte Werkzeuge, die als CASE-Tools oder CASE-Systeme bezeichnet werden. Diese Definition ist sehr vage, im engeren Sinne könnte damit auch ein einfacher Compiler als CASE-Tool gelten. üblicherweise wird dieser Begriff aber auf komplexere Werkzeuge angewandt.

Der Nutzen des Einsatzes solcher Werkzeuge ist nach wie vor umstritten. Befürworter nenne u.A. folgende Vorteile:

Literatur:

[1] Skript; Techniken des Software-Entwurfes I, WS 98/99, Gregor Engels, Universität-GH Paderborn

[2] Skript; Wirtschaftsinformatik 4, 1998, Astrid Blumstengel, Leena Suhl, Universität-GH Paderborn

[3] Buch; Objektorientierte Softwareentwicklung, 1995, Bernd Oestereich, ISBN 3-486-23237-1

[4] Buch; The Unified Modeling Language User Guide, Grady Booch, James Rumbaugh, Ivar Jacobson, 1999, ISBN 0-201-57168-4