Werkzeugunterstützte Softwareadaption mit Inject/J

Slides:



Advertisements
Ähnliche Präsentationen
Forschungszentrum Informatik
Advertisements

C Sharp (C#) Martin Saternus Senior Student Partner
der Universität Oldenburg
der Universität Oldenburg
Objektorientierte Programmierung
der Universität Oldenburg
der Universität Oldenburg
der Universität Oldenburg
der Universität Oldenburg
Heterogene Informationssysteme
Einführung in die Programmierung Zusammenfassung
Dr. Andreas Winter Sommersemester 2007 Einführung in die Software-Entwicklung © Institut für Informatik Programmier-Richtlinien vgl. auch
Kapitel 5. Stacks und Queues
Seminar Internetdienste Web 2.0 und Rich Internet Applications (RIA) JavaFX Rainer Scholz.
(kleine!) Java Einführung Mittwoch, Heute Ziel: erstes Java-Programm erstellen Von der Aufgabenstellung bis zur Lösung Grundlagen Einfache.
Christian A. Kopf Institut für Informatik FU Berlin Episode Recognizer Framework - Rahmenwerk zur Episodenerkennung.
der Universität Oldenburg
Objektorientierte Programmierung
der Universität Oldenburg
Paul, Morten, Yannick Blue J. Entwicklungsumgebung versteht Java Programmcode versteht Java Programmcode Für die Entwicklung eigener Software.
Ausnahmen HS Merseburg (FH) WS 06/07.
Sortieren mit Binären Bäumen
Java: Objektorientierte Programmierung
Java: Dynamische Datentypen
Listen Richard Göbel.
Indirekte Adressierung
Java: Grundlagen der Sprache
Java: Referenzen und Zeichenketten
Java: Grundlagen der Objektorientierung
Assoziationen (Beziehungen) 1 : n. Zu einem Auto gibt es mehrere Fahrer (2) und zu diesen 2 Fahrern gibt es genau dieses Auto.
Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 4 Vererbung Sommersemester 2003 Lars Bernard.
Sommersemester 2004 Jan Drewnak Entwicklung und Einsatz von Geosoftware I Praktikum Sitzung X1 Sitzung X1: Packages & Wiederholung.
XML-Parser Manuel Röllinghoff.
Eine (Gleichungs-)Spezifikation ist ein Paar SPEC = (, E),
Einführung Wat jibt´s denn? Mit Computa kenn´ ick mir aus! Guten Tag,
Christian Kästner Modellgetriebene Softwareentwicklung Eclipse Modelling Framework.
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik I Vorlesung Listen-
Praxis-Repetitorium JAVA zusätzliche, ergänzende Lehrveranstaltung
PRJ 2007/1 Stefan Dissmann Motivation Problem: gleiche Datenstrukturen werden für verschiedene Objekte gebraucht: z.B. Listen von Studierenden, Kunden,
PKJ 2005/1 Stefan Dissmann Ausblick Es fehlen noch: Möglichkeiten zum Strukturieren größerer Programme Umgang mit variabler Zahl von Elementen Umgang mit.
PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf.
PKJ 2005/1 Stefan Dissmann Zusammenfassung Bisher im Kurs erarbeitete Konzepte(1): Umgang mit einfachen Datentypen Umgang mit Feldern Umgang mit Referenzen.
Explizite und editierbare Metainformationen für Software Muster.
Projektplan: Fachgebiet Software Engineering Übersicht © Albert Zündorf, Kassel University.
1 Reverse Engineering WS 07 / 08 A. Zündorf. Fachgebiet Software Engineering Übersicht © Albert Zündorf, Kassel University 2 Organisatorisches.
A. Zündorf, SE Group Reverse Engineering K2 1 Übersicht 1.Quelltextanalyse mit regulären Ausdrücken 2.Compilertechniken 3.Prozessanalyse 4.Dynamische Analyse.
DVG Interfaces. DVG mehrfache Vererbung 4 Mehrfache Vererbung ist die Ableitung einer Klassen von mehreren anderen Klassen. –farbigerPunkt.
DVG Einführung in Java1 Einführung in JAVA.
Abstrakte Klassen, Interface
Java in 9 Folien Besser: Online-Buch Go to Java 2.
Informatikunterricht mit Java
Forschungszentrum Informatik, Karlsruhe Objektorientierte Systeme unter der Lupe Markus Bauer Oliver Ciupke.
PRJ 2007/1 Stefan Dissmann Verkettete datenstruktur: Liste Problem: Liste, die eine beliebige Zahl von Elementen verwaltet Operationen: Erzeugen, Anfügen,
Einführung in die Programmierung
Einführung in die Programmierung Wintersemester 2009/10 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Entwicklung verteilter Anwendungen I, WS 13/14 Prof. Dr. Herrad Schmidt WS 13/14 Kapitel 1 Folie 2 Microsoft.NET Framework: Quelle:
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
1.6 Die Datenstruktur Stapel Ein Stapel (Stack) ist ein Sonderfall einer Liste. Die Elemente werden nach dem Prinzip LIFO (Last In First Out) angefügt.
AK Simulationswerkzeuge für das RE R. Schmid / Folie 1 Evaluation von simulationsfähigen RE-Werkzeugen Reto Schmid Institut für Informatik,
Code-Quality-Management Info-Point Urs Frei. Inhalt Ziel der Analyse Messen der Qualität (QBL) Eine Messgrösse als Bsp. Analysierte Software Tool zur.
Parallele Programmierung in Java
Programmiervorkurs WS 2014/15 Instanzmethoden
Robuste Programme durch Ausnahmebehandlung
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Thomas H. Kolbe Einführung in die Programmierung mit Java 9. Vorlesung WS 2001/2002.
MDA – Model Driven Architecture
Diskrete Mathe Diskrete Mathematik I Listen Vorlesung 4.
Christos, Kornelia, Jan Christos, Kornelia, Jan Entwicklungsumgebung Versteht unseren Java Programm Code Versteht unseren Java Programm.
Technische Universität München, Informatik XI Angewandte Informatik / Kooperative Systeme Verteilte Anwendungen: Entwurf Dr. Wolfgang Wörndl
Vortrag Einführung in AspectJ. Gliederung 1 Einleitung 2 Querschnittsfunktionalitäten in AspectJ 2.1 Sprachelemente 3 Beispiel 4 Join Point Modell 5 Weaving.
1. Die rekursive Datenstruktur Liste 1.6 Die Datenstruktur Stapel
 Präsentation transkript:

Werkzeugunterstützte Softwareadaption mit Inject/J Volker Kuttruff Thomas Genßler

Übersicht Einführung Softwareadaption mit Inject/J Anforderungen Überblick Inject/J Konzepte Korrektheit Beispiele Zusammenfassung und Ausblick Einführung Wieso Adaption von Software Probleme bei der Adaption von Software Softwareadaption Anforderungen an ein Adaptionswerkzeug

Änderung der Anforderungen erfordert Adaption Einführung Kontext Anforderungen an ein System ändern sich in den verschiedenen Entwicklungsstufen System Flexibilität Performance Struktur Persistenz und Datenmodell Kompositions- und Protokollanforderungen Wieso Adaption Softwareentwicklung ist evolutionärer Prozeß Anforderungen ändern sich - aufgrund äußerer Vorgaben - falsch verstanden - neu Flexibilität - System kann nicht / sehr schwer erweitert werden -> Restrukturierung Strukturelle und Schnittstellenanforderungen - Schnittstellen passen nicht zusammen - z.B. Versionswechsel JDK, andere Bibliothek Performance - Flexibilität oftmals nur in Entwicklungsphase gefordert, zur Laufzeit überflüssig/performancemindernd - z.B. überflüssige Indirektionen Kompositions- und Protokollanforderungen - Änderung der Interaktion/Kommunikation/Synchronisation bei Wiederverwendung Persistenz und Datenmodell - Änderung des Ablageformats - Änderung des Datenmodells (relational,objektorientiert) Änderung der Anforderungen erfordert Adaption

Einführung Adaptionsprobleme Adaptionen oftmals querschneidend Implementierung der Anforderungen im System verteilt Konsistente Adaptionen aufwendig Oftmals interne Implementierungsstrukturen betroffen Manuelle Adaption erfordert Verständnis des Quellcodes Adaptionen querschneidend - Anforderungen folgen nicht den Strukturierungsmöglichkeiten der Programmiersprache - Problem versucht AOP durch getrennte Spezifikation der Anforderungen zu lösen Implementierung verteilt - Adaption aufwendig, da u.U. sehr viele Codestellen betroffen (Benutzungsstellen) - Manuell zeitaufwendig und fehleranfällig - Blackbox-Adaption oftmals nicht ausreichend Manuelle Adaption - erfordert Verständnis des zu adaptierenden Codes - u.U. unerwünscht / unmöglich bei großen Systemen Werkzeugunterstützte Softwareadaption

Softwareadaption mit Inject/J Anforderungen Invasive Softwareadaption (Greybox-Adaption) Einfache Spezifizierung häufiger Trans-formationen auf geeignetem Abstraktionsniveau Verarbeitung bereits vorhandenen Quellcodes, insbesondere kein Paradigmenwechsel Wiederverwendbarkeit der Adaptionen Korrektheitsbegriff Anforderungen sind Erfahrungen aus internen Projekten und EU-Projekt TROOP Entscheidung für Greybox-Adaption: - Blackbox (Änderung der funktionalen Schnittstellen) in vielen Fällen nicht ausreichend - Whitebox meist zu aufwendig - große Metaprogramming-Blibiotheken erfordern lange Einarbeitungszeit - Adaptionsprogramme komplex und zeitaufwendig Einfache Spezifizierung - kurze Einarbeitungszeit - Viele Adaptionen sind ad-hoc Adaptionen - hohes Abstraktionsniveau, da sonst Spezifikation der Adaption komplexer als manuelle Ausführung Spezifikation der Adaptionen sollte relevanten Teil aller notwendigen Adaptionen abdecken. Vorhandener Quellcode - Adaptionen sollten auf vorhandenen Quellcode / alten Systemen funktionieren  (Reengineering-Gedanke) - kein Paradigmenwechsel, da Benutzer skeptisch gegenüber neuen Ansätzen - hohe Codequalität nach der Adaption Wiederverwendbarkeit - komplexere Adaptionen enthalten umfangreiches Know-How Korrektheitsbegriff - Adaptionen müssen definierten Korrektheitsbegriff unterliegen - Rücksetzbarkeit von Codeveränderungen

Überblick Inject/J Werkzeug für automatisierte Codetransformation Einfaches Metamodell Einfache Skriptsprache inkl. Skriptprozessor Arbeitet direkt auf Java-Quellcode Einsatzmöglichkeiten Ad-hoc Transformationen Querschneidende Adaptionen Entwurfsmusteroperatoren Gluecodegenerierung (Konnektoren) Allgemeine Codegenerierung Einfaches Metamodell / Skriptsprache -> kurze Einarbeitungszeit Benutzt Metaprogramming-Bibliothek für die eigentlichen Transformationen

Zentrale Konzepte Namensraum Webepunkte Navigation Transformation Enthält alle für die Adaption benötigten Java-Klassen Webepunkte Bilden Metamodell von Inject/J Navigation Auffinden der gesuchten Webepunkte Namensraum - u.U. nur Teilmenge des gesamten Systems - wird von außen übergeben Transformation sog. Webeoperationen ändern den Quelltext invasiv

Webepunkte Mögliche Transformationsstellen im System Identifizierung durch Name bzw. Signatur Implizite Webepunkte Klasse Methode Attribut Methoden-/Attributzugriff Zuweisungen Explizite Webepunkte Explizite Markierung potentieller Adaptionsstellen Mögliche Transformationsstellen - nicht alle denkbar möglichen Stellen sind transformierbar  Greybox-Charakter Identifizierung - nicht notwendigerweise einzelnes Element, kann auch eine Menge von Elementen sein Implizite Webepunkte durch das Sprachmetamodell gegeben

Navigation Hierarchische Navigation Direkte Navigation Spezifikation der Navigationsziele mit Hilfe regulärer Ausdrücke und Quantoren Beispiele: in class ´fzi.injectj.Main´ do ... foreach method ´put(java.lang.Object,*) do ... Auffinden der gesuchten Webepunkte im System Hierarchische Navigation entlang der Hierarchie des Sprachmetamodells - Notwendig, damit Webepunktnamen eindeutig Direkte Navigation - Erneutes Besuchen bereits durch hierarchische Navigation gefundener Webepunkte - Ermöglicht durch Referenzen auf diese WP

Webeoperationen before / after add change modifier replace delete Einfügen von Code vor bzw. nach dem Webepunkt add Einfügen von Code in listenartige Strukturen change modifier Ändert die Modifizierer eines Webepunktes replace Ersetzt den momentanen Quelltext durch ein neues Codefragment delete Before/after: - Bsp. Methode: before – Methodeneintritt after – alle regulären Methodenaustritte Add: - add to members: Methoden/Attribute in Klasse einfügen - add to implements Delete: - Prüfung, ob statische Referenzen existieren  Korrektheitsbegriff

Korrektheit Ist das System vor der Operation übersetzbar, so ist es auch nach der Operation übersetzbar. Sichergestellt durch umfangreiche Überprüfungen Prüfung auf Existenz von statischen Referenzen auf zu löschende Elemente Prüfung von Namenskonflikten Inkrementeller Parser Zusätzlich: Skriptbasierte Überprüfungen durch Webepunkt-Attribute Webepunkt-Attribute: - Namen - Klasse: Test ob Oberklasse einer anderen Klasse - Zugriff: Lese-/Schreib-/SchreibLeseZugriff - und vieles mehr

Beispiel (I) foreach class ´*´ do { foreach method ´*´ do { foreach access ´pop()´ <=a> to subclass ´java.util.Stack´ do { before ${ if (<a.prefixText>.empty()) System.err.println(„Empty stack...“); }$ } } } Beispiel: Einfügen von Debug-Code vor jedem Zugriff auf einen Stack. Es soll geprüft werden, ob Stack vor dem Zugriff leer ist

Beispiel (II) if (staticStack.empty()) System.out.println(„Empty stack...“); privateStack.push(staticStack.pop()); if (privateStack.empty()) System.out.println(„Empty stack...“); Object top = privateStack.pop(); this.pop();

Weitere Beispiele Observifier Beanifier Transformiert direkte Methodenaufrufe in nachrichtenbasierte Notifikation (Observer / Observable) ca. 170 Zeilen Skriptcode inkl. graphischer Benutzerinteraktion Beanifier Ersetzt Attributzugriffe durch Get/Set-Methoden Automatische Visitorgenerierung Observifier: - Entwurfsmusteroperator: nachträgliches Einfügen von Entwurfsmustern in bereits bestehende Systeme - Bei expliziter Programmierung >50KB Beanifier: - Beispiel zum forcieren von Coding-Guidelines Visitorgenerierung: - Codegenerierung / Assistent - Generierung der accep()-Methoden

Zusammenfassung Problem: Neues Werkzeug: Inject/J Aufwendige Adaptionen in großen Systemen aufgrund sich ändernder Anforderungen Neues Werkzeug: Inject/J Invasiv, nicht auf Blackbox-Adaption beschränkt Einfache Skriptsprache Kein Paradigmenwechsel, arbeitet mit vorhandenem Quelltext

Ausblick Unterstützung weiterer Webepunkte Verfeinerung des Transaktionsbegriffs Sprachmittel zur Spezifikation von Vorbedingungen Umgang mit unvollständigem Code Bibliotheken mit vorgefertigten Operationen Bessere Integration in Entwicklungsumgebungen Weitere Webepunkte: - Exception Handling Transaktion: - bisher: Ein komplettes Skript ist eine Transaktion - Teiltransaktionen innerhalb eines Skripts inkl. Zurücksetzen - Momentan Abbruch bei Fehler Spezifikation von Vorbedingungen - schon möglich mittels if/then-Konstrukten und Webepunkt-Attributen - gewünscht: effizientere Darstellung der Vorbedingungen Umgang mit unvollständigem Code - erfordert Überdenken des Korrektheitbegriffs Bibiotheken: - Stichwort Refactorings Integration: - Assistent existiert schon - Integration in JBuilder begonnen

Inject/J Webseite http://injectj.fzi.de Kontakte Thomas Genßler (genssler@fzi.de) Volker Kuttruff (kuttruff@fzi.de)