Software Engineering: Softwaretechnik
Wintersemester 1999/2000
Prof. Dr. Manfred Broy

Bereich:  Informatik I, Vorlesung: 3 Std.

Zeit und Ort der Vorlesung:  Mittwoch 12:15-13:00, Hörsaal N1070,  Freitag 10:15-12:00, Hörsaal S1128
Beginn:  Mittwoch, 3. November 1999

Sprechstunde:  Mittwoch 10:15-11:00 im Büro 2556 (in der Vorlesungszeit)

Hörerkreis:  Studenten der Informatik nach dem Vordiplom
Voraussetzungen:   Informatik bis zum Vordiplom
Empfehlenswert für:   Hauptfach und Nebenfach Informatik

Zeit und Ort der Zentralübung:  Dienstag 16:00-17:30, Hörsaal 1200, ab 1.2.2000 im Raum N0116
Beginn:   Dienstag, 9. November 1999
Übungsleitung:  Herbert Ehler und Bernhard Schätz
Klausur: Dienstag, 29. Februar 2000, 16:00 - 18: 00 Uhr im Hörsaal N1179, Anmeldung per email an ehler@in.tum.de bis zum 15.2.2000. ( Achtung Raumänderung !!! )

Die Aufgabenblätter für die Zentralübung werden regelmäßig in der Vorlesung verteilt. Es ist unverzichtbar, sich mit den Aufgaben auseinanderzusetzen, um sich den Vorlesungsstoff zu erarbeiten. Für Fragen stehen die Übungsleiter nach der Zentralübung zur Verfügung. Bei Bedarf werden in der Vorlesung auch Arbeits- und Merkblätter ausgeteilt.

Inhalt:
Die Vorlesung vermittelt  die grundlegende Technik und Methodik für die Entwicklung großer Softwaresysteme.

Fragen der Projektorganisation und des Projektmanagements werden in einer 2std. Vorlesung behandelt, die sich im Sommersemester 2000 anschließt.

1.  Einleitung
    1.1  Softwaretechnik und ihre Bedeutung
    1.2  Zielsetzung und Aufgaben der Softwaretechnik
    1.3  Grundbegriffe
    1.4  Spezifische Schwierigkeiten und Erfolgsfaktoren im Entwicklungsprozeß
    1.5  Qualitäsmerkmale und Risiken
    1.6  Projektorganisation und -management

2.  Grundlegende Entwicklungsmethodik
     2.1  Projektphasen und Systemzergliederung
            2.1.1  Phasen der Systementwicklung
            2.1.2  Systembeschreibungen
            2.1.3  Systemzergliederung in Komponenten
     2.2  Phasen der Softwareentwicklung
            2.2.1  Vorstudie
            2.2.2  Problem- und Systemanalyse
            2.2.3  Anforderungsspezifikation
            2.2.4  Systementwurf
            2.2.5  Systemimplementierung
            2.2.6  Test, Verifikation und Abnahme
            2.2.7  Modifikation, Anpassung und Weiterentwicklung
            2.2.8  Allgemeine Bemerkungen zur Organisation der Arbeit in Phasen
     2.3  Vorgehensmodelle
            2.3.1  Phasenmodelle
                      2.3.1.1 Wasserfallmodell
                      2.3.1.2 V-Modell
            2.3.2 Prototyporientierte Softwareentwicklung
                      2.3.2.1  Spiralmodell
                      2.3.2.2  Inkrementelles Vorgehensmodell: Evolutionäres Prototyping
                      2.3.2.3  Experimentelles Prototyping
            2.3.3  Allgemeine Bemerkungen zu Vorgehensmodellen
     2.4  Entwicklungsmethoden
            2.4.1 Top-Down und Bottom-Up Ansätze
            2.4.2 Schrittweise Verfeinerung
            2.4.3 Komponentenorientierte Softwareentwicklung
            2.4.4 Objektorientierung in der Softwareentwicklung

