Vorlesung Software-Reengineering

Ähnliche Dokumente
Transformationswerkzeuge TXL, RAINCODE, DMS. Doum Maimouna Bamba Üniversität Bremen Fachbereich 3-Mathematik und Informatik

Vorlesung Software-Reengineering

Interpreter - Gliederung

Language Workbench. Aktuelle Themen der Softwaretechnologie. Vortrag von: Arthur Rehm Steven Cardoso. Betreut von: Prof. Dr.

Vorlesung Software-Reengineering

Softwaretechnik. Prof. Dr. Rainer Koschke. Fachbereich Mathematik und Informatik Arbeitsgruppe Softwaretechnik Universität Bremen

Programmiersprachen. Organisation und Einführung. Berthold Hoffmann. Studiengang Informatik Universität Bremen

zu große Programme (Bildschirmseite!) zerlegen in (weitgehend) unabhängige Einheiten: Unterprogramme

C.3 Funktionen und Prozeduren

Softwaretechnik. Überblick I. Prof. Dr. Rainer Koschke. Sommersemester 2006

Ausarbeitung des Interpreter Referats

zu große Programme (Bildschirmseite!) zerlegen in (weitgehend) unabhängige Einheiten: Unterprogramme

Compiler, Übersetzer. Allgemeine Erklärung / Definition

Zwischencodeerzeugung Compiler II

Objektorientiertes Software-Engineering

Werkzeuggestützte Softwareprüfungen Statische Analyse und Metriken

1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen. I.2. I.2. Grundlagen von von Programmiersprachen.

12.4 Sicherheitsarchitektur

Informatik ist viel mehr als Delphi-Programmierung!

Grundlagen der Informatik für Ingenieure I

Assertions (Zusicherungen)

Kapitel 3 Software Quality III

Software Engineering. Statische Analyse! Kapitel 11

Grundlagen zur nebenläufigen Programmierung in Java

Abschlussvortrag Masterarbeit: Operationalizing Architecture in an agile Software Projec

SS / 16 schrittweise Verfeinerung -> Wirth, 1971, Programm Development by Stepwise Refinement

Ein Überblick über KDevelop

Was ist Logische Programmierung?

Inhaltsverzeichnis. Literatur. 4 Rational Unified Process [JBR98, Kru03] und UML [BRJ02, FS00, Bal01]

1. Einführung Advanced Programming Techniques. Wintersemester 2009/10 Prof. Dr. Bernhard Humm Hochschule Darmstadt, FB Informatik

Reengineering und Refactoring von Softwarearchitekturen

Theoretische Informatik. Reguläre Sprachen und Automaten

Extracting Business Rules from PL/SQL-Code

Rainer Stropek cubido. Baumschule Expression Trees in C#, CLR und DLR

Objektorientierte Programmierung. Kapitel 12: Interfaces

MOF Meta Object Facility. Veranstaltungsvortrag im Rahmen der Projektgruppe ComponentTools

Ein Streifzug durch die Programmiersprachenlandschaft in der Schule. Gerald Futschek TU Wien Informatiktag 2013

Was ist ein Compiler?

Entwicklung eines korrekten Übersetzers

