Navigation


Softwaretechnik

28.05.2012 @ 08:35, RedBot,

Die Softwaretechnik ist eine deutschsprachige Übersetzung des engl. Begriffs software engineering und beschäftigt sich mit der Herstellung bzw. Entwicklung von Software, der Organisation und Modellierung der zugehörigen Datenstrukturen und dem Betrieb von Softwaresystemen. 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, S.36)

Softwaretechnik umfasst eine Vielzahl von Teilgebieten, die in ihrer Gesamtheit die Softwareentwicklung begleiten. Wichtig ist auch die experimentelle Untersuchung von Softwaretechnik, um ihren praktischen Nutzen zu messen und zu verbessern. Zur Beschreibung des „Standes der Technik“ des Fachgebiets gibt es verschiedene Ansätze, unter anderem den „Guide to the Software Engineering Body of Knowledge“ (SWEBOK) der IEEE Computer Society.

In erweitertem Sinn umfasst die Softwaretechnik – neben dem Entwickeln – auch das Betreiben der Software unter Nutzung der Informationstechnik.

Teilgebiete


Aufgrund des hohen Aufwandes zur Erstellung und Wartung komplexer Software erfolgt die Entwicklung durch Softwareentwickler anhand eines strukturierten (Projekt-)Planes. Dieser Plan (das Vorgehensmodell) unterteilt den Entwicklungsprozess in überschaubare, zeitlich und inhaltlich begrenzte Phasen. Die Software wird somit Schritt für Schritt fertiggestellt. Die Phasen sind während des ganzen Entwicklungsprozesses eng miteinander verzahnt. In der Praxis werden auch Verfahren eingesetzt, welche die Mehrstufigkeit von Systemanalyse, Systemdesign/Konzept und anschließender Implementierung und Testen aufgeben, siehe z. B. unter Prototyping, Agile Softwareentwicklung.

Die Softwaretechnik beinhaltet den gesamten Prozess von der Identifizierung des Bedarfs bis hin zur Inbetriebnahme einer konkreten IT-Lösung, zum Teil auch darüber hinaus. Hauptgegenstand ist die Bereitstellung und Einführung einer Anwendungssoftware, teilweise zzgl. der benötigten Hardware und Netzwerke.

Die zu implementierende Software kann entweder eine Individualsoftware oder eine Kombination und Konfiguration von Standardsoftware sein.

Projekte werden oftmals von oder mit externen Dienstleistungsunternehmen, häufig aber auch als Eigenentwicklung geleistet. Dementsprechend vielfältig, auch abhängig von der Projektart, sind auch die Vorgehensweisen bei der Projektentwicklung: Von einer sehr strukturierten Herangehensweise, siehe Wasserfallmodell, über verschiedene Mischformen bis hin zu sehr flexiblen, offenen Methoden wie der Agilen Softwareentwicklung. Entsprechend wird auch zwischen Top-Down- und Bottom-Up-Ansätzen unterschieden.

Im Folgenden werden einige wichtige Aspekte und typische Stufen/Phasen der Projektentwicklung beschrieben, die in der Praxis mehr oder weniger ausgeprägt zum Tragen kommen.