3. Systeme, Software und ihre Beschreibung
     3.1 Systeme
            3.1.1 Systemmodelle
                      3.1.1.1  Sequentielle Systemmodelle
                      3.1.1.2  Interaktive Systeme
                      3.1.1.3  Parallele Systemmodelle
            3.1.2 Beschreibungsmittel
     3.2 Systemsichten, Modelle, Beschreibungstechniken
            3.2.1 Datenmodelle
                      3.2.1.1  Abstrakte Datentypen
                      3.2.1.2  E/R-Datenmodellierung
            3.2.2 Architekturmodelle
            3.2.3 Zustandsmodelle
            3.2.4 Prozeßmodelle
            3.2.5 Schnittstellenmodelle  und Komponentendarstellung
            3.2.6 Programmdarstellung
                      3.2.6.1  Pseudocode
                      3.2.6.2 Sichten auf Programme
     3.3 Qualitätsmerkmale und Standards

4.  System- und Anforderungsanalyse
     4.1  Erfassung des Problembereichs
     4.2  Systemstudie - Machbarkeitsstudie
     4.3  Anforderungsanalyse: Erfassung der Systemanforderungen
            4.3.1 Nutzungsfälle
            4.3.2 Nutzungsschnittstelle
     4.4 Anforderungserfassung: Von System- zu Softwareanforderungen
     4.5 Softwarespezifikation
     4.6 Qualitätssicherung und Validierung
            4.6.1 Nutzerpartizipation
            4.6.2 Prototypen in der Systemanalyse
     4.7 Objektorientierte Analyse
     4.8 Werkzeuge
     4.9 Zugriffssicherheit, Zugangskontrolle, Datenschutz

5.  Systementwurf
     5.1  System- und Softwarearchitektur
            5.1.1 Qualitätsmerkmale für Softwarearchitekturen
            5.1.2 Beispiele für Standardarchitekturen
            5.1.3 Spezielle Aspekte (Verteilung, Fehlerbehandlung)
     5.2 Systemzerlegung
     5.3  Komponentenspezifikation - Schnittstellenspezifikation
            5.3.1  Spezifikation von Funktionen
            5.3.2  Spezifikation von Prozeduren
            5.3.3  Spezifikation interaktiver Komponenten
     5.4 Entwurf der Nutzerschnittstelle
     5.5 Objektorientierter Entwurf
     5.6  Qualitätssicherung
            5.6.1  Verifikation, Simulation und Test
            5.6.2  Leistungsabschätzung
            5.6.3. Entwurfsreviews
            5.6.4  Entwurfsmuster
     5.7  Prinzipien im Komponentenentwurf

6.  Implementierung und Programmierung
     6.1  Implementierung des Datenmodells
     6.2  Implementierung der Komponenten
            6.2.1  Komponentenentwurf
            6.2.2  Komponentenrealisierung
            6.2.3  Komponentendokumentation
     6.3  Module und ihre Implementierung
     6.4  Objektorientierte Programmierung
     6.5  Integration
     6.6  Qualitätssicherung
            6.6.1 Codeinspektion und Reviews
            6.6.1 Testen
                      6.6.1.1  Methodik des Testens
                      6.6.1.2  Integrationstests
                      6.6.1.3  Abnahmetests
                      6.6.1.4  Top-Down-Test
                      6.6.1.5  Rechnergestützte Testdurchführung
                      6.6.1.6  Leistungsnachweis
            6.6.2  Verifikation durch Modellchecking und Korrektheitsbeweis

7   Auslieferung, Systeminstallation, Wartung, Pflege
     7.1  Abnahme
     7.2  Einführung
     7.3  Wartung und Fehlerkorrektur
     7.4  Pflege und Weiterentwicklung

8.  Prinzipien und Erfolgsfaktoren in der Softwareentwicklung
     8.1  Techniken
            8.1.1  Effizienz und Performanz
            8.1.2  Modularisierung
            8.1.3  Datenabstraktion und Verkapselung
            8.1.4  Schnittstellen
            8.1.5  Entwicklungs- und Programmierstil
            8.1.6  Benutzerschnittstellen
            8.1.7  Robustheit
     8.2  Prozeß
            8.2.1  Wiederverwendung
            8.2.2  Flexibilität - Management of Change
            8.2.3  Konfigurationsmanagement
            8.2.4  Dokumentation - Design Rationale
     8.3  Werkzeuge
            8.3.1 Programmiersprachen (Compiler)
            8.3.2 CASE

Literatur: (Wird im Lauf des Semesters vervollständigt)


Herbert Ehler, 1.2.2000