# Softwaredesign

| Beteilige dich an der Diskussion! | Dieser Artikel wurde wegen inhaltlicher Mängel auf der Qualitätssicherungsseite der Redaktion Informatik eingetragen. Dies geschieht, um die Qualität der Artikel aus dem Themengebiet Informatik auf ein akzeptables Niveau zu bringen. Hilf mit, die inhaltlichen Mängel dieses Artikels zu beseitigen, und beteilige dich an der Diskussion! (+) Begründung: Der Artikel handelt nur von Modellierungssprachen und nicht vom Softwaredesign allgemein, das ist ein viel weiteres Feld. --S.K. (Diskussion) 07:58, 7. Mai 2012 (CEST) |
Softwaredesign (auch Softwarekonstruktion) ist der Konstruktionsprozess zur Implementierung einer Software-Lösung. Üblicherweise vollzieht sich die Erarbeitung und Erstellung von Software in einem Softwareentwicklungsprozess, in den ständig immer wieder graduelle Verbesserungen einfließen. Doch gegenüber dem Softwareentwicklungsprozess erfordert die Konstruktion von Software ein abstrakteres Denken auf einer Metaebene zur Programmierarbeit. Softwaredesign ist in aller Regel erforderlich, um die Komplexität, welche die meisten Computerprogramme aufweisen, für die Programmierer handhabbarer zu machen und um zielverfehlendes Programmieren zu vermeiden.

## Softwaredesign

Zur Gestaltung einer Software, die üblicherweise zu Beginn einer Softwareentwicklung an den oder die Entwickler herangetragen wird, können im Softwaredesign, je nach Aufgabenstellung, die folgenden Themenbereiche mehr oder weniger zur Umsetzung der Aufgabe benötigt werden:
* Objektorientierte Analyse und Design
* Entwurfsmuster
* Datenstruktur, Datenmodellierung, Entity-Relationship-Modell
* Softwarearchitektur
Für den schriftlichen und grafischen Niederschrieb einer geplanten Programmierweise stehen verschiedene Konventionen und Modellierungssprachen zur Verfügung.

### Sprachen, Entwurfshilfsmittel, Entwurf

Hierbei werden unterschiedliche Modellierungssprachen verwendet. Beispiele sind die Unified Modeling Language (UML) – eine graphische Modellierungssprache zur Spezifikation, Konstruktion und Dokumentation von Software-Teilen und anderen Systemen, die Fundamental Modeling Concepts (FMC) – eine semi-formale Methodik zur Kommunikation über komplexe Softwaresysteme, sowie die IDEF – eine Gruppe von Modellierungssprachen aus dem amerikanischen Behördenumfeld.
Der Fokus beim Design ist verschieden. Während UML beispielsweise mit Klassendiagrammen die Darstellung von objektorientierten Strukturen (siehe auch Objektorientierte Analyse und Design) ermöglicht, aus denen unter Umständen auch Code generiert werden kann, konzentriert sich FMC eher auf die Erstellung von Plänen zur Kommunikation über komplexe Softwaresysteme.

### Entwurfsmuster

Während des Entwurfs von Softwarearchitekturen stehen Entwickler häufig vor wiederkehrenden Problemen, zu welchen es bereits bekannte Lösungsansätze gibt. Durch die Wiederverwendung solcher Entwurfsmuster lässt sich der Entwicklungsprozess einer Software oftmals beschleunigen, da die Muster bereits getestet und erprobt sind.

## Softwareprojektierung
### Bei größeren Softwareprojekten: Rahmenbereitstellung: Vorbereitung und Management eines Projekts
#### Definition und Anforderungserhebung eines Softwareprojekts, Führen eines Pflichtenhefts

Im Allgemeinen eruieren Auftraggeber und Auftragnehmer im Zuge der Anforderungserhebung vor dem Softwaredesign zunächst die Anforderungen, die sich aus Stakeholder- bzw. Auftraggeber-Sicht an die zu erstellende Software ergeben. Im Zuge dessen erstellt ein Beteiligter – typischerweise der Auftraggeber – das sogenannte Lastenheft.
Anschließend erarbeitet der Auftragnehmer zusammen mit dem Auftraggeber über verschiedene Vorgehensweisen ein Konzept, mit welchen Programmstrukturen, Programmiertechniken und Algorithmen diese Anforderungen erfüllt und programmiert werden sollen. Der Auftragnehmer hält die Ergebnisse dieses Konzepts in dem sogenannten Pflichtenheft fest.

#### Aufgabenzuweisung an die Projektteammitglieder, Rollen im Team

Die im Rahmen des Softwaredesign anfallenden Aufgaben können eine oder mehrere Personen erledigen, die dabei unterschiedliche Rollen einnehmen können. Diese Rollen sind unternehmensabhängig unterschiedlich benannt. Geläufige Bezeichnungen für die Rollen beteiligter Mitarbeiter mit Fachkenntnissen in der Softwaremodellierung sind Softwarearchitekt, IT-Consultant oder Softwareentwickler (auch „Programmierer“ oder „Softwareingenieur“ genannt).