Software-Technik
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."
(Lit.: Balzert, Lehrbuch der Software-Technik, S. 36)
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.
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.
- Planung
- Projektmanagement
- Lastenheft (Anforderungsdefinition)
- Pflichtenheft (Mit technischen Ansätzen verfeinertes Lastenheft)
- Aufwandsabschätzung (z. B. mittels "Function-Point-Verfahren oder COCOMO")
- Analyse
- Datenanalyse
- Prozessanalyse
- Systemanalyse
- Strukturierte Analyse (SA)
- Objektorientierte Analyse (OOA)
- Entwurf
- Softwarearchitektur
- Strukturiertes Design (SD)
- Objektorientiertes Design (OOD)
- Programmierung
- Normierte Programmierung
- Strukturierte Programmierung
- Objektorientierte Programmierung (OOP)
- Test
- Unit-Tests (Low-Level-Test)
- Integrationstests (Low-Level-Test)
- Systemtests (High-Level-Test)
- Akzeptanztests (High-Level-Test)
- Qualitätsmanagement
- Softwareergonomie
- Softwaremetrik (Messung von Softwareeigenschaften)
- Konfigurationsmanagement
- Versionsverwaltung
- Änderungsmanagement
- Dokumentation
- Systemdokumentation
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".