Die Phasen und ihre Aufgabenstellungen sind in der folgenden Tabelle aufgeführt:
{| border="0" cellspacing="15"
|

Kernprozesse

1. Planung
* Anforderungserhebung
* Lastenheft (Anforderungsdefinition)
* Pflichtenheft (Mit technischen Ansätzen verfeinertes Lastenheft)
* Aufwandsschätzung (z. B. mittels Function-Point-Verfahren oder COCOMO)

* Vorgehensmodell

2. Analyse
* Auswertung
* Mock-up
* Prozessanalyse / Prozessmodell
* Systemanalyse
* Strukturierte Analyse (SA)
* Objektorientierte Analyse (OOA)
3. Entwurf
* Softwarearchitektur
* Strukturiertes Design (SD)
* Objektorientiertes Design (OOD)
* Unified Modeling Language (UML)

* Fundamental Modeling Concepts (FMC)

4. Programmierung
* Normierte Programmierung
* Strukturierte Programmierung
* Objektorientierte Programmierung (OOP)

* Funktionale Programmierung

5. Validierung und Verifikation
* Modultests (Low-Level-Test)
* Integrationstests (Low-Level-Test)
* Systemtests (High-Level-Test)

* Akzeptanztests (High-Level-Test)

| valign="top" |

Unterstützungsprozesse

6. Anforderungsmanagement

7. Projektmanagement
* Risikomanagement
* Projektplanung
* Projektverfolgung und -steuerung

* Management von Lieferantenvereinbarungen

8. Qualitätsmanagement
* Capability Maturity Model
* Spice (Norm) (Software Process Improvement and Capability Determination)
* Incident Management
* Problem Management
* Softwaremetrik (Messung von Softwareeigenschaften)
* statische Analyse (Berechnung von Schwachstellen)

* Softwareergonomie

9. Konfigurationsmanagement
* Versionsverwaltung
* Änderungsmanagement / Veränderungsmanagement
* Release Management

* Application Management (ITIL)

10. Softwareeinführung

11. Dokumentation
* Technische Dokumentation
* Softwaredokumentation
* Software-Dokumentationswerkzeug
* Systemdokumentation (Weiterentwicklung und Fehlerbehebung)
* Betriebsdokumentation (Betreiber/Service)
* Bedienungsanleitung (Anwender)
* Geschäftsprozesse (Konzeption der Weiterentwicklung)
* Verfahrensdokumentation (Beschreibung rechtlich relevanter Softwareprozesse)
|}

Die oben genannten Teilschritte der Softwareentwicklung werden nicht zwangsläufig bei jedem Projekt komplett durchlaufen. Vielmehr werden einzelne Prozesse spezifisch für die jeweilige Anforderung gewählt. Dies ist aus Sicht der Kosten- und Verwaltungsreduzierung notwendig.

Projektmanagement


Der gesamte Prozess einer Projektentwicklung unterliegt meist einem mehr oder weniger stark ausgeprägten Projektmanagement. Im Falle der Realisierung durch einen IT-Dienstleister wird meist sowohl auf Auftraggeber- als auch auf Auftragnehmer-Seite ein jeweils eigenständiges Projektmanagement betrieben. Um Konflikte zwischen den beiden Projektleitern aufzulösen, wird dem übergeordnet oftmals noch ein aus dem Management von Auftraggeber und Auftragnehmer zusammengesetztes Kontrollgremium (Project Board) eingesetzt.

Typischerweise wird für größere Projekte auch ein größerer Projektmanagement-Aufwand betrieben, während mittlere oder kleinere Projekte häufig „nebenbei“ abgewickelt werden.

In allen Phasen der Projektentwicklung ist das IT-Consulting (oder auf Deutsch „Konzeptionen und Beratung“) durch externe Beraterfirmen üblich.

Qualitätsmanagement


Das Qualitätsmanagement innerhalb des Projekts wird als Teilbereich des Projektmanagements verstanden.The Project Management Institute (Hrsg.): A Guide to the Project Management Body of Knowledge (PMBOK Guide). Deutsche Ausgabe 2000, Newton Square, Penn., Project Management Institute. ISBN 978-1-930699-21-2, S. 95–103 Es umfasst die Teilgebiete:

* Qualitätsplanung, das heißt Identifizierung der für das Projekt relevanten Qualitätskriterien und der Methoden, mit denen sie erfüllt werden können.
* Qualitätssicherung, das heißt regelmäßige und regelgerechte Bewertung der Projektleistung, damit das Projekt die Qualitätsstandards erfüllt.

* Qualitätslenkung, das heißt Überwachen der Projektergebnisse, um festzustellen, ob die Qualitätsstandards erfüllt werden, und um die Ursachen unzureichender Leistungen zu beseitigen.

Das Qualitätsmanagement im Projekt muss sowohl die Leistung des Projekts als auch die Qualität des Projektprodukts ansprechen. Modernes Qualitätsmanagement und modernes Produktmanagement ergänzen sich. Beide Disziplinen erkennen die Bedeutung von

* Kundenzufriedenheit
* Prävention geht vor Überprüfung

