Zum Inhalt springen

Softwaretechnik

aus Wikipedia, der freien Enzyklopädie
Dies ist eine alte Version dieser Seite, zuletzt bearbeitet am 12. Februar 2006 um 12:55 Uhr durch 213.39.191.209 (Diskussion) (Teilgebiete der Softwaretechnik). Sie kann sich erheblich von der aktuellen Version unterscheiden.

Die Softwaretechnik (software engineering) als Teilgebiet der Informatik beschäftigt sich mit der standardisierten ingenieursmäßigen Herstellung von Software und den damit verbundenen Prozessen.

Es gibt eine weit verbreitete Ansicht, nach der die Softwareentwicklung ein eigenständiges Teilgebiet der Informatik sei, das sich mit der Entwicklung von Software beschäftigt. Es scheint sich aber zunehmend die Haltung durchzusetzen, dass Softwareentwicklung das Teilgebiet der Softwaretechnik ist, das sich mit der Implementierungsphase eines Softwareprojektes beschäftigt.

Die Definition von Softwaretechnik ist nicht einheitlich. Eine Definition von Helmut Balzert beschreibt das Gebiet als

"zielorientierte Bereitstellung und systematische Verwendung von Prinzipien, Methoden und Werkzeugen für die arbeitsteilige, ingenieurmäßige Entwicklung und Anwendung von umfangreichen Softwaresystemen."
Vorlage:Lit

Softwaretechnik umfasst eine Vielzahl von Teilgebieten, die in ihrer Gesamtheit den gesamten Softwareentwicklungsprozess, von der Planung bis zum Testen und dem "Rollout", begleiten.

Moderne Perspektiven umfassen jedoch den gesamten Software-Lebenszyklus und schließen neben dem Entwickeln auch das Betreiben der Software ein, d.h. auch das Incident Management, Problem Management, Change Management, Release Management und Configuration Management einer Applikation. Siehe hierzu auch Application Management im Rahmen von ITIL.


Teilgebiete der Softwaretechnik

Der Entwicklungsprozess von systematisch entwickelter Software ist komplex und umfasst eine Vielzahl von Teildisziplinen der Informatik und des Projektmanagements. Die Disziplinen sind während des ganzen Entwicklungsprozesses eng miteinander verzahnt. Die wesentlichen Gebiete dabei sind Projektmanagement, Analyse, Entwurf, Implementierung, Qualitätsmangement, Konfigurationsmanagement und Dokumentation.

Die Teilgebiete im Einzelnen sind in der folgenden Tabelle aufgeführt.

1. Planung

2. Analyse

3. Entwurf

4. Programmierung

5. Test

6. Qualitätsmanagement

7. Konfigurationsmanagement

8. Dokumentation


Ein relativ neues, aus der Softwaretechnik hervorgegangenes Gebiet ist das Web-Engineering, das Erkenntnisse und Themen für die Entwicklung von Internet-Anwendungen nutzt.

Vorgehensmodelle des Softwareentwicklungsprozesses

Analyse, Entwurf, Implementierung und Tests werden meist als Kernprozesse der Softwareentwicklung angesehen, während hingegen Projektmanagement, Qualitätsmanagement und Konfigurationsmanagement als Unterstützungsprozesse verstanden werden.

Die einzelnen Teilprozesse der Softwareentwicklung sind niemals getrennt voneinander zu betrachten und stellen idealisierte Einzelmodule dar. In der Realität finden sich dynamische Abfolgen, Vorgehensmodelle (engl. Software development process), die die einzelnen Aktivitäten auf verschiedene Phasen im Entwicklungsprozess aufteilen und diese dann – u. U. mit geringen Modifikationen – einmal (z. B. Wasserfallmodell) oder mehrmals durchlaufen (z. B. Spiralmodell). Bei mehrmaligen Durchläufen erfolgt eine iterative (d. h. wiederholte) Verfeinerung der einzelnen Softwarekomponenten. Um die optimalen Vorgehensmodelle herrscht Uneinigkeit. In der Regel verhält es sich aber so, dass je statischer und eindimensionaler die Betrachtungsweise ist, desto weniger hat sie mit der Praxis der Programmierung zu tun.