`# Online Read Programmieren: Software entwickeln fr Einsteiger: Lernen Sie die Grundlagen von Java, SQL und C++ (Codierung,... download books from

Datenbanksysteme I Datenbankprogrammierung Felix Naumann

Agile Modellierung mit UML Lab

Refactoring relationaler Datenbank. Shaoke Wu

und schwenkt als erste irdische Sonde überhaupt in die Umlaufbahn eines anderen Planeten ein

Definition von domänenspezifischen Sprachen mit Xtext: Einführung. 19. November 2014

Specifying Patterns for Dynamic Pattern Instance Recognition with UML 2.0 Sequence Diagrams. Lothar Wendehals. Universität Paderborn

Funktionale Programmierung (in Clojure)

Software Wartung und Evolution Teil 3: Restructuring, Reengineering. Harald Gall Institut für Informatik Universität Zürich

Theorie zu Übung 8 Implementierung in Java

Theoretische Grundlagen des Software Engineering

Kapitel 4. Einführung in den Scannergenerator Flex. Einführung in den Scannergenerator Flex Wintersemester 2008/09 1 / 9

Grundlagen der Programmierung (Vorlesung 15)

Objektorientierte Programmierung

Fachseminar. Semantische Analyse

Reduzierung der Programmgröße mit Hilfe von Klonerkennung

Programmierkurs: Delphi: Einstieg

Arbeitsblätter zu Teil I des Praktikums

Haskell, Typen, und Typberechnung. Grundlagen der Programmierung 3 A. Einige andere Programmiersprachen. Typisierung in Haskell

Informatik II Musterlösung

Guido de Melo Fachvortrag, Uni Ulm UML 2.0. Für den Einsatz in der Praxis

Created by Angelo Maron

Operatoren für elementare Datentypen Bedingte Anweisungen Schleifen. Programmieren I. Martin Schultheiß. Hochschule Darmstadt Wintersemester 2010/2011

6. Modellierung von Informationssystemen. 6.1 Einleitung 6.2 Konzeptuelles Modell 6.3 OASIS Spezifikation 6.4 Execution Model 6.

Vererbung & Schnittstellen in C#

Lehrstuhl Informatik VI Grundzüge der Informatik * WS 2008/2009 Prof. Dr. Joachim Biskup

Zusicherungen und Laufzeit Überwachungen in der modellbasierten Software Entwicklung

DSHL7: Eine Domain Specific Language für HL7v3 in Scala

1. Java ist Stammbaum der Programmiersprachen 3. Die "Softwarekrise"

VNUML Projektpraktikum

Einführung in die Informatik 1

Hilbert-Kalkül (Einführung)

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12. Kapitel 1. Einführung und Grundbegriffe

Syntaxanalyse Ausgangspunkt und Ziel

Software Analyse Tooldemo: JQuery Sommersemester Jonas Pusch

Klassenbeziehungen & Vererbung

2. Programmieren gegen Schnittstellen Advanced Programming Techniques

Einführung in die Programmierung

Grundlagen der Programmierung in C Funktionen

Fragen. f [ ] = [ ] f (x : y : ys) = x y : f ys f (x : xs) = f (x : x : xs) Wozu evaluiert f [1, 2, 3] (Abkürzung für f (1 : 2 : 3 : [ ]))?

Vorlesung Software-Reengineering

NEWSLETTER. FileDirector Version 2.5 Novelties. Filing system designer. Filing system in WinClient

PIWIN I. Praktische Informatik für Wirtschaftsmathematiker, Ingenieure und Naturwissenschaftler I. Vorlesung 3 SWS WS 2007/2008

Funktionale Programmierung. Funktionale Programmierung: Vorlesungsüberblick. Eigenschaften rein funktionaler Programmierung

Transkript:

Vorlesung Software-Reengineering Prof. Dr. Rainer Koschke Arbeitsgruppe Softwaretechnik Fachbereich Mathematik und Informatik Universität Bremen Wintersemester 2011/12 Überblick I Refactoring

Code-Transformationen: Code-Transformationen I Refactoring Refactoring Bad Smells Refactorings von Fowler Pull-Up Field Extract Method Wann durchführen? Evaluation von Refactorings Kostenschätzung Portfolio-Analyse Bewertung Refactorings Wiederholungsfragen 3 / 27 Code-Transformationen: Wegweiser Wie kann man Refactorings automatisieren? 4 / 27

Code-Transformationen: Vorteile (halb-)automatischer Transformationen (Halb-)Automatische Transformationen (halb-)automatisch und beliebig wiederholbar dokumentarisch Transformation ist Spezifikation der Änderung kontrollierbar Transformationen repräsentieren Implementierungswissen Vor- und Nachbedingungen der Transformationen sind explizit; sollten automatisch prüfbar sein Erhalt der Semantik bei einer Transformation lässt sich u. U. zeigen 5 / 27 Code-Transformationen: Definition Transformation Eine Transformation ist eine partielle Funktion t: t: Spezifikation/Programm Spezifikation/Programm Beispiele: Compiler, YACC, Programmrestrukturierer Transformationen werden oft als Rewrite-Regeln mit Pattern-Variablen repräsentiert: r u l e e l i m i n a t e a d d i t i v e i d e n t i t y r e p l a c e [ e x p r e s s i o n ] T [ e x p r e s s i o n ] + 0 by T end r u l e Syntax von TXL; siehe www.txl.ca 6 / 27

Code-Transformationen: Transformationssystem Transformationssystem Ein Transformationssystem ist ein System, das semantisch wohl-definierte (teil-)mechanisierte Programmmodifikationen ermöglicht. Source Code Parser Internal Representation Unparser Source Code Viewer focus reengineering specialist Analyzers Rewrite Rules Tranformation Engine analyze / transform / undo request end user 7 / 27 Code-Transformationen: Schritte Schritte einer Transformation 1 Lokation: Identifikation der Stelle, an der Transformation angewandt werden soll 1 Mustersuche 2 Lokation durch Benutzer 2 Prüfung der Vorbedingungen der Transformation 3 Anwendung, falls Vorbedingungen erfüllt sind 8 / 27

Code-Transformationen: Bestandteile Vorbedingungen von Transformationen Die Anwendbarkeit von Transformationen ist oft an Bedingungen geknüpft: r u l e e l i m i n a t e a d d i t i v e i d e n t i t y r e p l a c e [ e x p r e s s i o n ] T1 [ e x p r e s s i o n ] + T2 [ e x p r e s s i o n ] where v a l u e (T2) = 0 by T1 end r u l e 9 / 27 Code-Transformationen: Implementierung Umsetzung von Transformationen Ersetzung wird als Prozedur auf dem abstrakten Syntaxbaum implementiert: p r o c e d u r e e l i m i n a t e a d d i t i v e i d e n t i t y ( n : i n out node ) i s b e g i n i f t y p e ( n ) = p l u s then Mustersuche i f v a l u e ( n. r i g h t ) = 0 Bedingung then E r s e t z u n g r e p l a c e c h i l d ( p a r e n t ( n ), from => n, to => n. l e f t ) ; n. l e f t. p a r e n t := n. p a r e n t ; d e l e t e t r e e ( n. r i g h t ) ; d e l e t e ( n ) ; end i f ; end i f ; end ; 10 / 27

Code-Transformationen: Eigenschaften Eigenschaften von Transformationen Bestimmte Eigenschaften müssen bei der Transformation erhalten bleiben, andere Eigenschaften sollen sich ändern: Performanz Strukturiertheit Änderbarkeit... In vielen (aber nicht allen) Fällen soll die Semantik erhalten bleiben. 11 / 27 Code-Transformationen: Eigenschaften Semantikerhaltende Transformationen Formale Betrachtung: Objekt o hat Attribute und ist definiert in einem Kalkül grundsätzliche Wahrheiten (Axiome) A Menge von Inferenzregeln i die Eigenschaften von Objekt o sind dessen Attribute sowie alle Fakten, die sich aus den Axiomen und Attributen mittels Inferenzregeln herleiten lassen Transformation t ist semantikerhaltend genau dann, wenn für alle Objekte o gilt: die Eigenschaften von o bleiben durch die Transformation erhalten: P(o) P(t(o)) P(t(o)) ist konsistent (enthält keine Widersprüche) (alte Eigenschaften bleiben erhalten, neue dürfen hinzukommen, es ergeben sich keine Widersprüche) 12 / 27

Code-Transformationen: Eigenschaften Semantikerhaltende Transformationen Die Erhaltung der Semantik ist in der Praxis nur sehr schwer nachweisbar: Beweis muss nicht nur die Semantik der Programmiersprache, sondern auch die aller aufgerufenen Betriebssystemfunktionen u.ä. einbeziehen, und ist im Allgemeinen schwierig. Nach Transformationen stets Regressionstests durchführen! 13 / 27 Code-Transformationen: Beispiele konkreter Transformationssysteme Beispiel eines Transformationssystems TXL 1 (Queens University, Canada): generisches Transformationssystem; ausgeprägt für C, C++, Java, Javascript, Modula, Object Pascal, XML: konkreter Syntaxbaum wird generiert funktionale Programmiersprache mit Transformationsregeln mit native Patterns : automatische Traversierung des konkreten Syntaxbaums und Anwendung der Transformationen, solange dies möglich ist 1 http://www.txl.ca 14 / 27

Code-Transformationen: Beispiele konkreter Transformationssysteme TXL r u l e e l i m i n a t e r e d u n d a n t d e c l a r a t i o n s r e p l a c e [ r e p e a t s t a t e m e n t ] v a r X [ i d ] : T [ t y p e s p e c ] R e s t o f S c o p e [ r e p e a t s t a t e m e n t ] where not R e s t o f S c o p e [ r e f e r e n c e s X] by R e s t o f S c o p e end r u l e f u n c t i o n r e f e r e n c e s X [ i d ] match [ i d ] X end f u n c t i o n 15 / 27 Code-Transformationen: Beispiele konkreter Transformationssysteme Domain Maintenance System (DMS) Hersteller: Semantic Designs, Austin, Texas, USA generisches Transformationssystem parametrisierbar durch so genannte Domains (Grammatiken) konkrete Instanzen für C, C++, Java, Cobol, Jovial,... abstrakte Regeln für Parse-Baum Clone-Doctor 2 erkennt Klone (mit dem Verfahren von Baxter et al.) und beseitigt sie 2 Eingetragenes Warenzeichen von Semantic Designs http://www.semdesigns.com 16 / 27

Code-Transformationen: Beispiele konkreter Transformationssysteme DMS-Beispiel d e f a u l t base domain Java ; r u l e merge i f s ( \ c o n d i t i o n 1, \ c o n d i t i o n 2, \ then s t a t e m e n t s ) = i f ( \ c o n d i t i o n 1 ) i f ( \ c o n d i t i o n 2 ) { \ then s t a t e m e n t s } r e w r i t e s to i f ( \ c o n d i t i o n 1 && \ c o n d i t i o n 2 ) { \ then s t a t e m e n t s } ; 17 / 27 Code-Transformationen: Beispiele konkreter Transformationssysteme Raincode Hersteller: Raincode 3, Brüssel, Belgien unterstützte Sprachen: Ada, APS, C, C++, COBOL, CSP, Delphi, Ideal, Informix 4GL, Java, Natural, PL/1 Skript-Sprache, um Transformationen zu programmieren Transformation findet auf dem Text selbst statt 3 http://www.raincode.com 18 / 27

Code-Transformationen: Beispiele konkreter Transformationssysteme Raincode-Beispiel I PROCEDURE TERMINATE VAR v a l u e ; BEGIN scan a l l nodes FOR exp IN ROOT. SubNodes DO i f i t i s an e x p r e s s i o n t h a t i s not a s i m p l e l i t e r a l and i t has not been m o d i f i e d y e t I F exp I S NonCommaExpression AND exp I S NOT L i t e r a l AND exp [ Patched ]<>TRUE THEN do e v a l u a t i o n v a l u e := E v a l ( exp ) ; i f e v a l u a t i o n s u c c e e d s IF v a l u e <> VOID THEN r e p l a c e the e x p r e s s i o n by i t s v a l u e PATCH. ReplaceNt ( exp, v a l u e ) ; r e p o r t something on c o n s o l e exp. W r i t e E r r o r ( LIST. T o S t r i n g (PATCH. NtImage ( exp ) STR. Trim (X), ), = &v a l u e ) ; add a n n o t a t i o n so we do not p r o c e s s subnodes 19 / 27 Code-Transformationen: Beispiele konkreter Transformationssysteme Raincode-Beispiel II FOR IN exp. SubNodes DO X. Patched := TRUE; END; END; END; END; s a v e the p r o c e s s e d s o u r c e PATCH. Save (ROOT. SourceName&. patched ) ; END; 20 / 27

Code-Transformationen: Wiederholungsfragen Wiederholungs- und Vertiefungsfragen Welche Vorteile haben semi-automatische Transformationen? Welche wichtige Eigenschaften sollten Transformationen im RE haben? Warum? Was sollte man nach der Durchführung einer Transformation realistischerweise stets tun? Aus welchen Bestandteilen besteht eine Transformation? Wie wird ein Rewrite implementiert, wenn als Zwischendarstellung ein AST benutzt wird? 21 / 27 Code-Transformationen: Wiederholungsfragen 1 Fowler 2000 Fowler, Martin: Refactoring: Improving the Design of Existing Code. Addison-Wesley, 2000 2 Sneed 1995 Sneed, Harry: Planning the Reengineering of Legacy Systems. In: IEEE Software (1995), January. beschreibt die Planung von Reengineering-Projekten 22 / 27