Nächste Seite:
Einleitung
Softwaretechnik II
Vorlesung
Sommersemester 2007
Johannes Waldmann, HTWK Leipzig
Einleitung
Programme und Softwaresysteme
Software ist schwer zu entwickeln
Produktivität
Inhalt
Material
Organisation
Leistungen:
The Pragmatic Programmer
Lernen! Lernen! Lernen!
Regelmäßig investieren
Übung KW 11
Fred Brooks: The Mythical Man Month
Edsger W. Dijkstra über Softwaretechnik
Was macht diese Funktion?
Schnittstellen
Beispiele
Literatur zu Schnittstellen
Schnittstellen und Verträge
Design by Contract
Schnittstellen und Tests
Stufen von Verträgen
Typen als Verträge
Arten von Schnittstellen
Schnittstellen zum Datentransport
Schnittstellen und Zustände
Mehrfache Schnittstellen
Beispiel: Sortieren
wesentliche Bestandteile
Klassen-Entwurf
Richtig vergleichen
Protokollierung mit Dekorator
Entwurfsmuster (Überblick)
Entwurfsmuster
Beispiel zu Entwurfsmustern
Beispiel: Strukturmuster: Kompositum
Beispiel: Verhaltensmuster: Strategie
Beispiel: Strukturmuster: Dekorierer
Beispiel: Erzeugungsmuster: (abstrakte) Fabrik
Beispiel: Verhaltensmuster: Befehl
OO-Entwurfsmuster
Musterkatalog
Wie Entwurfsmuster Probleme lösen
Vorlage: Muster in der Architektur
Entwurfsmuster (Beispiele)
Dekorierer
Strategie
Befehl
Erzeugungsmuster
Konstruktor/Fabrik
Erzeugungsmuster Prototyp
Erzeugungsmuster Singleton
Kompositum - Aufgabe
ohne Entwurfsmuster:
Kompositum - Anwendung
Fliegengewicht
Fliegengewicht (Beispiel)
Verhaltensmuster: Beobachter
Beobachter: Beispiel
Model/View/Controller
MVC-Beispiel
javax.swing und MVC
Swing: Datenmodelle
Swing: Bäume
Beispiel MVC: Matrix-GUI
Muster: Iterator
Muster: Besucher
Besucher (Aufgabe)
Generischer Besucher
Kompositum (Wdhlg.)
Bäume (Aufgabe I)
Besucher für Bäume (Komposita)
Bäume (Aufgabe II)
Iterator für Bäume
Vergleich Iterator/Besucher
Entwurfsfragen bei Bäumen
Muster: Interpreter (Motivation)
Muster: Interpreter (Motivation)
Muster: Interpreter (Realisierung)
Übung Woche 17
Iteratoren und Bedarfsauswertung
Entwurfsmuster: Zustand
Zustand (II)
Dependency Injection
Dependeny Injection
Veränderungen in Entwürfen vorhersehen
Quelltextverwaltung mit CVS
Anwendung, Ziele
CVS-Überblick
CVS-Tätigkeiten (I)
CVS-Tätigkeiten (II)
Konflikte verhindern oder lösen
Welche Formate?
Logging (I)
Logging (II)
Authentifizierung
Authentifizierung mit SSH/agent
Subversion
Subversion (II)
Darcs
Übung CVS
CVS - Einzelheiten
Datei-Status
CVS - Merge
Drei-Wege-Diff
Unterschiede zwischen Dateien
LCS
Die Einbettungs-Relation
Die Einbettungs-Relation (II)
Die Einbettungs-Relation (III)
Aufgaben (autotool) zu LCS
LCS -- naiver Algorithmus (exponentiell)
LCS -- bottom-up (quadratisch)
+
Übung
LCS - eingeschränkt linear
diff und LCS
Mehr zu CVS
Keyword Expansion
Das Keyword
$Log$
Text- und Binär-Dateien
Symbolische Revisionen (Tags)
Verzweigungen (branches)
Branches (II)
CVS-Benachrichtigungen
CVS-Benachrichtigungen (II)
Produktqualität (analytisch)
Klassifikation der Verfahren
Fehlermeldungen
Testen und Schnittstellen
Dynamische Tests
Dynamische Tests: Black/White
Black-Box-Tests
Probleme mit GUI-Tests
Mischformen
Testen mit JUnit
JUnit und Extreme Programming
Delta Debugging
Delta Debugging (II)
Übung zum Testen
Programmablauf-Tests
Prüfen von Testabdeckungen
Übung Profiling (C++)
Profiling (Java)
Code-Optimierungen
Kosten von Algorithmen schätzen
Code-Transformationen zur Optimierung
Gefährliche ,,Optimierungen``
Code-Metriken
Code-Metriken: Halstaed
Code-Metriken: McCabe
OO-Metriken
Kohäsion: Chidamber und Kemerer
Kohäsion: Henderson-Sellers
Code-Metriken (Eclipse)
Auswertung der Umfrage
Richtig beobachtet (Teil I)
Richtig beobachtet (Teil II)
Punktzahlen
Refactoring
Herkunft
Refaktoring: Definition
Refactoring anwenden
Refaktorisierungen
Code Smell # 1: Duplicated Code
Duplicated Code
Schablonen
Size does matter
Primitive Daten (
primitive obsession
)
Typsichere Aufzählungen
Verwendung von Daten: Datenklumpen
Datenklumpen--Beispiel
Verwendung von Daten: Data Class
Aufgabe Refactoring
Temporäre Attribute
Nichtssagende Namen
Name enthält Typ
Programmtext
Größe und Komplexität
Mehrfachverzweigungen
null-Objekte
Richtig refaktorisieren
Aufgaben zu Refaktoring (I)
Aufgaben zu Refaktoring (II)
Aufgaben zu Refaktoring (II)
Class Design
Klassen-Entwurf
Immutability
Immutability
Vererbung bricht Kapselung
Vererbung bricht Kapselung
Code- und Interface-Dokumentation
Code dokumentieren?
Abstand v. Dokumenation u. Code
Selbst-dok. Code: Klassen
Selbst-dok. Code: Methoden
Selbst-dok. Code: Daten
Selbst-dok. Code: Datenorganisation
Selbst-dok. Code: Ablauf
Selbst-dok. Code: Design
Kommentare
Selbst-dok. Code: Warum?
Schnittstellen-Dokumentation
JavaDoc
Übung Javadoc
Doxygen
Theorie und Praxis
,,Theoretische`` Informatik und Softwaretechnik
Das Haltepoblem
Das Haltepoblem (Folgerungen)
Automaten und Formale Sprachen
Scheduling-Aufgaben
Scheduling-Probleme
Komplexität von Scheduling-Problemen
Open-Shop Scheduling
Scheduling-Aufgaben (II)
Über dieses Dokument ...
Johannes Waldmann 2008-06-18