Gesamtes Lehrangebot Software Test and An...

Grundlagen des Software Engineering

Vorlesung

"I conclude that there are two ways of constructing a software design:
One way is to make it so simple that there are obviously no deficiencies,
and the other is to make it so complicated that there are no obvious deficiencies."
[C. A. R. Hoare]

Gegenstand des Software Engineering ist die ingenieurmäßige Entwicklung komplexer Softwaresysteme hoher Qualität unter Berücksichtigung der einzusetzenden Arbeits- und Zeitressourcen.

Die Vorlesung befasst sich mit dem gesamten Software-Lebenszyklus und bietet eine Übersicht konstruktiver und analytischer Prinzipien und Verfahren; insbesondere werden

  • phasenspezifische und übergreifende Ansätze klassifiziert und eingeordnet,
  • ihre Nutzen, Grenzen und Komplementarität aufgezeigt,
  • ihre Eignung in Abhängigkeit von den vorliegenden Anforderungen bewertet.


    Inhaltsübersicht
    1. Einführung
    2. Phasen des Software-Entwicklungsprozesses
    3. Modelle des Software-Lebenszyklus
    4. Softwarequalität
    5. Bewältigung von Komplexität
    6. Anforderungsphase
    7. Spezifikation: Methoden und Sprachen
    8. Objektorientierte Analyse
    9. Entwurfsphase
    10. Wiederverwendung
    11. Implementierungsphase
    12. Softwaremetriken
    13. Nachweisverfahren
    14. Wartungsphase
    15. Software-Projektmanagement
    Literatur

    Darauf aufbauend werden Spezialvorlesungen und Praktika zu obigen Themen angeboten.


    Ausführliche Inhaltsübersicht


    1. Einführung
    Definition "Software Engineering"
    Historischer Hintergrund, Softwarekrise
    Aktuelle Beispiele softwarebedingter Unfälle
    Mars Climate Observer
    Ariane 5 Mission
    Berliner Feuerwehr
    Therac-25
    Vergleich mit klassischen Ingenieurwissenschaften
    Softwarespezifische Risiken

    2. Phasen des Software-Entwicklungsprozesses
    Übersicht Softwarelebenszyklus
    Spezifikations- und Entwurfsfehler
    Kosten
    Fehlersuche und -behebung
    Entwicklungs- und Testphase
    Wartung
    Arten, Kosten
    4Ps des SWE
    Personal, Prozess, Produkt, Projekt

    3. Modelle des Software-Lebenszyklus
    Sequentielle Modelle
    Build-and-Fix Model
    Wasserfall-Modell
    V-Modell
    Inkrementelle Modelle
    Rapid Prototyping
    Spiralmodell
    Objekt-Orientiertes Paradigma
    OO vs. strukturiertes Paradigma
    Fontänenmodell

    4. Softwarequalität
    Übersicht & Klassifikation: Qualitätsmerkmale
    Definitionen
    Verlässlichkeit
    Arten der SW-Inkorrektheiten
    Ausfall vs. Versagen
    Maßnahmen zur Fehlerbehandlung
    Zufallsbedingte vs. systematische Fehler
    Korrektheitsbegriffe
    Verlässlichkeitsattribute
    Verifikation vs. Validierung
    Menschliche Irrtümer
    Übersicht: Arten, Fehlerquellen
    Übergeordnete Prinzipien, angeborene Lehrmeister
    Denkfallen, Katalog typischer Programmierfehler

    5. Bewältigung von Komplexität
    Strategien
    Abstraktion
    Divide&Conquer
    Geschichtliche Entwicklung
    Stilrichtungen
    Prinzipien der SW-Entwicklung
    Übersicht
    Verständlichkeit
    Kohäsion: Arten, Klassifikation, Kosten
    Kopplung: Arten, Klassifikation, Beispiel
    Datenkapselung und Objekt-Orientierung
    Datenkapselung aus Sicht der Entwicklung und der Pflege
    Entwicklung und Hierarchien: u.a. ADT, information hiding, OO
    Objektorientierung: Vererbung, Polymorphie, Kohäsion & Kopplung

    6. Anforderungsphase
    Definitionen
    Requirements Engineering
    Arten von Anforderungen
    Techniken und Herausforderungen der Problemanalyse
    Anforderungsdokumente
    Machbarkeitsstudie, Anforderungsanalyse
    Systemmodelle
    Viewpoints
    Datenflussdiagramme (mit Beispiel)

    7. Spezifikation: Methoden und Sprachen
    Übersicht und Einführung
    Gane & Sarsens 9 Schritte
    Entity-Relationship Diagramme
    Vergleich formaler und informaler Methoden
    Endliche (erweiterte) Zustandsmaschinen
    Beispiele: Safe und Aufzug
    Transformationelle vs. reaktive SW-Systeme
    Statecharts
    Petri-Netze
    Einfache Petri-Netze
    Beispiel: Aufzug
    Zeitbehaftete Petri-Netze
    Vergleich PN vs. TPN
    Zustandsklassen und Erreichbarkeitsgraphen
    Beispiel 1: Alternierendes Bit Protokoll
    Beispiel 2: Therac-25
    LOTOS
    Beispiel: Therac-25
    Temporale Logik
    Z
    Beispiel 1: Aufzug
    Beispiel 2: Bahnübergang
    XTG (eXtended Timed Graphs)

    8. Objektorientierte Analyse
    Überblick
    UML
    Beispiel: Aufzug
    Übersicht und Historischer Überblick
    Use-Case-Diagramme, Szenarien
    Klassenmodellierung
    Klassendiagramme
    CRC-Karten
    Dynamische Modellierung
    OOA-CASE-Werkzeuge

    9. Entwurfsphase
    Klassische Entwurfsverfahren
    Daten-orientierte Entwurfsverfahren
    Beispiel: Druckbehälter
    Aktionen-orientierte Verfahren
    Beispiel: Wortzähler
    Objekt-orientierte Entwurfsverfahren
    Interaktionsdiagramme
    Beispiel: Aufzug
    Sequenzdiagramme
    Kollaborationsdiagramme
    Detaillierte Klassendiagramme
    Beispiel: Aufzug

    10. Wiederverwendung
    Überblick: Definitionen, Arten, Gründe, Schwierigkeiten
    Beispiele aus der Industriepraxis
    Raytheon Missile Systems Division, Toshiba, NASA, GTE Data Services
    Totalversagen der Ariane 5 Trägerrakete
    Arten der Wiederverwendung
    Bibliothek, Anwendungsframeworks
    Entwurfsmuster
    Software-Architektur
    Einflüsse der Wiederverwendbarkeit: Wartung, Portabilität, Interoperabilität
    COM
    CORBA
    Off-the-shelf Software
    Qualifizierung

    11. Implementierungsphase
    Überblick: Programmiersprachen, Probleme
    Codierungsregeln
    Verständlichkeit, allgemeine Regeln
    Regeln zur Wahl der Datenstruktur
    Defensive Programmierung
    Echtzeit-, Hardware-Eigenschaften
    Modularisierungsregeln
    Kommentare, Layout
    Programmierstandards

    12. Softwaremetriken
    Einleitung: warum, was?
    Komplexitätsmaße
    Lines of code
    Halstead's Software Science
    MacCabe's zyklomatische Komplexität
    Informationsflussmetrik
    Emersons's Kohäsionsmetrik

    13. Nachweisverfahren
    Klassen von Nachweisverfahren
    Inspektionen, Reviews, Walkthroughs
    Statische Analyse
    Testen
    Überblick: Ziele, Phasen
    Testen im Software-Lebenszyklus
    Modultest
    Funktionales Testen
    Strukturelles Testen
    Anweisungsüberdeckung
    Verzweigungsüberdeckung
    Pfadüberdeckung
    Hierarchien der strukturellen Teststrategien
    Datenflussorientierte Teststrategien
    Inkrementelles Testen
    Systemtest
    Testen von Objekten
    Bewertung der Softwarezuverlässigkeit, Modelle
    Formale Methoden
    Übersicht, Werkzeuge, Grenzen
    Symbolische Ausführung
    Axiomatische Beweistheorie
    Begriffe und Methoden (Dijkstra, Floyd, Hoare)
    Korrektheitsbegriffe
    Partielle Korrektheit, Totale Korrektheit
    Beispiel: Suche in sortierte Liste
    Model Checking
    Syntax und Semantik von CTL
    Beispiel 1: gegenseitiger Ausschluss
    Beispiel 2: Cache-Konsistenzprotokoll

    14. Wartungsphase
    Kosten, Modelle, Aufgaben, Bedeutung, Personal
    Fehlerbericht, Korrektur
    Regressionstesten
    Reverse Engineering
    Wartungsmanagement
    Pflege objektorientierter Software

    15. Software-Projektmanagement
    Übersicht
    CMM (Capability Maturity Model), Key Process Areas, ISO9000, SPICE
    Programmierteam-Organisation
    Demokratisches Team, Chef-Programmier-Teams, u.a.
    Planung, Schätzung von Dauer und Kosten
    Schätzung aufgrund der Produktgröße
    Function Points vs. KDSI
    COCOMO


    Literatur
    top