Nächste Seite:
Einleitung
Softwaretechnik II
Vorlesung
Sommersemester 2009
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: allgemein
Entwurfsmuster
Beispiel zu Entwurfsmustern
Beispiel: Strukturmuster: Kompositum
Beispiel: Verhaltensmuster: Strategie
Beispiel: Strukturmuster: Dekorierer
Beispiel: Erzeugungsmuster: (abstrakte) Fabrik
Beispiel: Verhaltensmuster: Befehl
Wie Entwurfsmuster Probleme lösen
Vorlage: Muster in der Architektur
Algebraische Datentypen (Komposita)
Strukturmuster: Kompositum
Kompositum - Anwendung
Signaturen und Algebren
Termalgebra (Bäume)
Algebraische Datentypen
Entwurfsfragen bei Bäumen
Rekursionsmuster (Besucher)
Verhaltensmuster: Besucher
Wiederholung Kompositum
Wiederholung Listen
Operationen auf Listen
Rekursionsschema foldr
Kompositum und Visitor
Besucher (Aufgabe)
Desgleichen für Bäume
Bäume (Aufgabe I)
Besucher für Bäume (Komposita)
Bäume (Aufgabe II)
Funktionale Programmierung in C#
Datenströme (Iteratoren)
Verhaltensmuster: Iterator
Unendliche Datenstrukturen
Rechnen mit Streams
Iterator (Java)
Beispiel Iterator Java
Enumerator (C#)
Beispiel Enumerator (C#)
Iteratoren mit yield
Streams in C#: funktional, Linq
Befehl, Strategie, Interpreter
Befehl
Strategie
Strategie (Beispiel II)
Muster: Interpreter (Motivation)
Muster: Interpreter (Realisierung)
Interpreter (Material)
Query-Sprachen
Hibernate Criteria Query API
Linq in C#
Zustand, DI, Beobachter, MVC
Entwurfsmuster: Zustand
Zustand (Beispiel)
Zustand in Services
Dependency Injection
Verhaltensmuster: Beobachter
Beobachter: Beispiel (I)
Beobachter: Beispiel (II)
Model/View/Controller
javax.swing und MVC
Swing: Datenmodelle
Swing: Bäume
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
Versionierung (I)
Versionierung (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)
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)
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
Über dieses Dokument ...
2009-06-15