* Managementverantwortung

an. Qualitätsverbesserungsprogramme, die von der Trägerorganisation durchgeführt werden, beispielsweise nach TQM oder nach ISO 9000, können integriert werden, um die Qualität des Projekts und die des Produkts zu verbessern.

thumb|Magisches Dreieck

Wie generell im Projektmanagement ist dem permanenten Zielkonflikt zwischen Qualität, Kosten und Zeit Rechnung zu tragen.Kessler, Heinrich; Winkelhofer, Georg: Projektmanagement. 4. Auflage. Heidelberg 2004, Springer. S. 55–56. Speziell in Softwareprojekten steht die Projektleitung häufig unter hohem Termindruck und ist einem besonders hohen Risiko ausgesetzt, die Qualität zu vernachlässigen.Wendt, Dierk (Sprecher der Arbeitsgruppe): [http://www.theoinf.tu-ilmenau.de/~riebisch/swqs/fehler.html Klassische Fehler in der Software-Entwicklung], TU Ilmenau, Version vom 6. Oktober 2005, abgerufen am 9. Februar 2011

Risikomanagement


Aufgrund der Komplexität von Informationssystemen sind „absolute“ Sicherheit bzw. Qualität nicht ökonomisch realisierbar. Daher werden zur Kategorisierung und Priorisierung häufig Methoden des Risikomanagements eingesetzt, um für das jeweilige Projekt ein adäquates Maß an Systemsicherheit und -qualität zu gewährleisten.

Aspekte des Risikomanagements sollten über den gesamten System-Lebenszyklus, also beginnend mit dem Konzept, über die Entwicklung oder Programmierung, Implementierung und Konfiguration und während des Betriebes bis hin zur Stilllegung des Systems berücksichtigt werden.

Anforderungserhebung


Im Zusammenhang mit der Projektentwicklung ist hier die Systemanalyse zur Projektvorbereitung gemeint. Gegenstand ist die inhaltliche Erfassung der Anforderungen durch Befragung künftiger Anwender sowie die systematische Untersuchung weiterer sachlicher und technischer Anforderungen und Randbedingungen (Schnittstellen zu Drittsystemen, gesetzliche Anforderungen u.dgl.). Ergebnis ist meist ein Fachkonzept, oftmals auch gleich ein Lastenheft.

Ein Pflichtenheft enthält sämtliche Funktionen und Anforderungen an ein Programm. Darin wird festgelegt, welche Funktionen verlangt sind und was diese genau tun. Anhand dieser Übersicht werden die grundlegenden technischen Entwurfsentscheidungen getroffen, und daraus wird die Systemarchitektur abgeleitet.

Im Falle einer Beauftragung eines Dienstleistungsunternehmens ist das Pflichtenheft die vertragliche Grundlage für die vereinbarten Leistungen. Deshalb ist die Vollständigkeit und Richtigkeit der darin getroffenen Festlegungen und Anforderungen von besonderer Bedeutung für den Auftraggeber.

Systemdesign/technische Konzeption


Ein Systemanalytiker bzw. -designer, bei kleineren Projekten auch der Programmierer, legt anhand des Pflichtenhefts die Programmarchitektur fest. Soweit Standardsoftwareprodukte zum Einsatz kommen, erfolgt in dieser Phase auch eine Spezifikation der geplanten Produkteinbindung bzw. -anpassung.
Für neu zu entwickelnde Software erfolgt der Entwurf des Datenmodells und der einzelnen Funktionen und Algorithmen bzw. der Objekt- und Klassenstruktur. Falls bereits vorhandene Software angepasst (adaptiert) werden, so wird in dieser Phase festgelegt, welche Veränderungen und Erweiterungen erforderlich sind.

Das Ergebnis des Systemdesigns wird auch DV-Konzept genannt.

Implementierung


In der Implementierungsphase wird die zuvor konzipierte Anwendungslösung technisch realisiert, indem Softwareprodukte konfiguriert, vorhandene Software angepasst oder Programme bzw. Programmteile vollständig neu erstellt werden.

Eine Neuerstellung von Software erfolgt meist durch Programmierung, d. h. die einzelnen Funktionen, Objekte, Klassen u.s.w. werden in einer Programmiersprache mit Hilfe einer Integrierten Entwicklungsumgebung codiert.

Softwaretest


Die Software wird im Softwaretest in zweierlei Hinsicht getestet, zum einen
* technisch, d. h. auf eine korrekte Umsetzung des DV-Konzepts und auf Programmfehler, und zum anderen

* inhaltlich, d. h. auf Vollständigkeit bezüglich des Pflichtenhefts und Eignung für den vorgesehenen Zweck.

Während der Systemtest eine alleinige Angelegenheit des Auftragnehmers ist, erfolgt der Verfahrenstest meist in Zusammenarbeit mit den Endanwendern des Auftraggebers.

Es gilt in der Softwareentwicklung als normal, dass Programme fehlerhaft sind. Gelegentlich müssen sogar ganze Teile vollständig neu umgesetzt, also neu programmiert werden. Da in komplexeren Applikationen nicht mit Sicherheit ausgeschlossen werden kann, dass geänderte Programmteile nicht etwa andere Programmfunktionen beeinflussen können (Nebeneffekte), sollte nach der Fehlerbeseitigung ein erneuter vollständiger Test des Gesamtsystems erfolgen. Bis zur endgültigen Freigabe der Software sind meist mehrere Test- und Fehlerbeseitigungszyklen (iteratives Vorgehen) erforderlich.

Softwareeinführung


Die fertiggestellte Software nebst eventuell erforderlicher Standardsoftwareprodukte, Hardware u. ä. wird sodann im Zuge der Installation auf den Computersystemen des Auftraggebers oder des Betreibers (eines Application Service Providers) aufgespielt und betriebsbereit gemacht. Hierbei wird oftmals zwischen parallelen „Produktiv“-, „Test“-, „Schulungs“- und „Entwicklungs“-Installationen unterschieden.

Je nach technischer Plattform erfolgt die Installation auf Zentralrechnern (Server) oder auf den Arbeitsplatzrechnern oder beides. Bei Datenbankanwendungen erfolgt ggf. noch ein Tuning der Datenbank. In einigen Fällen erfolgt noch eine Migration aus älteren Anwendungslösungen.

Bei größeren Projekten erfolgt oftmals zunächst nur eine Installation auf einem Testsystem bzw. bei wenigen Pilot-Anwendern. Die nachfolgende Ausweitung (Installation und Inbetriebnahme) auf weitere Standorte nennt man Rollout.

Wesentlicher Teil des Projekts ist die Einführungsunterstützung, insbesondere in Form von Schulung bzw. Einweisung der Endanwender, Power User und Administratoren.

Es gibt sehr unterschiedliche Schulungskonzepte. Eine größere Anzahl von Benutzern wird oftmals über s.g. „Multiplikatoren“ geschult. Multiplikatoren sind Anwender, die wiederum weitere Anwender schulen. Dieses Verfahren nennt man auch Train the Trainers.

Zunehmend erfolgt die Anwenderschulung auch über das Internet mit entsprechenden Traininganwendungen.

Wartung/Pflege


Nach der Inbetriebnahme einer Softwarelösung ist eine kontinuierliche Weiterbetreuung erforderlich und üblich.

Diese umfasst sowohl eine Unterstützung der Anwender z. B. per Hotline im laufenden Betrieb als auch Erweiterungen der Software bei Bedarf. Bei externer Softwareerstellung / Projektabwicklung wird beides in einem Support-Vertrag geregelt.

Dabei wird zwischen einem First-level-Support und einem Second-level-Support unterschieden. Der First-level Support (auch User Help Desk oder UHD) ist erste Anlaufstelle für alle eingehenden Unterstützungsfragen und nimmt alle Problemmeldungen entgegen. Er leitet aber nur schwerwiegende Probleme an den Second-level-Support, bei Standardsoftware z. B. beim Produkthersteller, weiter.

Die laufende Anpassung der Software an sich ändernde Anforderungen oder Umgebungsbedingungen, z. B. an neue Versionen verwendeter Standardsoftware, wird als „Softwarepflege“ bezeichnet. Größere Veränderungen werden über eigene Wartungsprojekte bearbeitet, kleinere Anpassungen häufig als Wartungsaufgaben mit einfacheren Prozessregeln. Das Management des nachträglichen Einbringens von Änderungen in ein laufendes System nennt man Veränderungsmanagement.

Literatur


* Helmut Balzert: Lehrbuch der Software-Technik. Bd.1. Software-Entwicklung. Spektrum Akademischer Verlag, Heidelberg 1996, 1998, 2001, ISBN 3-8274-0480-0.
* Jochen Ludewig, Horst Lichter: Software Engineering – Grundlagen, Menschen, Prozesse, Techniken. dpunkt.verlag, Heidelberg 2006, ISBN 3-89864-268-2.
* Gustav Pomberger, Wolfgang Pree: Software Engineering. Hanser Fachbuchverlag, München 2004, ISBN 3-446-22429-7.
* Ian Sommerville: Software Engineering. 7. Aufl. Addison-Wesley, München 2004, ISBN 0-321-21026-3.

* Thomas Grechenig, Mario Bernhart, Roland Breiteneder, Karin Kappel: Softwaretechnik – Mit Fallbeispielen aus realen Projekten Pearson Studium, München 2009, ISBN 3-86894-007-3.

Einzelnachweise


Weblinks


{{Wikibooks|Softwaretechnik}}

* [http://www.kreissl.info/download.php?Downloadname=Softwaretech_hokr.pdf Einführung in die Softwaretechnologie]

af:Sagteware-ingenieurswese
am:የሶፍትዌር አሠራር
ar:هندسة البرمجيات
ast:Inxeniería del software
bg:Софтуерно инженерство
bs:Softverski inženjering
ca:Enginyeria de programari
cs:Softwarové inženýrství
da:Softwareudvikling
el:Μηχανική λογισμικού
Software engineering
es:Ingeniería de software
eu:Software-ingeniaritza
fa:مهندسی نرم‌افزار
fi:Ohjelmistotuotanto
Génie logiciel
ga:Innealtóireacht bogearraí
gl:Enxeñaría de software
gv:Jeshaghteyrys cooid vog
he:הנדסת תוכנה
hi:सॉफ्टवेयर इंजीनियरी
hr:Programsko inženjerstvo
hy:Ծրագրային ապահովման ճարտարագիտություն
id:Rekayasa perangkat lunak
is:Hugbúnaðarverkfræði
it:Ingegneria del software
ja:ソフトウェア工学
kk:Бағдарламалық жасақтама инжинирингі
ko:소프트웨어 공학
ku:Endezyariya nivîsbariyê
lo:Software engineering
lt:Programų inžinerija
lv:Programminženierija
mk:Софтверско инженерство
ml:സോഫ്റ്റ്വെയർ എഞ്ചിനീയറിങ്
mn:Програм хангамжийн инженерчлэл
ms:Pembangunan perisian
nl:Software engineering
no:Programvareutvikling
pl:Inżynieria oprogramowania
pt:Engenharia de software
ro:Inginerie software
ru:Инженерия программного обеспечения
si:මෘදුකාංග ඉංජිනේරු ශිල්පය
sk:Softvérové inžinierstvo
sq:Inxhinieria Softuerike
sr:Инжењеринг софтвера
su:Rékayasa software
sv:Programvaruutveckling
sw:Uundaji bidhaa pepe za tarakilishi
ta:மென்பொருட் பொறியியல்
th:วิศวกรรมซอฟต์แวร์
ti:ሶፍትዌር ምህንድስና
tl:Software engineering
tr:Yazılım mühendisliği
uk:Програмна інженерія
vi:Công nghệ phần mềm
war:Inhenyerya hin software
yi:ווייכווארג אינזשעניריע
zh:软件工程

weiter

Text und Bilder dieses Beitrags stammen aus dem Artikel Softwaretechnik der freien Enzyklopädie Wikipedia und stehen unter der GNU Free Documentation License. Die Liste der Autoren ist in der Wikipedia unter dieser Seite verfügbar, der Original-Artikel lässt sich hier bearbeiten.