Thema: Werkzeuge für Software-QS und -Test

14:00 - 15:30

Constraints, Design by Contract, aber mit Compiler-Prüfung

Heiner Kücker

Die bekannten Assertions aus dem Design by Contract vermeiden Folgefehler in Programmen und machen Tests effektiver.
Leider wirken die Assertions nur zur Laufzeit. Entwickler möchten im Idealfall aber bereits zur Compile-Zeit Hinweise auf mögliche Fehler bekommen.

Mit den vorgestellten Constraints, die als Expressions aus Prädikaten über logische Operatoren verknüpft und als Klassen generiert werden, kann der Compiler zu dieser Compile-Zeit-Prüfung und damit als Mittel zur Fehlervermeidung eingespannt werden.

Die Formulierung als Expressions erlaubt die präzisere und stärkere Abbildung fachlicher Anforderungen als die klassischen Typ-Systeme bekannter Programmiersprachen mit Klassen, Interfaces und Typ-Parametern.
Includes (implizierte Prädikate) und Excludes (global sich gegenseitig ausschließende Prädikate) erlauben eine vereinfachte Formulierung der Constraint-Expressions.
Die klassische Typ-Kompatibilität zu Oberklassen oder Interfaces wird durch die Anwendung der einfachen Implikation von Constraint-Expressions ersetzt.
Sichere Werte vermeiden unsichere Cast-Operationen durch den Anwendungsprogrammierer.
Allgemeine Constraint-Expressions können in sicheren Switches zu spezielleren Constraint-Expressions verfeinert werden.
Sichere Operationen bilden Ursprungs-Constraint-Expressions auf Ergebnis-Constraint-Expressions ab.
Anhand des Übergangs von unsicheren Strings über etwas bessere Enum-Typen hin zu Ausprägungs-Klassen wird die Evolution der Typ-Sicherheit beim Verbessern vorhandenen Codes demonstriert.
Die Umsetzung des Ansatzes als Code-Generator für Java wird in Übungen vertieft.

Heiner Kücker

Heiner Kücker hat über 20 Jahre Erfahrung in der professionellen Software-Entwicklung. Seit 2000 ist er auf Enterprise-Java und relationale Datenbanken spezialisiert und freiberuflich für seine Kunden tätig.

Neben der Projekttätigkeit interessiert er sich für künstliche Intelligenz und theoretische Informatik sowie aktuelle Software-Technologien wie funktionale Programmierung.