Vorgehensmodelle unterscheiden sich wesentlich in ihrem Detaillierungsgrad. So stellen z.B. die oben genannten Modelle grundsätzliche Prinzipien des Vorgehens dar. Hingegen sind OOTC-Approach, Rational Unified Process, Rapid Application Development etc. detailliert ausgearbeitete Vorgehensweisen, die den an der Entwicklung Beteiligten konkrete Arbeitsanweisungen an die Hand geben. Das V-Modell nimmt diesbezüglich übrigens eine Zwitterstellung ein: Es ist sowohl ein Prinzip (dass jeder Stufe der Entwicklung eine Testphase entspricht) als auch (wie zumeist gebräuchlich) ein detailliertes Modell.

Es gibt verschiedene Bewertungsverfahren für den Softwareprozess, u. a. das Capability Maturity Model (Integration) oder "Spice".

Kritik

Es ist umstritten, ob der Entstehungsprozess von Software so gut verstanden wird, dass eine "ingenieurmäßige Herstellung" möglich ist: Kritiker argumentieren, dass Software nichts anderes sei als "ausführbares Wissen". Wissen jedoch lässt sich nicht ingenieurmäßig herstellen (wie sich etwa eine Brücke oder ein Hochhaus herstellen lässt), sondern wird in einem kreativen Prozess gefunden.

Eine Richtung der Softwaretechnik (Agile Software-Entwicklung) beschäftigt sich daher mit sehr flexiblen Methoden, die die Kreativität des einzelnen Entwicklers betonen und Verwaltungsaspekte in den Hintergrund treten lassen. Alternative Softwaretechnologien (Universal Application, Software Fabric u.ä.) verfolgen Ansätze, welche die konventionelle Vorgehensweise von Softwareentwurf und anschließender Programmierung grundsätzlich in Frage stellen, indem vorgefertigte universalisierte Software per Konfiguration an die jeweiligen Anforderungen angepasst wird.

Kritiker argumentieren, dass besonders die heftig diskutierten Vorgehensmodelle (Wasserfallmodell, V-Modell etc.) und Modellierungssprachen (UML) in der Softwaretechnik-Wissenschaft den behelfsmäßigen, unterstützenden ad-hoc-Charakter verdecken und den Entwicklungsprozess unnötig bürokratisieren. Diese Methoden hemmen, so die Kritiker, dadurch Kreativität und Problemlösungskapazität des Entwicklers.

Struktogramme und ähnliche Werkzeuge werden in der Praxis nur selten verwendet. Wenn, dann für Ausschnitte aus dem Problem, aber nicht für eine Modellierung des gesamten Projektes. In dem Bereich hat sich jedoch UML als praxistauglicher erwiesen und wird von Entwicklern häufig verwendet.

Es ist umstritten, ob die Softwarekrise durch Softwaretechnik oder vielmehr durch robustere, strukturiertere Programmiersprachen und Entwicklungswerkzeuge gelöst werden kann.

Die aktuellen Entwicklungen des Softwareengineering werden in der Dokumentation des "Software Engineering Body of Knowledge" (SWEBOK) beschrieben. Letzteres ist ein durch die IEEE gefördertes Projekt.

Experimentelles Software Engineering

Unter Experimentellem Software Engineering versteht man die empirische, experimentelle Untersuchung verschiedener Software-Engineering-Konzepte, -Techniken und -Methoden, um deren praktischen Nutzen in adressierten Kontexten messbar zu belegen. Erst durch messbare, zielgerichtete Aussagen kann, so die Befürworter, die Softwareentwicklung auf eine ingenieurmäßige Basis gestellt und entsprechend optimiert werden.

Siehe auch

Wikibooks: Softwaretechnik – Lern- und Lehrmaterialien

Literatur

  • H. Balzert: Software-Entwicklung. 2. Auflage. Spektrum Akademischer Verlag, Heidelberg 2001 (Lehrbuch der Software-Technik, Band 1) ISBN 3-8274-0480-0
  • M. Born, E. Holz, O. Kath: Softwareentwicklung mit UML 2, Addison-Wesley, 2004, ISBN 3-8273-2086-0
  • B. Brügge, A. H. Dutoit: Objekt-orientierte Softwaretechnik mit UML, Entwurfsmustern und Java, Pearson Studium, 2004, ISBN 3827370825
  • B. Oestereich: Objektorientierte Softwareentwicklung mit der UML 2.0, Oldenbourg Verlag, 2004, ISBN 3486272667
  • G. Pomberger, W. Pree: Software Engineering, Hanser Fachbuchverlag, 2004, ISBN 3446224297
  • I. Sommerville: Software Engineering, Addison-Wesley, 7.Auflage, 2004, ISBN 0321210263
  • W. Zuser, T. Grechenig, M. Köhle: Software Engineering mit UML und dem Unified Process, Pearson Studium, 2004, ISBN 3827370906