Praktikum Softwareanalyse und -transformation
Thilo Mende, Rainer Koschke
Universitat BremenFachbereich 3 – Mathematik und Informatik
Arbeitsgruppe Softwaretechnikhttp://www.informatik.uni-bremen/st
Sommersemester 2009
Einfuhrung
Einfuhrung
1 Einfuhrung
2 Analyse I
3 Refactoring I
4 Analyse II
5 Refactoring II
T.Mende, R. Koschke (Uni Bremen) Softwareanalyse und -transformation SS09 3 / 19
Einfuhrung
Einfuhrung
1 EinfuhrungOrganisatorischesMotivation und ZieleUnterstutzte RefactoringsProgrammierspracheAusblick
T.Mende, R. Koschke (Uni Bremen) Softwareanalyse und -transformation SS09 4 / 19
Einfuhrung
Organisatorisches
Praktikum Softwareanalyse und -transformation
Kategorie: Vertiefung, ECTS: 6; 4 SWS
Voraussetzungen: Erfolgreiche Teilnahme an Software-Reengineering
Termine:
Treffen nach Vereinbarung, am Anfang wochentlich
Wann passt es allen?
Und bei Bedarf:
eMail: [email protected].: 218-2421Raum: TAB 2.53
T.Mende, R. Koschke (Uni Bremen) Softwareanalyse und -transformation SS09 5 / 19
Einfuhrung
Organisatorisches
Praktikum Softwareanalyse und -transformation
Kategorie: Vertiefung, ECTS: 6; 4 SWS
Voraussetzungen: Erfolgreiche Teilnahme an Software-Reengineering
Termine:
Treffen nach Vereinbarung, am Anfang wochentlich
Wann passt es allen?
Und bei Bedarf:
eMail: [email protected].: 218-2421Raum: TAB 2.53
T.Mende, R. Koschke (Uni Bremen) Softwareanalyse und -transformation SS09 5 / 19
Einfuhrung
Compiler-Struktur
Front-End
Middle-
End
Back-EndCode-
generatorCode
Analysen u.
Optimierungen
optimierte
Zwischen-
darstellung
Zwischen-
sprachen-
generator
Zwischen-
darstellung
annotierter
abstrakter
Syntax-
baum
semantische
AnalyseParser
abstrakter
Syntax-
baum
Lexer Token-
stromPraprozessor Programm-
text
Programm-
text mit
Makros
T.Mende, R. Koschke (Uni Bremen) Softwareanalyse und -transformation SS09 6 / 19
Einfuhrung
Analysator- und Transformator-Struktur
WissensbasisCodeUnparse Back-End
Transformationen
Analysenannotierte
Zwischen-
darstellung
Middle-
End
Zwischen-
sprachen-
generator
Zwischen-
darstellung
Parserabstrakter
Syntax-
baum
semantische
Analyse
annotierter
abstrakter
Syntax-
baum
Front-End
Lexer Token-
strom
Programm-
textPraprozessor
Programm-
text mit
Makros
T.Mende, R. Koschke (Uni Bremen) Softwareanalyse und -transformation SS09 7 / 19
Einfuhrung
Analysator- und Transformator-Struktur
WissensbasisCodeUnparse Back-End
Transformationen
Analysenannotierte
Zwischen-
darstellung
Middle-
End
Zwischen-
sprachen-
generator
Zwischen-
darstellung
Parserabstrakter
Syntax-
baum
semantische
Analyse
annotierter
abstrakter
Syntax-
baum
Front-End
Lexer Token-
strom
Programm-
textPraprozessor
Programm-
text mit
Makros
WissensbasisCodeUnparse Back-End
Transformationen
Analysenannotierte
Zwischen-
darstellung
Middle-
End
Zwischen-
sprachen-
generator
Zwischen-
darstellung
Parserabstrakter
Syntax-
baum
semantische
Analyse
annotierter
abstrakter
Syntax-
baum
Front-End
Lexer Token-
strom
Programm-
textPraprozessor
Programm-
text mit
Makros
T.Mende, R. Koschke (Uni Bremen) Softwareanalyse und -transformation SS09 7 / 19
Einfuhrung
Analysator- und Transformator-Struktur
WissensbasisCodeUnparse Back-End
Transformationen
Analysenannotierte
Zwischen-
darstellung
Middle-
End
Zwischen-
sprachen-
generator
Zwischen-
darstellung
Parserabstrakter
Syntax-
baum
semantische
Analyse
annotierter
abstrakter
Syntax-
baum
Front-End
Lexer Token-
strom
Programm-
textPraprozessor
Programm-
text mit
Makros
WissensbasisCodeUnparse Back-End
Transformationen
Analysenannotierte
Zwischen-
darstellung
Middle-
End
Zwischen-
sprachen-
generator
Zwischen-
darstellung
Parserabstrakter
Syntax-
baum
semantische
Analyse
annotierter
abstrakter
Syntax-
baum
Front-End
Lexer Token-
strom
Programm-
textPraprozessor
Programm-
text mit
Makros
T.Mende, R. Koschke (Uni Bremen) Softwareanalyse und -transformation SS09 7 / 19
Einfuhrung
Am Beispiel: Automatische Refactorings
Def. Refactoring:→ Semantik-erhaltende Transformation mit dem Ziel: Verbesserung derCode-Qualitat (Lesbarkeit, Wartbarkeit, Erweiterbarkeit)
Schritte:→ syntaktische Analyse→ abstrakter Syntaxbaum→ Namensbindung→ Kontrollflussanalyse→ Datenflussanalyse→ Transformation→ Unparsen
Werkzeug:
Java
ANTLR
Weitere?
T.Mende, R. Koschke (Uni Bremen) Softwareanalyse und -transformation SS09 8 / 19
Einfuhrung
Am Beispiel: Automatische Refactorings
Def. Refactoring:→ Semantik-erhaltende Transformation mit dem Ziel: Verbesserung derCode-Qualitat (Lesbarkeit, Wartbarkeit, Erweiterbarkeit)
Schritte:→ syntaktische Analyse→ abstrakter Syntaxbaum→ Namensbindung→ Kontrollflussanalyse→ Datenflussanalyse→ Transformation→ Unparsen
Werkzeug:
Java
ANTLR
Weitere?
T.Mende, R. Koschke (Uni Bremen) Softwareanalyse und -transformation SS09 8 / 19
Einfuhrung
Refactorings
Rename
Encapsulate Field
Pull-Up Field
Extract Method
T.Mende, R. Koschke (Uni Bremen) Softwareanalyse und -transformation SS09 9 / 19
Einfuhrung
Rename
1 c l a s s T { c l a s s T {2 p u b l i c : p u b l i c :3 i n t a1 ; i n t x ;4 vo i d setT ( i n t p ) { vo i d setT ( i n t p ) {5 a1 = p ; x = p ;6 } }7 } }8
9 c l a s s NT : T { c l a s s NT : T {10 p u b l i c : p u b l i c :11 i n t a2 ; i n t y ;12 vo i d setNT ( ) { vo i d setNT ( ) {13 setT ( 0 ) ; setT ( 0 ) ;14 a2 = a1 ; y = x ;15 } }16 } }
T.Mende, R. Koschke (Uni Bremen) Softwareanalyse und -transformation SS09 10 / 19
Einfuhrung
Encapsulate Field
1 c l a s s T { c l a s s T {2 p u b l i c : p u b l i c :3 i n t a1 ; i n t a1 ;4 vo i d s e t a1 ( i n t p ) {5 a1 = p ;6 }7 i n t geta1 ( ) {8 r e t u r n a1 ;9 }
10 } }11
12 c l a s s NT : T { c l a s s NT : T {13 p u b l i c : p u b l i c :14 vo i d foo ( ) { vo i d foo ( ) {15 a1 = a1 + 5 ; s e t a1 ( geta1 ( ) + 5 ) ;16 } }17 } }
T.Mende, R. Koschke (Uni Bremen) Softwareanalyse und -transformation SS09 11 / 19
Einfuhrung
Pull-Up Field
1 c l a s s T { c l a s s T {2 p u b l i c : p u b l i c :3 i n t a1 ;4 }5
6 c l a s s NT1 : T { c l a s s NT1 : T {7 p u b l i c : p u b l i c :8 i n t a1 ;9 } }
10
11 c l a s s NT2 : T { c l a s s NT2 : T {12 p u b l i c : p u b l i c :13 i n t a1 ;14 } }
T.Mende, R. Koschke (Uni Bremen) Softwareanalyse und -transformation SS09 12 / 19
Einfuhrung
Extract Method
1 vo i d pr in tOwing ( ) { vo i d pr in tOwing ( ) {2 i n t i ; i n t sum ;3 i n t sum ; sum = 0 ;4 i n t o ; p r i n t b a nn e r ( ) ;5 c a l c u l a t e s um (sum ) ;6 sum = 0 ; p r i n t d e t a i l s ( sum ) ;7 /∗ p r i n t banner ∗/ }8 p r i n t ( ”∗∗∗∗∗∗∗∗∗” ) ; v o i d p r i n t b a nn e r ( ){9 p r i n t ( ”∗ Owes ∗” ) ; p r i n t ( ”∗∗∗∗∗∗∗∗∗” ) ;
10 p r i n t ( ”∗∗∗∗∗∗∗∗∗” ) ; p r i n t ( ”∗ Owes ∗” ) ;11 /∗ c a l c u l a t e sum ∗/ p r i n t ( ”∗∗∗∗∗∗∗∗∗” ) ;12 i = 0 ; }13 wh i l e ( i < 10) { vo i d c a l c u l a t e s um ( i n t &sum) {14 o = foo ( i ) ; i n t i ;15 sum = sum + o ; i n t o ;16 i = i + 1 ; i = 0 ;17 } wh i l e ( i < 10) {18 /∗ p r i n t d e t a i l s ∗/ o = foo ( i ) ;19 p r i n t ( sum ) ; sum = sum + o ;20 } i = i + 1 ;21 }}
T.Mende, R. Koschke (Uni Bremen) Softwareanalyse und -transformation SS09 13 / 19
Einfuhrung
Extract Method (Forts.)
21 vo i d p r i n t d e t a i l s ( i n t sum) {22 p r i n t ( sum ) ;23 }
T.Mende, R. Koschke (Uni Bremen) Softwareanalyse und -transformation SS09 14 / 19
Einfuhrung
Programmiersprache
Allgemeine Anforderungen:
so einfach wie moglich
so ausdrucksstark wie notig fur die Refactorings
Teilmenge von C++
→ Erleichtert Uberprufung von Transformationen
Konkrete Teilmenge:
Klassen mit Methoden und Attributen
einfachste Anweisungen, z.B. +
einfache weitere Datentypen, z.B. int
einfachste Kontrollstrukturen, z.B. if und while
einfache Ausgabeanweisungen (fur den Test)
Parametermodi: Wert und Referenz
kein Overloading, einfache Namensbindung
T.Mende, R. Koschke (Uni Bremen) Softwareanalyse und -transformation SS09 15 / 19
Einfuhrung
Programmiersprache
Allgemeine Anforderungen:
so einfach wie moglich
so ausdrucksstark wie notig fur die Refactorings
Teilmenge von C++
→ Erleichtert Uberprufung von Transformationen
Konkrete Teilmenge:
Klassen mit Methoden und Attributen
einfachste Anweisungen, z.B. +
einfache weitere Datentypen, z.B. int
einfachste Kontrollstrukturen, z.B. if und while
einfache Ausgabeanweisungen (fur den Test)
Parametermodi: Wert und Referenz
kein Overloading, einfache Namensbindung
T.Mende, R. Koschke (Uni Bremen) Softwareanalyse und -transformation SS09 15 / 19
Einfuhrung
Ausblick
2 Analyse ISyntaktische Analyse und Uberfuhrung in ASTNamensbindungUnparse
3 Refactoring IRenameEncapsulate FieldPull-Up Field
4 Analyse IIKontrollflussanalyseDatenflussanalyse
5 Refactoring IIRefactoring Extract Method
T.Mende, R. Koschke (Uni Bremen) Softwareanalyse und -transformation SS09 16 / 19
Einfuhrung
Literatur
Refactoring
Fowler (1999): Standardwerk zu Refactorings
Compiler
Muchnick (1997): sehr gutes Lehrbuch zu Compilerbau, Fokus aufOptimierungen und AnalysenPlodereder (2008): Folien, Skript und Ubungen zur VorlesungProgrammanalysen und Compilerbau an der Universitat StuttgartParr (2009): Website mit Doku uber ANTLR
T.Mende, R. Koschke (Uni Bremen) Softwareanalyse und -transformation SS09 17 / 19
Einfuhrung
Und so geht es weiter
Zum nachsten Termin:
ANTLR (Version 3.1.3) installieren
Tutorial unter http://www.ociweb.com/jnb/jnbJun2008.htmlnachvollziehen1
Beim nachsten Termin:
Syntaktische Analyse und Generierung des ASTs
Fragen?
1Wenn nicht verfugbar: Kopie unterhttp://www.informatik.uni-bremen.de/~tmende/antlr.htmlT.Mende, R. Koschke (Uni Bremen) Softwareanalyse und -transformation SS09 18 / 19
Einfuhrung
Und so geht es weiter
Zum nachsten Termin:
ANTLR (Version 3.1.3) installieren
Tutorial unter http://www.ociweb.com/jnb/jnbJun2008.htmlnachvollziehen1
Beim nachsten Termin:
Syntaktische Analyse und Generierung des ASTs
Fragen?
1Wenn nicht verfugbar: Kopie unterhttp://www.informatik.uni-bremen.de/~tmende/antlr.htmlT.Mende, R. Koschke (Uni Bremen) Softwareanalyse und -transformation SS09 18 / 19
Einfuhrung
Und so geht es weiter
Zum nachsten Termin:
ANTLR (Version 3.1.3) installieren
Tutorial unter http://www.ociweb.com/jnb/jnbJun2008.htmlnachvollziehen1
Beim nachsten Termin:
Syntaktische Analyse und Generierung des ASTs
Fragen?
1Wenn nicht verfugbar: Kopie unterhttp://www.informatik.uni-bremen.de/~tmende/antlr.htmlT.Mende, R. Koschke (Uni Bremen) Softwareanalyse und -transformation SS09 18 / 19
Einfuhrung
[Fowler 1999] Fowler, Martin: Refactoring: Improving the Design ofExisting Code. Addison-Wesley Longman, 1999
[Muchnick 1997] Muchnick, Steven S.: Advanced Compiler Designand Implementation. Morgan Kaufmann, 1997
[Parr 2009] Parr, Terence: ANTLR-Website. 2009. – URLwww.antlr.org
[Plodereder 2008] Plodereder, Erhard: Vorlesung Programmanalysenund Compilerbau. Vorlesungsskriptum. Oktober 2008. – URLhttp://www.iste.uni-stuttgart.de/ps/Lehre/WS0809/V_Programmanalysen/skript-CB+ProgAn-08.pdf
T.Mende, R. Koschke (Uni Bremen) Softwareanalyse und -transformation SS09 19 / 19