3 Konfigurationsmöglichkeiten von Software
Der Softwareentwicklungsprozess umfasst nach [Balz 2001] 6 Phasen, die in Abbildung 1
dargestellt sind.
Die Softwareentwicklung beginnt mit der Planungsphase, in der eine Untersuchung vorgenommen
wird, ob sich das Softwareprodukt nach fachlichen, ökonomischen und personellen
Gesichtspunkten realisieren lässt. Es werden hier diverse Studien durchgeführt, um das passende
Produkt auszuwählen und schließlich grob Anforderungen, Funktionen, Qualitätsmerkmale
etc. zu erheben. Schließlich muss in dieser Phase überprüft werden, ob sich das
Projekt umsetzen lässt. Am Ende stehen das Lastenheft, ein Projektplan und eine Aufwandsschätzung62.
Hier schließt sich die Definitionsphase an. In dieser Phase werden die anfangs noch sehr vagen
Produktanforderungen spezifiziert, indem sie mit Hilfe verschiedener beteiligter Akteure
ermittelt, deren Daten und Funktionen modelliert, analysiert und nach Simulation und Ausführung
festgelegt werden. Ziel ist es, ein konsistentes und vollständiges Produktmodell zu
entwickeln. Das Ergebnis dieser Phase ist ein Pflichtenheft, eine konkrete Zusammenfassung
aller zu realisierenden Anforderungen, Funktionen, Daten und Strukturen, und ein Produktmodell
oder ein oberflächlicher Prototyp.63.
In diesen beiden Phasen ist der Begriff des Requirements Engineering verankert64.
In der Entwurfsphase werden auf Grundlage der erfassten Anforderungen die Softwarearchitektur,
die Nutzeroberfläche, Schnittstellen, Datenbankanbindungen und andere Zielplattformen
entwickelt. Hier werden Rand- und Umfeldbedingungen berücksichtigt und die grundlegenden
Entscheidungen z.B. über Schnittstellen zu peripheren Programmen getroffen. Die zu
entwickelnde Softwarearchitektur beschreibt die Struktur des Software-Systems durch die
Systemkomponenten und deren Beziehungen. Sie soll funktionale und nichtfunktionale Produktanforderungen
und Qualitätsanforderungen erfüllen und Schnittstellen versorgen65.
Die Ergebnisse dieses Abschnitts sind die Vorraussetzungen der Implementierungsphase.
Hier wird die entworfene Softwarearchitektur in Programmiertätigkeiten überführt, um die
geforderten Leistungen der vorgegebenen Spezifikation zu implementieren. Dazu gehören die
programmiertechnische Entwicklung der Software sowie die Dokumentation und Testfälle.
In der nun folgenden Abnahme- und Einführungsphase wird die fertiggestellte Software an
den Auftraggeber oder Markt nach zahlreichen Tests und mit einem Abgabeprotokoll übergeben.
Dann folgt bei Auftragsarbeiten die Einführung bei dem Kunden durch Installation,
Schulung, Übergabe der Benutzerdokumentation und Inbetriebnahme der Software.66.
Die Wartungs- und Pflegephase beginnt nach der Softwareeinführung. Herausforderungen
sind die Fehlerkorrekturen, das Altern der Software und somit nötige Leistungsverbesserungen
und das Anpassen von Änderungen oder Erweiterungen. Hier können auch bereits Informationen
und Anforderungen an ein neueres Produkt gesammelt werden.67.
Testen und Validieren sind integrierte Aufgaben, die sich durch alle Phasen ziehen.68.
Zur Bewerkstelligung der besonderen Anforderungen von Systemfamilien und der Wiederverwendung
auf der Ebene des Codes, des Design und der Architektur von Software werden
im Folgenden dazu Konzepte und Methoden69 vorgestellt, die einander bedürfen und aufeinander
im Laufe der Softwareentwicklung aufbauen.
Ausgehend von der Objektorientierung und deren feingranularen Klassenstruktur wird Code
wiederverwendet. Spezialisierte Klassen über definierte öffentliche Schnittstellen lassen
sich in Klassenbibliotheken zusammenfassen und wiederverwenden. Über Vererbung können
neue Klassen abgeleitet werden, an die dynamisch Anfragen gestellt werden können. Der
konkrete Einsatz zur Laufzeit von Klassen kann über den Polymorphismus oder ifdef-
Anweisungen70 gesteuert werden. Die Erstellung universeller Klassen bedarf dabei sorgfältiger
Analysen und Merkmalmodelle, die jedoch das Prinzip der Datenkapselung verletzen,
wenn periphere Funktionen wie Persistenz, Sicherheit, Remotezugriffe etc. in verschiedenen
Klassen geändert werden. Dafür lässt sich die Aspektorientierte Programmierung einsetzen,
wo solche kritischen Prozesse in eigenen Klassen zusammengefasst werden, die Basisklassen enthalten nur noch reine Logik.
Das erhöht die Wartbarkeit und die Wiederverwendbarkeit.
Diese Fachklassen werden in den restlichen Code 'eingewoben'.
Klassen selbst sind aber für eine komfortable Wiederverwendung oft zu klein, wenn sie nur
eine Funktion abdecken. Deswegen haben sich gröbere Strukturen wie Komponentenarchitekturen
oder Plugins bewährt. Ihre Granularität bestimmt sich nach Angaben der Performance
und Skalierbarkeit, ihrem Installationsumfang und der Anzahl der Komponenten im
System. Hier wird nur noch in Container, also Laufzeitumgebungen, die sich um die technischen
Belange kümmern, und die Komponenten mit der reinen Berechnungslogik unterteilt.
Gute Konfigurierbarkeit in den Komponenten gewährleistet die Verwendung für Systemfamilien.
Die Wiederverwendung findet nicht nur im Code, sondern auch in der Architektur und dem
Design statt. Dies kann auf Designebene mit Entwurfsmustern, welche Designerfahrungen
auf konzeptioneller Ebene beinhalten, und auf Architekturebene mit Frameworks geschehen.
Allumfassend beschäftigt sich die Generative Programmierung mit dem Erstellen eines
stabilen 'Stecksystems' aus variablen Komponenten und der automatischen Ableitung über
Generatoren, die z.B. auf GenVoca basieren. Persistente Einstellungen können im laufenden
System z.B. in XML spezifiziert sein.
Top|
Home|
<< Zurück |
Nächste >>
" TARGET="_blank"> >> Home Page << |