Vorlesung Software-Reengineering

Größe: px
Ab Seite anzeigen:

Download "Vorlesung Software-Reengineering"

Transkript

1 Vorlesung Software-Reengineering Prof. Dr. Rainer Koschke Arbeitsgruppe Softwaretechnik Fachbereich Mathematik und Informatik Universität Bremen Wintersemester 2009/10

2 Überblick I 1 Klonerkennung

3 Techniken zur Klonerkennung I 1 Klonerkennung Hintergrund Folgen Übersicht zu den Ansätzen zur Klonerkennung Textuelle Verfahren Lexikalische Verfahren Metrikbasierte Verfahren Syntaxbasierte Verfahren PDG-basierte Verfahren Lexikalische Verfahren Syntaxbasierte Verfahren Metrikbasierte Verfahren Vergleich von Techniken zur Klonerkennung Wiederholungsfragen Rainer Koschke (Univ. Bremen) Vorlesung Software-Reengineering WS 2009/ / 63

4 No two parts are alike in software... Software entities are more complex for their size than perhaps any other human construct because no two parts are alike (at least above the statement level). If they are, we make the two similar parts into a subroutine open or closed. In this respect, software systems differ profoundly from computers, buildings, or automobiles, where repeated elements abound. by Frederick P. Brooks, Jr: No Silver Bullet: Essence and Accidents of Software Engineering Rainer Koschke (Univ. Bremen) Vorlesung Software-Reengineering WS 2009/ / 63

5 Klonerkennung Lernziele Varianten der Klonerkennung (Erkennung duplizierten Codes) Bezug zu Abstraktionsebenen von Programmdarstellungen Kontext Beseitigung von Redundanz auf Codierungsebene erleichtert nachfolgende Reengineering-Aktivitäten Rainer Koschke (Univ. Bremen) Vorlesung Software-Reengineering WS 2009/ / 63

6 Softwareredundanz Duplikation von Quelltext durch Copy&Paste (Code Cloning) ist häufig: Nummer 1 auf Beck und Fowlers Stink Parade of Bad Smells Forschung: % System Zeilen Referenz 19 X Windows 30 Baker (1995) 28 3 subs. of process-control sys.? Baxter u. a. (1998) 59 payroll system 10 Ducasse u. a. (1999) Klone länger als 25 Zeilen sind selten (Baxter u. a. 1998) Rainer Koschke (Univ. Bremen) Vorlesung Software-Reengineering WS 2009/ / 63

7 Klontypen: Typ 1 PRIVATE UINT16 t y p l e n g t h ( a t n t y p e node ) { i f ( node >tag == REF ) node = node >t r e e. r e f t y p e ; s w i t c h ( node >tag ) { c a s e INTEGER : r e t u r n 4 ; c a s e REAL : r e t u r n 8 ; c a s e BOOLEAN : r e t u r n 1 ; c a s e STRING : r e t u r n 4 ; c a s e ARRAY : r e t u r n t y p l e n g t h ( node >t r e e. a r r a y. t y p e ) ( node >t r e e. a r r a y. upb node >t r e e. a r r a y. lwb +1); c a s e REF : r e t u r n 4 ; d e f a u l t : l o g e r r o r (ERR FATAL, SYSTEM ERROR, E ILLEGAL TAG, t y p e, 0 ) ; } r e t u r n 0 ; } 1 PRIVATE UINT16 t y p l e n g t h ( a t n t y p e node ) 2 { i f ( node >tag == REF ) 3 node = node >t r e e. r e f t y p e ; 4 5 s w i t c h ( node >tag ) 6 { 7 c a s e INTEGER : r e t u r n 4 ; 8 c a s e REAL : r e t u r n 8 ; 9 c a s e BOOLEAN : r e t u r n 1 ; 10 c a s e STRING : r e t u r n 4 ; 11 c a s e ARRAY : 12 r e t u r n t y p l e n g t h ( node >t r e e. a r r a y. t y p e ) 13 ( node >t r e e. a r r a y. upb 14 node >t r e e. a r r a y. lwb +1); 15 c a s e REF : r e t u r n 4 ; 16 d e f a u l t : 17 l o g e r r o r (ERR FATAL, SYSTEM ERROR, 18 E ILLEGAL TAG, t y p e, 0 ) ; 19 } 20 r e t u r n 0 ; 21 } Rainer Koschke (Univ. Bremen) Vorlesung Software-Reengineering WS 2009/ / 63

8 Klontypen: Typ 2 } r e t u r n TRUE ; / r e a d operand #0 ( a l w a y s p r e s e n t ) / thisop >op [ 0 ]. type = v a a r g ( ap, a 3 a r g u m e n t t y p e ) ; i f ( ( thisop >op [ 0 ]. t y p e == ocfloat ) ( thisop >op [ 0 ]. type & 16)) // i n d e x e d { thisop >op [ 0 ]. v a l. f [0]= v a a r g ( ap, INT32 ) ; 11 thisop >op [ 2 ]. v a l. f [0]= v a a r g ( ap, INT32 ) ; } e l s e thisop >op [ 0 ]. v a l. f [1]= v a a r g ( ap, INT32 ) ; thisop >op [ 0 ]. v a l. l = v a a r g ( ap, INT32 ) ; / read operand #1 ( sometimes p r e s e n t ) / i f ( ( s t a t t y p e!= A3 GOTO ) && 1 / r e a d operand #2 ( b i n a r y op o n l y ) / 2 i f ( ( s t a t t y p e == A3 BINARY OP ) 3 ( s t a t t y p e == A3 COND ) ) 4 { 5 thisop >op [ 2 ]. type 6 = v a a r g ( ap, a 3 a r g u m e n t t y p e ) ; 7 8 i f ( ( thisop >op [ 2 ]. t y p e == ocfloat ) 9 ( thisop >op [ 2 ]. t y p e & 1 6 ) ) 10 { 12 thisop >op [ 2 ]. v a l. f [1]= v a a r g ( ap, INT32 ) ; 13 } 14 e l s e 15 thisop >op [ 2 ]. v a l. l = v a a r g ( ap, INT32 ) ; 16 } 17 e l s e 18 thisop >op [ 2 ]. t y p e = onone ; Rainer Koschke (Univ. Bremen) Vorlesung Software-Reengineering WS 2009/ / 63

9 Klontypen: Typ 3 return FALSE ; } i f (! parse ( ) ) { } p r i n t e r r o r ( s t d o u t, 0 ) ; return FALSE ; fclose( fp ) ; i f ( debug flag ) { p r i n t f ( result of parser ) ; i f (! p r i n t t r e e ( FALSE ) ) { p r i n t e r r o r ( s t d o u t, 0 ) ; return FALSE ; } } i f ( v e r b o s e f l a g d e b u g f l a g ) p r i n t f ( s e m a n t i c a n a l y s i s \n ) ; 1 i f ( v e r b o s e f l a g d e b u g f l a g ) 2 p r i n t f ( t y p e c h e c k i n g \n ) ; 3 4 i f (! type check ( ) ) 5 { 6 p r i n t e r r o r ( s t d o u t, 0 ) ; 7 return FALSE ; 8 } 9 10 i f ( debug flag ) 11 { 12 p r i n t f ( result of type check ) ; 13 i f (! p r i n t t r e e ( TRUE ) ) 14 { 15 p r i n t e r r o r ( s t d o u t, 0 ) ; 16 return FALSE ; 17 } 18 } i f ( gencode flag ) 21 { 22 i f ( ( fp = fopen ( outfilename, wt ))==NULL) 23 { Rainer Koschke (Univ. Bremen) Vorlesung Software-Reengineering WS 2009/ / 63

10 Arten von Klonen Die Kopie eines Programmfragments wird Klon genannt. Typ 1 Typ 2 Typ 3 Typ 4 Exakte Kopie Keinerlei Veränderung an der Kopie (bis auf White Space und Kommentaren). Z.B. Inlining von Hand. Kopie mit Umbenennungen (parametrisierte Übereinstimmung) Bezeichner werden in der Kopie umbenannt. Z.B. Wiederverwendung einer Funktion, generische Funktion von Hand Kopie mit weiteren Modifikationen Code der Kopie wird abgeändert, nicht nur Bezeichner. Z.B. Erweiterung einer Funktion. Semantische Klone Verschiedene Implementierungen desselben Konzepts.

11 Warum gibt es Klone? Entwicklungsstrategie Klone als Vorlage: Templating Verzögerte Anpassung... Wartung Bewährter Quelltext Unabhängigkeit... Einschränkungen Architektur Zeit Mangelnde Kenntnisse Programmiersprache... Rainer Koschke (Univ. Bremen) Vorlesung Software-Reengineering WS 2009/ / 63

12 Was sind die Auswirkungen von Klonen? Erhöhter Ressourcenbedarf Erhöhter Aufwand zum Verstehen Erhöhter Aufwand zum Ändern Duplizieren von Fehlern Unvollständige Anpassung Gefahr von inkonsistenten Änderungen Erhöhter Testaufwand... Rainer Koschke (Univ. Bremen) Vorlesung Software-Reengineering WS 2009/ / 63

13 Studien zu Auswirkungen von Klonen Wissenschaftliche Studien lassen negative Auswirkungen von Klonen erkennen: höchste Fehlerdichte in Modulen mit besonders langen Klonen (Monden u. a. 2002): Fehler treten vermehrt auf, wenn Klone vorkommen (Chou u. a. 2001) Fehler wegen Klonen, deren Bezeichner inkonsistent umbenannt wurden (Li u. a. 2006) Fehler durch inkonsistent geänderte Klone (Jürgens u. a. 2009) Rainer Koschke (Univ. Bremen) Vorlesung Software-Reengineering WS 2009/ / 63

14 Nächster Abschnitt Wie können Klone gefunden werden? Rainer Koschke (Univ. Bremen) Vorlesung Software-Reengineering WS 2009/ / 63

15 Wie können Klone gefunden werden? Granularität Klassen, Dateien Funktionen Anweisungen Vergleich von... Text Bezeichnern Token Syntaxbäume Kontroll- und Datenabhängigkeiten Verwendete Techniken: textual diff dotplot data mining suffix tree tree matching graph matching latent semantic indexing metric vector comparison hashing Rainer Koschke (Univ. Bremen) Vorlesung Software-Reengineering WS 2009/ / 63

16 Probleme bei der Erkennung Jede Zeile/Funktion/Datei muss mit jeder anderen Zeile/Funktion/Datei verglichen werden: Wie kann quadratischer Aufwand vermieden werden? Wie kann von Bezeichnern geeignet abstrahiert werden? Soll die Umbenennung konsistent sein? Typ-3-Klone: Geklonte Codefragmente von Typ 1 und Typ 2 können zu größeren Klonen zusammengefasst werden. Codefragmente müssen nicht direkt zusammenhängend sein. Code muss nicht identisch, nur ähnlich sein: Ähnlichkeitsmaß? Rainer Koschke (Univ. Bremen) Vorlesung Software-Reengineering WS 2009/ / 63

17 Textuelle Verfahren Vergleich von... Bezeichner und Kommentare (Information-Retrieval-Techniken) Latent Semantic Indexing (Marcus und Maletic 2001) text Zeichenkettenvergleich (Johnson 1993, 1994) mittels Hashwerten zeilenweiser Vergleich über Dot-Plots (Ducasse u. a. 1999; Rieger 2005) a a b x y a a b z Rainer Koschke (Univ. Bremen) Vorlesung Software-Reengineering WS 2009/ / 63

18 Dot-Plot: file1.c file2.c file1.c file2.c

19 Wie können Klone gefunden werden? Vergleich von... Tokens Type-1/-2-Klone: Suffixbaum für parameterisierte Zeichenketten pro Zeile (Baker 1995) x y a a b $ a b $ a x y a a b $ b a a b x y a a b $ $ b x y a a b $ $ x y a a b $ y a a b $ $ Type-3: Zusammenfassung von Typ-1/2-Klonen mit Lücken (Baker Rainer Koschke 1995). (Univ. Bremen) Vorlesung Software-Reengineering WS 2009/ / 63

20 Wie können Klone gefunden werden? Vergleich von... Metriken (Mayrand u. a. 1996; Kontogiannis 1997) Anweisungen durch Data-Mining-Techniken (Wahler u. a. 2004; Li u. a. 2004) Rainer Koschke (Univ. Bremen) Vorlesung Software-Reengineering WS 2009/ / 63

21 Wie können Klone gefunden werden? Vergleich von... Syntaxbäumen Hashing mit Baum-Matching (Baxter u. a. 1998) Baum-Matching mit dynamischem Programmieren (für Dateivergleich) (Yang 1991) Suffixbaum für serialisierten Syntaxbaum (Koschke u. a. 2006) seq if if if + = = id = = id = = id id id id id call id id id literal id id id id id Rainer Koschke (Univ. Bremen) Vorlesung Software-Reengineering WS 2009/ / 63

22 Wie können Klone gefunden werden? Vergleich von Program-Dependency-Graphs (PDG) (Komondoor und Horwitz 2001; Krinke 2001) r e a d ( n ) ; r e a d (m) ; i = 1 ; s = 0 ; p r o d u c t = 1 ; p = 1 ; sum = 0 ; f o r ( j = 1 ; j <= m; j = j + 1) { w h i l e ( i <= n ) { s = s + i ; p r o d u c t = p r o d u c t i ; p = p i ; sum = sum + i ; } i = i + 1 ; w r i t e ( s ) ; } w r i t e ( p ) ; w r i t e ( sum ) ; w r i t e ( p r o d u c t ) ; entry read(n) i := 1 product := 2 sum := 1 i := i + 1 i <= n product := product ** 2 write(sum) sum := sum * 2 write(product) control influence set use entry read(m) j := 1 p := 2 s := 1 j := j + 1 j <= m p := p ** 2 write(s) s := s * 2 write(p) Rainer Koschke (Univ. Bremen) Vorlesung Software-Reengineering WS 2009/ / 63

23 Verfahren nach Baker (1995) Verfahren vergleicht Token-Sequenzen Vermeidung des quadratischen Aufwands: quasi-parallele Suche in einer Programmrepräsentation, die jedes mögliche Anfangsstück des Programms enthält. Abstraktion von Bezeichnern: Bezeichner werden auf relative Positionen abgebildet. Typ-3-Klone: Separater Schritt am Ende Rainer Koschke (Univ. Bremen) Vorlesung Software-Reengineering WS 2009/ / 63

24 Parameter-String Für jede Codezeile wird eine Zeichenkette aus Parametersymbolen und Nichtparametersymbolen generiert (so genannter Parameter-String oder P-String): Struktur der Zeile (genauer: Token-Sequenz) wird auf eindeutiges Nichtparametersymbol abgebildet (Funktor) Bezeichner werden in Argumentliste erfasst Ergebnis ist: (Funktor Argumentliste) Beispiel: x = x + y (P = P + P; x,x,y) α x x y Die Konkatenation der P-Strings aller Codezeilen repräsentiert das Programm. j = l e n g t h ( l ) ; i f ( j < 3) {x = x + y ; } α j length l β j 3 x x y Rainer Koschke (Univ. Bremen) Vorlesung Software-Reengineering WS 2009/ / 63

25 Prev-String Kodierung prev(s) jedes P-Strings s: Erstes Vorkommen eines Bezeichners erhält Nummer 0. Jedes weitere Vorkommen erhält den relativen Abstand zum vorherigen Vorkommen (Funktoren mitgezählt). Beispiel: α j length l β j 3 x x y α β Abstraktion der Bezeichner, jedoch nicht ihrer Reihenfolge. S ist ein P-Match von T genau dann, wenn prev(s) = prev(t ) Beispiel: x = x + y und a = a + b sind ein P-Match wegen γ010 = γ010 Rainer Koschke (Univ. Bremen) Vorlesung Software-Reengineering WS 2009/ / 63

26 P-Suffix-Baum Sei S i = s i s i+1... s n $ das i te Suffix von S ($ ist das Endezeichen). Der P-Suffix-Baum von S enthält alle prev(s i ) zu den Suffixen des P-Strings S. Beispiel: S = αyβyαxαx prev(s 1 ) = α0β2α0α2$ prev(s 2 ) = 0β2α0α2$ prev(s 3 ) = β0α0α2$ $ prev(s 4 ) = 0α0α2$ α2$ prev(s 5 ) = α0α2$ $ prev(s 6 ) = 0α2$ prev(s 7 ) = α0$ prev(s 8 ) = 0$ prev(s 9 ) = $ α0 β0α0α2$ β2α0α2$ Rainer Koschke (Univ. Bremen) Vorlesung Software-Reengineering WS 2009/ / 63

27 P-Suffix-Baum Klone: Verzweigungen im Suffix-Baum Länge: Anzahl der Funktoren Benutzer kann Mindestlänge festlegen Ort: Anzahl Funktoren zum Blatt gibt die Position relativ zum Programmende wieder Rainer Koschke (Univ. Bremen) Vorlesung Software-Reengineering WS 2009/ / 63

28 Typ-3-Erkennung Gefundene P-Matches werden, wenn möglich, zusammengefasst: d 1 A B A B d 2 Modi: nur wenn d 1 = d 2 wenn max(d 1, d 2 ) Θ Rainer Koschke (Univ. Bremen) Vorlesung Software-Reengineering WS 2009/ / 63

29 Bewertung des Ansatzes von Baker Bakers Klonerkennung ist lexem-basiert und damit sehr schnell: lineare Zeit- und Speicherkomplexität Plattform: SGI IRIX 4.1, 40 Mhz R3000, 256 MB Hauptspeicher System: 1,1 Mio LOC, mindestens zusammenhängende 30 LOC/Klon nur 7 Minuten Analysezeit Der Ansatz ist invariant gegen Einfügung von Leerzeichen, Leerzeilen und Kommentaren. Der Ansatz ist weitgehend programmiersprachen-unabhängig (nur Regeln für Bezeichner/Tokens notwendig). Erweiterung von Kamiya u. a. (2002): Normalisierung des Tokenstroms (z.b. Entfernen von Qualifier wie static) Rainer Koschke (Univ. Bremen) Vorlesung Software-Reengineering WS 2009/ / 63

30 Bewertung des Ansatzes von Baker Allerdings entgehen dem Ansatz: äquivalente Ausdrücke mit kommutativen Operatoren: x = x + y x = y + x gleiche Anweisungsfolgen, die verschieden umbrochen wurden: if (a > 1) {x = 1;} if (a > 1) {x = 1;} gleiche Teilausdrücke: if (sp > 0) if (sp > 0 && s[sp]!= a) Rainer Koschke (Univ. Bremen) Vorlesung Software-Reengineering WS 2009/ / 63

31 AST-Matching Ansatz basierend auf abstrakten Syntaxbäumen (ASTs): vergleiche jeden Teilbaum mit jedem anderen Teilbaum auf Gleichheit if if cond else then cond else then = call := = call := left right lhs rhs left right lhs rhs a b x y z q t s Rainer Koschke (Univ. Bremen) Vorlesung Software-Reengineering WS 2009/ / 63

32 Verfahren nach Baxter u. a. (1998) Verfahren basiert auf ASTs Vermeidung des quadratischen Aufwands: Partitionierung der zu vergleichenden Bäumen. Abstraktion von Bezeichnern: Partitionierung und AST-Vergleich ignoriert Bezeichner. Typ-3-Klone: Vergleich auf Ähnlichkeit statt Gleichheit. Separater Schritt am Ende. Rainer Koschke (Univ. Bremen) Vorlesung Software-Reengineering WS 2009/ / 63

33 Skalierungsproblem und Erkennung der Klontypen Bäume werden durch Hash-Funktion partitioniert. Nur Bäume innerhalb einer gemeinsamen Partition werden verglichen. Hash-Funktion gleich wie bei Erkennung von gemeinsamen Teilausdrücken durch optimierende Compiler: h : nodetype arg 1 arg 2... arg n integer Typ-1-Klonerkennung: h liefert genaue Partitionierung Typ-2/3-Klonerkennung: h ignoriert Bezeichner Rainer Koschke (Univ. Bremen) Vorlesung Software-Reengineering WS 2009/ / 63

34 Skalierungsproblem und Erkennung der Klontypen Bäume werden auf Ähnlichkeit verglichen (nicht auf Gleichheit): Similarity(T 1, T 2 ) = 2 Same(T 1, T 2 ) 2 Same(T 1, T 2 ) + Difference(T 1, T 2 ) Similarity muss über benutzerdefiniertem Schwellwert Θ S liegen: Similarity(T 1, T 2 ) Θ S Nur Bäume T mit mass(t ) Θ m werden betrachtet (mass = Anzahl von Knoten, Θ m = benutzerdefinierter Schwellwert). Bei kommutativen Operatoren werden wechselseitig beide Teilbäume verglichen. Rainer Koschke (Univ. Bremen) Vorlesung Software-Reengineering WS 2009/ / 63

35 Probleme (und Lösungen) des AST-Matchings Skalierung Vermeidung unnötiger Vergleiche Nicht nur Typ-1-Klone sollen erkannt werden. Abstraktion von Bezeichnern. Die Teilausdrücke müssen nicht gleich sein, sondern nur ähnlich genug. Klone sind Teil anderer Klone (geschachtelte Konstrukte). Klone, die Teil eines anderen Klons sind, werden ignoriert, d.h. zusammengesetzte Klone subsumieren ihre Teile. Rainer Koschke (Univ. Bremen) Vorlesung Software-Reengineering WS 2009/ / 63

36 Basis-AST-Matching (Schritt 1) C l o n e s := ; f o r each s u b t r e e t l o o p i f mass ( t ) Θ m then hash t to bucket ; end i f ; end l o o p ; f o r each s u b t r e e s and t i n the same bucket l o o p i f S i m i l a r i t y ( s, t ) Θ S then f o r each s u b t r e e s o f s and f o r each s u b t r e e t o f t and Is Member ( s, t, C l o n e s ) l o o p Remove Clone Pair ( s, t, C l o n e s ) ; end l o o p ; A d d C l o n e P a i r ( s, t, C l o n e s ) ; end i f ; end l o o p ; Rainer Koschke (Univ. Bremen) Vorlesung Software-Reengineering WS 2009/ / 63

37 AST-Matching von Sequenzen (Schritt 2) Sequenzen von Bäumen (z.b. Anweisungsfolgen): v o i d f ( v o i d ) { x = 0 ; a = a + 1 ; b = b + 2 ; c = c + 3 ; w = g ( ) ; } v o i d g ( v o i d ) { y = 2 x ; a = a + 1 ; b = b + 2 ; c = c + 3 ; i = h ( ) 3 ; } Basis-Matching-Algorithmus identifiziert nur die gleichen Zuweisungen, ignoriert aber Gleichheit der beiden Anweisungsteilfolgen als Ganzes. Nächster Schritt identifiziert maximal lange gemeinsame Teilfolgen zweier Sequenzen, mit einer benutzerdefinierten Mindestlänge. Rainer Koschke (Univ. Bremen) Vorlesung Software-Reengineering WS 2009/ / 63

38 Erkennung von Klonsequenzen (Schritt 2) f o r k i n Min Length.. Max Length l o o p p l a c e a l l s u b s e q u e n c e s o f l e n g t h k i n t o b u c k e t s ; f o r each s u b s e q u e n c e i and j i n same bucket l o o p i f Compare Sequence ( i, j, k ) Θ S then Remove Sequence Subclones Of ( i, j, k, C l o n e s ) ; A d d S e q u e n c e C l o n e P a i r ( i, j, k, C l o n e s ) ; end i f ; end l o o p ; end l o o p ; Rainer Koschke (Univ. Bremen) Vorlesung Software-Reengineering WS 2009/ / 63

39 Erkennung zusammengesetzter Klone (Schritt 3) Gemeinsame Anweisungsfolgen wurden möglicherweise erst im zweiten Schritt nach dem Basis-AST-Matching erkannt. Durch neu erkannte Klone könnten Konstrukte, die diese Klone umfassen, nunmehr doch ähnlich sein. s = 0 ; x = y ; w h i l e ( x > 0) { s = s + x ; x = x 1 ;... } p = 0 ; a = b ; w h i l e ( a > 0) { p = p x ; a = a 1 ;... } D.h. Vaterknoten der als Klone erkannten Teilbäume müssen noch einmal evaluiert werden. Rainer Koschke (Univ. Bremen) Vorlesung Software-Reengineering WS 2009/ / 63

40 Erkennung zusammengesetzter Klone (Schritt 3) C l o n e s T o G e n e r a l i z e := C l o n e s ; w h i l e C l o n e s T o G e n e r a l i z e l o o p Remove Clone Pair ( s, t, C l o n e s T o G e n e r a l i z e ) ; i f Compare Clones ( Parent ( s ), Parent ( t ) ) Θ S then Remove Clone Pair ( s, t, C l o n e s ) ; A d d C l o n e P a i r ( Parent ( s ), Parent ( t ), C l o n e s ) ; A d d C l o n e P a i r ( Parent ( s ), Parent ( t ), C l o n e s T o G e n e r a l i z e ) ; end i f ; end l o o p ; Rainer Koschke (Univ. Bremen) Vorlesung Software-Reengineering WS 2009/ / 63

41 Bewertung des Ansatzes von Baxter AST-Matching ist syntax-orientiert und deshalb aufwändiger als lexem-basierter Ansatz, da Parsing notwendig ist beim lexem-basierten Ansatz müssen nur Schlüsselworte und Trennzeichen erkannt werden was aber bei manchen Programmiersprachen eben doch Parsing voraussetzt, z.b. PL/1: IF IF = ELSE THEN ELSE := THEN ELSE IF := ELSE dafür aber genauer: kommutative Operatoren werden berücksichtigt syntaktische Einheiten werden verglichen, statt einzelner Code-Zeilen übereinstimmende Teilausdrücke werden erkannt Rainer Koschke (Univ. Bremen) Vorlesung Software-Reengineering WS 2009/ / 63

42 Verfahren nach Mayrand u. a. (1996) Verfahren basiert auf Metriken des Codes. Vermeidung des quadratischen Aufwands: im Prinzip immer noch quadratisch, Vergleich ist aber relativ billig. Abstraktion von Bezeichnern: Bezeichner werden von Metriken ignoriert. Typ-3-Klone: durch Toleranz der Metriken bzw. ihrer Zusammenfassung. Rainer Koschke (Univ. Bremen) Vorlesung Software-Reengineering WS 2009/ / 63

43 Vergleich auf Basis von Kennzahlen Hoffnung: Code 1 = Code 2 Kennzahlen(Code 1 ) = Kennzahlen(Code 2 ) Granularität üblicherweise Funktionsebene, da hierfür viele Metriken existieren Aspekte nach Mayrand u. a. (1996): Namen Layout Anweisungen Kontrollfluss Rainer Koschke (Univ. Bremen) Vorlesung Software-Reengineering WS 2009/ / 63

44 Vergleichsmetriken (Mayrand u. a. 1996) Name relative Anzahl gemeinsamer Zeichen Layout Anzahl Zeichen von Kommentaren (Deklarationsteil, Implementierungsteil) Anzahl mehrzeiliger Kommentare Anzahl nicht-leerer Zeilen (inklusive Kommentare) durchschnittliche Länge der Bezeichner Rainer Koschke (Univ. Bremen) Vorlesung Software-Reengineering WS 2009/ / 63

45 Vergleichsmetriken (Mayrand u. a. 1996) Anweisungen gesamte Anzahl von Funktionsaufrufen Anzahl verschiedener Aufrufe durchschnittliche Komplexität der Entscheidungen in der Funktion Anzahl der Deklarationen Anzahl ausführbarer Anweisungen Kontrollfluss Anzahl der Kanten im Kontrollflussgraphen (KFG) Anzahl der Knoten im KFG Anzahl der Bedingungen im KFG Anzahl der Pfade im KFG Komplexitätsmetrik über dem KFG Rainer Koschke (Univ. Bremen) Vorlesung Software-Reengineering WS 2009/ / 63

46 Zusammenfassung der Metriken Zwei Funktionen f 1 und f 2 sind in Bezug auf einen Aspekt: gleich: gleiche Metrikwerte ähnlich: alle Metrikwerte liegen in einer gewissen Bandbreite (spezifisch für jede individuelle Kennzahl definiert), sind aber nicht gleich verschieden: mindestens ein Metrikwert liegt außerhalb einer Bandbreite Rainer Koschke (Univ. Bremen) Vorlesung Software-Reengineering WS 2009/ / 63

47 Klassifikation Exakte Kopie: Funktionen sind in jedem Aspekt gleich (Typ-1-Klon) Ähnliches Layout: Ähnliches Layout und ähnliche Namen, gleiche Anweisungen und Kontrollfluss ( Typ-2-Klon) Ähnliche Ausdrücke: Name und Layout sind verschieden, Anweisungen und Kontrollfluss sind gleich ( Typ-2-Klon) Verschieden: Alle Aspekte sind verschieden. Rainer Koschke (Univ. Bremen) Vorlesung Software-Reengineering WS 2009/ / 63

48 Bewertung des Ansatzes von Mayrand u. a. (1996) Aspekte sind nicht unabhängig. Definition der Bandbreite ist notwendig. (Klassifikation ist unvollständig.) Präzision: Code 1 = Code 2 Kennzahlen(Code 1 ) = Kennzahlen(Code 2 ) Code 1 Code 2 Kennzahlen(Code 1 ) Kennzahlen(Code 2 ) Kennzahlen(Code 1 ) = Kennzahlen(Code 2 ) Code 1 = Code 2? Kennzahlen(Code 1 ) Kennzahlen(Code 2 ) Code 1 Code 2??? Rainer Koschke (Univ. Bremen) Vorlesung Software-Reengineering WS 2009/ / 63

49 Vergleich von Klonerkennungstechniken (Bellon 2003; Bellon u. a. 2007) Teilnehmer Ansatz Matthias Rieger Brenda S. Baker Toshihiro Kamiya Ira D. Baxter Ettore Merlo Jens Krinke Pattern Matching auf Dotplots (textuell) Suffix-Tree, tokenbasiert (zeilenweise) Suffix-Tree, tokenbasiert (Einzeltoken) + Eingabetransformation Subtree-Matching im AST Funktions-Metriken + Token-Vergleich Program Dependency Graph Rainer Koschke (Univ. Bremen) Vorlesung Software-Reengineering WS 2009/ / 63

50 Zusammenfassung Rieger Baker Kamiya Baxter Krinke Merlo Ansatz Text Token Token AST PDG Metrik Erkennt Typ 1 3 1, , Klassifiziert 1, 2 1, Geschwind.? Speicher? Recall Precision Versteckte 31 % 42 % 46 % 28 % 4 % 24 % Rainer Koschke (Univ. Bremen) Vorlesung Software-Reengineering WS 2009/ / 63

51 Weiterführende Literatur McCreight (1976): Konstruktion von Suffix-Bäumen für Zeichenketten in linearer Zeit und mit linearem Speicheraufwand (relativ zur Länge der Zeichenkette) Ukkonen (1995): wie McCreight, jedoch wird Eingabe von links nach rechts verarbeitet (on-line). Baker (1997) wie McCreight, jedoch für parametrisierte Zeichenketten Kodierung kann sich bei Entfernung des ersten Elements ändern Distinct Right Context Property ist verletzt und Erklärungen, Beispiele, Referenzen und Algorithmen Koschke u. a. (2006) verwenden Suffixbäume für AST-basierte Erkennung Rainer Koschke (Univ. Bremen) Vorlesung Software-Reengineering WS 2009/ / 63

52 McCreight (1976) stellt einen Algorithmus zur Konstruktion von Suffix-Bäumen für Zeichenketten vor (als Verbesserun von Weimers Algorithmus), der lineare Zeit und linearen Speicheraufwand (relativ zur Länge der Zeichenkette) benötig Ukkonen (1995) beschreibt einen Algorithmus zur Konstruktion von Suffix-Bäumen für Zeichenketten, der die gleiche Zeit- und Speicherkomplexität wie der von McCreight aufweist, dafür aber algorithmisch einfacher ist und die Eingabe von links nach rechts verarbeitet (deshalb als on-line bezeichnet wird). Baker (1997) erweitert den Algorithmus von McCreight für parametrisierte Zeichenketten (deren Kodierung sich bei Entfernung des ersten Elements nämlich ändern kann, was eine Verletzung der Distinct Right Context Property darstel die für das korrekte Funktionieren von McCreights Algorithmus Voraussetzung ist). und geben Erklärungen, Beispiele, Referenzen und Algorithmen an.

53 Wiederholungs- und Vertiefungsfragen I Was versteht man unter Klonen? Welche Typen gibt es? Mit Beispiel. Wie entstehen Klone? Warum sind Klone problematisch? Welche Klassen von Ansätzen zur Erkennung von Klonen gibt es und wie sind diese charakterisiert? Welche Probleme müssen bei der Erkennung bewältigt werden? Wie funktioniert der Ansatz von Baker? Wie ist der Ansatz von Baker zu bewerten? Wie funktioniert der Ansatz von Baxter? Wie ist der Ansatz von Baxter zu bewerten? Wie funktioniert der Ansatz von Mayrand? Wie ist der Ansatz von Mayrand zu bewerten? Welche Grundannahme liegt dem Ansatz von Mayrand zu Grunde? Diskutiere die Annahme. Rainer Koschke (Univ. Bremen) Vorlesung Software-Reengineering WS 2009/ / 63

54 Baker 1997 Baker, Brenda: Parameterized duplication in strings: Algorithms and an application to software maintenance. 26 (1997), Oktober, Nr. 5, S Baker 1995 Baker, Brenda S.: On Finding Duplication and Near-Duplication in Large Software Systems. In: Wills, L. (Hrsg.) ; Newcomb, P. (Hrsg.) ; Chikofsky, E. (Hrsg.): Working Conference on Reverse Engineering. Los Alamitos, California : IEEE Computer Society Press, Juli 1995, S URL Baxter u. a Baxter, Ira D. ; Yahin, Andrew ; Moura, Leonardo ; Sant Anna, Marcelo ; Bier, Lorraine: Clone Detection Using Abstract Syntax Trees. In: Koshgoftaar, T. M. (Hrsg.) ; Bennett, K. (Hrsg.): International Conference on Software Maintenance, IEEE Computer Society Press, 1998, S ISBN , , Rainer Koschke (Univ. Bremen) Vorlesung Software-Reengineering WS 2009/ / 63

55 Bellon 2003 Bellon, Stefan: Vergleich von Klonerkennungstechniken. Fakultät Informatik, Universität Stuttgart, Deutschland, Diplomarbeit, 2003 Bellon u. a Bellon, Stefan ; Koschke, Rainer ; Antoniol, Giulio ; Krinke, Jens ; Merlo, Ettore: Comparison and Evaluation of Clone Detection Tools. In: IEEE Computer Society Transactions on Software Engineering 33 (2007), September, Nr. 9, S Chou u. a Chou, Andy ; Yang, Junfeng ; Chelf, Benjamin ; Hallem, Seth ; Engler, Dawson R.: An Empirical Study of Operating System Errors. In: Symposium on Operating Systems Principles, ACM Press, 2001, S URL citeseer.ist.psu.edu/chou01empirical.html Cordy u. a Cordy, James R. ; Dean, Thomas R. ; Synytskyy, Nikita: Practical language-independent detection of near-miss clones. In: Conference of the Centre for Advanced Studies on Collaborative research, IBM Press, 2004, S Rainer Koschke (Univ. Bremen) Vorlesung Software-Reengineering WS 2009/ / 63

56 Ducasse u. a Ducasse, Stéphane ; Rieger, Matthias ; Demeyer, Serge: A Language Independent Approach for Detecting Duplicated Code. In: Proceedings of the International Conference on Software Maintenance (ICSM99), 1999, S Higo u. a Higo, Yoshiki ; Ueda, Yasushi ; Kamiya, Toshihro ; Kusumoto, Shinji ; Inoue, Katsuro: On Software Maintenance Process Improvement Based on Code Clone Analysis. In: International Conference on Product Focused Software Process Improvement Bd. 2559, Springer, 2002, S ISBN ISBN: Johnson 1993 Johnson, J. H.: Identifying redundancy in source code using fingerprints. In: Conference of the Centre for Advanced Studies on Collaborative research, IBM Press, 1993, S Johnson 1994 Johnson, J. H.: Substring matching for clone detection and change tracking. In: International Conference on Software Maintenance, IEEE Computer Society Press, 1994, S Rainer Koschke (Univ. Bremen) Vorlesung Software-Reengineering WS 2009/ / 63

57 Jürgens u. a Jürgens, E. ; Deissenböck, F. ; Hummel, B. ; Wagner, S.: Do Code Clones Matter? In: International Conference on Software Engineering, ACM Press, 2009 Kamiya u. a Kamiya, Toshihiro ; Kusumoto, Shinji ; Inoue, Katsuro: CCFinder: A Multi-Linguistic Token-based Code Clone Detection System for Large Scale Source Code. In: IEEE Computer Society Transactions on Software Engineering 28 (2002), Nr. 7, S Komondoor und Horwitz 2001 Komondoor, R. ; Horwitz, S.: Using slicing to identify duplication in source code. In: Proc. Int. Symposium on Static Analysis, Juli 2001, S Kontogiannis 1997 Kontogiannis, K.: Evaluation Experiments on the Detection of Programming Patterns Using Software Metrics. In: Working Conference on Reverse Engineering, 1997, S Rainer Koschke (Univ. Bremen) Vorlesung Software-Reengineering WS 2009/ / 63

58 Koschke u. a Koschke, Rainer ; Falke, Raimar ; Frenzel, Pierre: Clone Detection Using Abstract Syntax Suffix Trees. In: Working Conference on Reverse Engineering, IEEE Computer Society Press, 2006, S Krinke 2001 Krinke, Jens: Identifying Similar Code with Program Dependence Graphs. In: Working Conference on Reverse Engineering, 2001, S Li u. a Li, Z. ; Lu, S. ; Myagmar, S. ; Zhou, Y.: CP-Miner: A tool for Finding copy-paste and related bugs in operating system code. In: Operating System Design and Implementation, 2004, S Li u. a Li, Z ; Lu, S ; Myagmar, S. ; Zhou, Y.: Copy-Paste and Related Bugs in Large-Scale Software Code. In: IEEE Computer Society Transactions on Software Engineering 32 (2006), März, Nr. 3, S Marcus und Maletic 2001 Marcus, A. ; Maletic, J.I.: Identification of high-level concept clones in source code. In: International Conference on Automated Software Engineering, 2001, S Rainer Koschke (Univ. Bremen) Vorlesung Software-Reengineering WS 2009/ / 63

59 Mayrand u. a Mayrand, Jean ; Leblanc, Claude ; Merlo, Ettore M.: Experiment on the Automatic Detection of Function Clones in a Software System using Metrics. In: Proceedings of the International Conference on Software Maintenance. Washington : IEEE Computer Society Press, November , S ISBN McCreight 1976 McCreight, E. M.: A space-economical suffix-tree construction algorithm. In: Journal of the ACM 23 (1976), Nr. 2, S Monden u. a Monden, A. ; Nakae, D. ; Kamiya, T. ; Sato, S. ; Matsumoto, K.: Software quality analysis by code clones in industrial legacy software. In: IEEE Symposium on Software Metrics, 2002, S Rieger 2005 Rieger, Matthias: Effective Clone Detection Without Language Barriers, University of Bern, Switzerland, Dissertation, 2005 Synytskyy u. a Synytskyy, Nikita ; Cordy, James R. ; Dean, Thomas: Resolution of static clones in dynamic Web pages. In: Proceedings of the Workshop on Website Evolution, 2003, S Rainer Koschke (Univ. Bremen) Vorlesung Software-Reengineering WS 2009/ / 63

60 Ukkonen 1995 Ukkonen, E.: On-line construction of suffix trees. In: Algorithmica 14 (1995), S Wahler u. a Wahler, V. ; Seipel, D. ; Gudenberg, Jürgen W. von ; Fischer, G.: Clone detection in source code by frequent itemset techniques. In: Proceedings of the Fourth IEEE International Workshop on Source Code Analysis and Manipulation, 2004, S Yang 1991 Yang, Wuu: Identifying Syntactic Differences Between Two Programs. In: Software Practice and Experience 21 (1991), Juli, Nr. 7, S Rainer Koschke (Univ. Bremen) Vorlesung Software-Reengineering WS 2009/ / 63

Vorlesung Software-Reengineering

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

Mehr

Vorlesung Software-Reengineering

Vorlesung Software-Reengineering Vorlesung Software-Reengineering Prof. Dr. Rainer Koschke Arbeitsgruppe Softwaretechnik Fachbereich Mathematik und Informatik Universität Bremen Wintersemester 2010/11 Überblick I Klonerkennung Techniken

Mehr

Vorlesung Software-Reengineering

Vorlesung Software-Reengineering Vorlesung Software-Reengineering Prof. Dr. Rainer Koschke Arbeitsgruppe Softwaretechnik Fachbereich Mathematik und Informatik Universität Bremen Wintersemester 2009/10 Überblick I 1 Klonerkennung I 1 Klonerkennung

Mehr

Vorlesung Software-Reengineering

Vorlesung Software-Reengineering Vorlesung Software-Reengineering Prof. Dr. Rainer Koschke Arbeitsgruppe Softwaretechnik Fachbereich Mathematik und Informatik Universität Bremen Wintersemester 2005/06 Überblick I 1 Klonerkennung 1 Klonerkennung

Mehr

Vorlesung Software-Reengineering

Vorlesung Software-Reengineering Vorlesung Software-Reengineering Prof. Dr. Rainer Koschke Arbeitsgruppe Softwaretechnik Fachbereich Mathematik und Informatik Universität Bremen Wintersemester 2008/09 Überblick I 1 Klonerkennung 1 Klonerkennung

Mehr

Vorlesung Software-Reengineering

Vorlesung Software-Reengineering Vorlesung Software-Reengineering Prof. Dr. Rainer Koschke Arbeitsgruppe Softwaretechnik Fachbereich Mathematik und Informatik Universität Bremen Wintersemester 2008/09 Überblick I 1 Klonerkennung Techniken

Mehr

Reduzierung der Programmgröße mit Hilfe von Klonerkennung

Reduzierung der Programmgröße mit Hilfe von Klonerkennung Reduzierung der Programmgröße mit Hilfe von Klonerkennung Bernhard J. Berger Axivion GmbH berger@axivion.com Prof. Dr. Rainer Koschke Arbeitsgruppe Softwaretechnik, FB 3 Informatik, Universität Bremen

Mehr

Vorlesung Software-Reengineering

Vorlesung Software-Reengineering Vorlesung Software-Reengineering Prof. Dr. Rainer Koschke Arbeitsgruppe Softwaretechnik Fachbereich Mathematik und Informatik Universität Bremen Wintersemester 2007/08 Überblick I 1 1 Das tägliche Brot

Mehr

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

zu große Programme (Bildschirmseite!) zerlegen in (weitgehend) unabhängige Einheiten: Unterprogramme Bisher Datentypen: einfach Zahlen, Wahrheitswerte, Zeichenketten zusammengesetzt Arrays (Felder) zur Verwaltung mehrerer zusammengehörender Daten desselben Datentypes eindimensional, mehrdimensional, Array-Grenzen

Mehr

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

zu große Programme (Bildschirmseite!) zerlegen in (weitgehend) unabhängige Einheiten: Unterprogramme Bisher Datentypen: einfach Zahlen, Wahrheitswerte, Zeichenketten zusammengesetzt Arrays (Felder) zur Verwaltung mehrerer zusammengehörender Daten desselben Datentypes eindimensional, mehrdimensional, Array-Grenzen

Mehr

Vorlesung Software-Reengineering

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

Mehr

Wintersemester 2004/ Januar Aus der Vorlesung sind Datenstrukturen zur Repräsentation von Wäldern disjunkter Mengen bekannt.

Wintersemester 2004/ Januar Aus der Vorlesung sind Datenstrukturen zur Repräsentation von Wäldern disjunkter Mengen bekannt. Lehrstuhl für Praktische Informatik III Norman May B6, 29, Raum C0.05 68131 Mannheim Telefon: (0621) 181 2517 Email: norman@pi3.informatik.uni-mannheim.de Matthias Brantner B6, 29, Raum C0.05 68131 Mannheim

Mehr

Vorlesung Software-Reengineering

Vorlesung Software-Reengineering Vorlesung Software-Reengineering Prof. Dr. Rainer Koschke Arbeitsgruppe Softwaretechnik Fachbereich Mathematik und Informatik Universität Bremen Wintersemester 2009/10 Überblick I 1 Einführung 1 Einführung

Mehr

Vorlesung Software-Reengineering

Vorlesung Software-Reengineering Vorlesung Software-Reengineering Prof. Dr. Rainer Koschke Arbeitsgruppe Softwaretechnik Fachbereich Mathematik und Informatik Universität Bremen Wintersemester 2013/1 Überblick I Einführung Statische Programmanalyse

Mehr

Vorlesung Software-Reengineering

Vorlesung Software-Reengineering Vorlesung Software-Reengineering Prof. Dr. Rainer Koschke Arbeitsgruppe Softwaretechnik Fachbereich Mathematik und Informatik Universität Bremen Wintersemester 2009/10 Überblick I 1 Merkmalsuche Merkmalsuche

Mehr

Visualisierung feingranularer Abhängigkeiten

Visualisierung feingranularer Abhängigkeiten Visualisierung feingranularer Abhängigkeiten Jens Krinke FernUniversität in Hagen Fachbereich Elektrotechnik und Informationstechnik Fach Softwaretechnik 6. Workshop Software-Reengineering, Bad Honnef,

Mehr

Software Maintenance. Anmerkung zu Program Slicing UNIV.-PROF. DIPL.-ING. DR. FRANZ WOTAWA

Software Maintenance. Anmerkung zu Program Slicing UNIV.-PROF. DIPL.-ING. DR. FRANZ WOTAWA Software Maintenance UNIV.-PROF. DIPL.-ING. DR. FRANZ WOTAWA Technische Universität Graz, Institut für Softwaretechnologie wotawa@ist.tugraz.at Anmerkung zu Program Slicing Infolge werden wir uns den Static

Mehr

Informatik II, SS 2014

Informatik II, SS 2014 Informatik II SS 2014 (Algorithmen & Datenstrukturen) Vorlesung 20 (23.7.2014) All Pairs Shortest Paths, String Matching (Textsuche) Algorithmen und Komplexität Vorlesungsevaluation Sie sollten alle eine

Mehr

Vorlesung Software Reengineering

Vorlesung Software Reengineering Vorlesung Software Reengineering Rainer Koschke Institut für Informatik, Universität Stuttgart Requirements Design Code reengineering forward engineer- forward engireverse engineer- reverse engineer- restructuring

Mehr

Konsolidierung von Software-Varianten in Software-Produktlinien ein Forschungsprogramm

Konsolidierung von Software-Varianten in Software-Produktlinien ein Forschungsprogramm Konsolidierung von Software-Varianten in Software-Produktlinien ein Forschungsprogramm Rainer Koschke Universität Bremen Workshop Software-Reengineering Bad Honnef 5. Mai 2005 Bauhaus Forschungskooperation

Mehr

Informatik für Mathematiker und Physiker Woche 2. David Sommer

Informatik für Mathematiker und Physiker Woche 2. David Sommer Informatik für Mathematiker und Physiker Woche 2 David Sommer David Sommer 25. September 2018 1 Heute: 1. Self-Assessment 2. Feedback C++ Tutorial 3. Modulo Operator 4. Exercise: Last Three Digits 5. Binary

Mehr

Vorlesung Software-Reengineering

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

Mehr

Languages and Tools for Object-Oriented Development Klausur Wintersemester 2007/2008

Languages and Tools for Object-Oriented Development Klausur Wintersemester 2007/2008 Languages and Tools for Object-Oriented Development Klausur Wintersemester 2007/2008 27. Februar 2008 Institut für Softwaresysteme, TUHH Regeln: 1. Zu dieser Klausur sind keinerlei Hilfsmittel zugelassen.

Mehr

Zeichenketten Benedikt Straßner. Programming Systems Group Martensstr Erlangen Germany

Zeichenketten Benedikt Straßner. Programming Systems Group Martensstr Erlangen Germany Zeichenketten 16.04.2018 Benedikt Straßner Programming Systems Group Martensstr. 3 91058 Erlangen Germany Übersicht String Matching Algorithmen Naive Stringsuche Knuth Morris Pratt (KMP) Algorithmus Boyer-Moore

Mehr

Software Engineering. Statische Analyse! Kapitel 11

Software Engineering. Statische Analyse! Kapitel 11 Martin Glinz Harald Gall Software Engineering Kapitel 11 Statische Analyse! 2009-2011 Harald Gall. Alle Rechte vorbehalten. Speicherung und Wiedergabe für den persönlichen, nicht kommerziellen Gebrauch

Mehr

Vorlesung Software-Reengineering

Vorlesung Software-Reengineering Vorlesung Software-Reengineering Prof. Dr. R. Koschke Arbeitsgruppe Softwaretechnik Fachbereich Mathematik und Informatik Universität Bremen Wintersemester 2005/06 Überblick I 1 Blatt 2 1 Blatt 2 A 2.1:

Mehr

Die Definition eines Typen kann rekursiv sein, d.h. Typ-Konstruktoren dürfen Elemente des zu definierenden Typ erhalten.

Die Definition eines Typen kann rekursiv sein, d.h. Typ-Konstruktoren dürfen Elemente des zu definierenden Typ erhalten. 4.5.5 Rekursive Typen Die Definition eines Typen kann rekursiv sein, d.h. Typ-Konstruktoren dürfen Elemente des zu definierenden Typ erhalten. datatype IntList = Nil Cons o f ( i n t IntList ) ; Damit

Mehr

Die Klasse MiniJava ist in der Datei MiniJava.java definiert:

Die Klasse MiniJava ist in der Datei MiniJava.java definiert: Die Klasse MiniJava ist in der Datei MiniJava.java definiert: import javax.swing.joptionpane; import javax.swing.jframe; public class MiniJava { public static int read () { JFrame f = new JFrame (); String

Mehr

Syntax der Sprache PASCAL

Syntax der Sprache PASCAL Syntax der Sprache PASCAL Buchstaben A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z Ziffern 0 1 2 3 4 5 6 7 8 9 Sonderzeichen und Wortsymbole +

Mehr

Introduction to Python. Introduction. First Steps in Python. pseudo random numbers. May 2016

Introduction to Python. Introduction. First Steps in Python. pseudo random numbers. May 2016 to to May 2016 to What is Programming? All computers are stupid. All computers are deterministic. You have to tell the computer what to do. You can tell the computer in any (programming) language) you

Mehr

Software Engineering. Statische Analyse. Martin Glinz Harald Gall. Wintersemester 2006/07. Kapitel 11. Universität Zürich Institut für Informatik

Software Engineering. Statische Analyse. Martin Glinz Harald Gall. Wintersemester 2006/07. Kapitel 11. Universität Zürich Institut für Informatik Martin Glinz Harald Gall Software Engineering Wintersemester 2006/07 Kapitel 11 Statische Analyse Universität Zürich Institut für Informatik 2006 by Harald Gall. Alle Rechte vorbehalten. Reproduktion,

Mehr

Seminar: Software Engineering verteilter Systeme

Seminar: Software Engineering verteilter Systeme Seminar: Software Engineering verteilter Systeme Hauptseminar im WS 2010/2011 Programmierung verteilter Systeme Institut für Informatik Universität Augsburg 86135 Augsburg Tel.: +49 821 598-2118 Fax: +49

Mehr

C.3 Funktionen und Prozeduren

C.3 Funktionen und Prozeduren C3 - Funktionen und Prozeduren Funktionsdeklarationen in Pascal auch in Pascal kann man selbstdefinierte Funktionen einführen: Funktionen und Prozeduren THEN sign:= 0 Funktion zur Bestimmung des Vorzeichens

Mehr

Kapitel 5: Statische Analyse

Kapitel 5: Statische Analyse Kapitel 5: Statische Analyse Inhalt 5.1 Grundlagen 5.2 Analyse von Programmen 5.3 Analyse von Algorithmen 5.4 Analyse von Spezifikationen, Entwürfen und Prüfvorschriften Schlüsselbegriffe Statische Prüfung

Mehr

Kapitel 12: Schnelles Bestimmen der Frequent Itemsets

Kapitel 12: Schnelles Bestimmen der Frequent Itemsets Einleitung In welchen Situationen ist Apriori teuer, und warum? Kapitel 12: Schnelles Bestimmen der Frequent Itemsets Data Warehousing und Mining 1 Data Warehousing und Mining 2 Schnelles Identifizieren

Mehr

Kapitel

Kapitel 10.11.005 Kapitel 4-10.11.005 Lehrbeispiel: Sortieralgorithmus " Bubble Sort" Sortieren von Primitivtypen Der "Abstrakte Datentyp" Grundlagen der Objektorientierung: Abstraktion, Kapselung, Modularität,

Mehr

Kurze Wege Übungen. Prof. Dr. Rainer Koschke 1 Dipl.-Inform. Jochen Quante 1 Dipl.-Inform. Raimar Falke 1

Kurze Wege Übungen. Prof. Dr. Rainer Koschke 1 Dipl.-Inform. Jochen Quante 1 Dipl.-Inform. Raimar Falke 1 Kurze Wege Übungen Prof. Dr. Rainer Koschke 1 Dipl.-Inform. Jochen Quante 1 Dipl.-Inform. Raimar Falke 1 1 Arbeitsgruppe Softwaretechnik Fachbereich Mathematik und Informatik Universität Bremen 22. März

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 22 Einstieg in die Informatik mit Java Grundlagen Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 22 1 Kommentare 2 Bezeichner für Klassen, Methoden, Variablen 3 White

Mehr

Zuerst wird die Bedingung ausgewertet. Ist sie erfüllt, wird der Rumpf des while-statements ausgeführt. Nach Ausführung des Rumpfs wird das gesamte

Zuerst wird die Bedingung ausgewertet. Ist sie erfüllt, wird der Rumpf des while-statements ausgeführt. Nach Ausführung des Rumpfs wird das gesamte Zuerst wird die Bedingung ausgewertet. Ist sie erfüllt, wird der Rumpf des while-statements ausgeführt. Nach Ausführung des Rumpfs wird das gesamte while-statement erneut ausgeführt. Ist die Bedingung

Mehr

DYNAMISCHE GEOMETRIE

DYNAMISCHE GEOMETRIE DYNAMISCHE GEOMETRIE ÄHNLICHKEITSGEOMETRIE & MODELLIERUNG PAUL LIBBRECHT PH WEINGARTEN WS 2014-2015 CC-BY VON STAUDT KONSTRUKTIONEN Menü Erinnerung: Strahlensatz Längen, Frame Zielartikel Addition, Subtraktion

Mehr

Informatik - Übungsstunde

Informatik - Übungsstunde Informatik - Übungsstunde Jonas Lauener (jlauener@student.ethz.ch) ETH Zürich Woche 08-25.04.2018 Lernziele const: Reference const: Pointer vector: iterator using Jonas Lauener (ETH Zürich) Informatik

Mehr

Informatik II Übung 2. Pascal Schärli

Informatik II Übung 2. Pascal Schärli Informatik II Übung 2 Pascal Schärli pascscha@student.ethz.ch 08.03.2018 Code Expert Pascal Schärli 08.03.2018 2 Nachbesprechung Serie 1 Aufgabe 1 a) Induktionsbeweis über a möglich? Nein! Der Induktionsanfang

Mehr

Text Analytics. Referat: Improving Suffix Array Locality for Fast Pattern Matching on Disk

Text Analytics. Referat: Improving Suffix Array Locality for Fast Pattern Matching on Disk Text Analytics Referat: Improving Suffix Array Locality for Fast Pattern Matching on Disk Nils Alberti & Jürgen Eicher, 12. Juni 2008 Einführung Stringmatching bisher: Analyse des Patterns zum schnellen

Mehr

Software Engineering. Statische Analyse! Kapitel 11

Software Engineering. Statische Analyse! Kapitel 11 Martin Glinz Thomas Fritz Software Engineering Kapitel 11 Statische Analyse 2005, 2013 Martin Glinz. Alle Rechte vorbehalten. Speicherung und Wiedergabe für den persönlichen, nicht kommerziellen Gebrauch

Mehr

Parsing SystemVerilog 2012

Parsing SystemVerilog 2012 Parsing Julian Nagel Lehrstuhl für Rechnerarchitektur Universität Heidelberg 06.07.2016 1 2 3 Inhaltsverzeichnis 4 5 6 Viele Ideen dazu wie effektiv Hardware entwickelt werden kann, aber keine IDE welche

Mehr

Inkonsistente Klone und Fehler in Software

Inkonsistente Klone und Fehler in Software Institut für Softwaretechnologie Abteilung Software Engineering Universität Stuttgart Universitätsstraße 38 Diplomarbeit Nr. 3651 Inkonsistente Klone und Fehler in Software Kamer Kaya Studiengang: Informatik

Mehr

3.1 Reservierte Wörter

3.1 Reservierte Wörter 3.1 Reservierte Wörter int Bezeichner für Basis-Typen; if, else, while Schlüsselwörter aus Programm-Konstrukten; (,), ",, {,},,,; Sonderzeichen. 62 3.2 Was ist ein erlaubter Name? Schritt 1: Angabe der

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java Vorlesung vom 18.4.07, Grundlagen Übersicht 1 Kommentare 2 Bezeichner für Klassen, Methoden, Variablen 3 White Space Zeichen 4 Wortsymbole 5 Interpunktionszeichen 6 Operatoren 7 import Anweisungen 8 Form

Mehr

Repetitive Strukturen

Repetitive Strukturen Repetitive Strukturen Andreas Liebig Philipp Muigg ökhan Ibis Repetitive Strukturen, (z.b. sich wiederholende Strings), haben eine große Bedeutung in verschiedenen Anwendungen, wie z.b. Molekularbiologie,

Mehr

Informatik I Übung, Woche 40

Informatik I Übung, Woche 40 Giuseppe Accaputo 1. Oktober, 2015 Plan für heute 1. Nachbesprechung Übung 2 2. Vorbesprechung Übung 3 3. Zusammenfassung der für Übung 3 wichtigen Vorlesungsslides Informatik 1 (D-BAUG) Giuseppe Accaputo

Mehr

2.2 Spezifikation abstrakter Datentypen. 2.3 Implementierung und Anwendung von ADT. 2.4 Datenabstraktion und Objektorientierung

2.2 Spezifikation abstrakter Datentypen. 2.3 Implementierung und Anwendung von ADT. 2.4 Datenabstraktion und Objektorientierung Inhaltsverzeichnis (update) 2 Datenabstraktion 2.1 Begriffe 2.2 Spezifikation abstrakter Datentypen 2.2.1 Algebraische Spezifikation 2.2.2 Modellierende Spezifikation 2.3 Implementierung und Anwendung

Mehr

Einführung in die Programmierung I. 2.0 Einfache Java Programme. Thomas R. Gross. Department Informatik ETH Zürich

Einführung in die Programmierung I. 2.0 Einfache Java Programme. Thomas R. Gross. Department Informatik ETH Zürich 252-0027 Einführung in die Programmierung I 2.0 Einfache Java Programme Thomas R. Gross Department Informatik ETH Zürich Uebersicht 2.0 Einfache Java Programme Struktur Namen Output 2 Graphische Darstellung

Mehr

Zeichenketten. Michael Fularczyk Michael Fularczyk Zeichenketten / 41

Zeichenketten. Michael Fularczyk Michael Fularczyk Zeichenketten / 41 Zeichenketten Michael Fularczyk 17.05.2011 Michael Fularczyk Zeichenketten 17.05.2011 1 / 41 Inhalt Zeichenketten Zeichensätze Darstellung Suchverfahren naive Stringsuche Knuth-Morris-Pratt Boyer-Moore

Mehr

Informatik II SS Der Kompilationsprozess (-phasen) Schreiben des Programms. Die Organisation eines typischen Compilers

Informatik II SS Der Kompilationsprozess (-phasen) Schreiben des Programms. Die Organisation eines typischen Compilers Der Kompilationsprozess (-phasen) Informatik II SS 2004 Teil 6: Sprachen, Compiler und Theorie 7 Prof. Dr. Dieter Hogrefe Dipl.-Inform. Michael Ebner Lehrstuhl für Telematik Institut für Informatik Scanner

Mehr

Wissensentdeckung in Datenbanken

Wissensentdeckung in Datenbanken Wissensentdeckung in Datenbanken SQL, Häufige Mengen Nico Piatkowski und Uwe Ligges 11.05.2017 1 von 16 Überblick Was bisher geschah... Modellklassen Verlustfunktionen Numerische Optimierung Regularisierung

Mehr

Tagesprogramm. Werte und Typen Methoden und Parameter Ergebnisse und Seiteneffekte.

Tagesprogramm. Werte und Typen Methoden und Parameter Ergebnisse und Seiteneffekte. 1 2017-03-13 Tagesprogramm Werte und Typen Methoden und Parameter Ergebnisse und Seiteneffekte http://pingo.upb.de/839558 Skriptum ab Seite 43 git clone https://github.com/markus2330/pk17s03 2 2017-03-13

Mehr

3 Syntax von Programmiersprachen

3 Syntax von Programmiersprachen 3 Syntax von Programmiersprachen Syntax ( Lehre vom Satzbau ) formale Beschreibung des Aufbaus der Worte und Sätze, die zu einer Sprache gehören; im Falle einer Programmiersprache Festlegung, wie Programme

Mehr

INFORMATIK FÜR BIOLOGEN

INFORMATIK FÜR BIOLOGEN Technische Universität Dresden 15012015 Institut für Theoretische Informatik Professur für Automatentheorie INFORMATIK FÜR BIOLOGEN Musterklausur WS 2014/15 Studiengang Biologie und Molekulare Biotechnologie

Mehr

D-BAUG Informatik I. Exercise session: week 1 HS 2018

D-BAUG Informatik I. Exercise session: week 1 HS 2018 1 D-BAUG Informatik I Exercise session: week 1 HS 2018 Java Tutorials 2 Questions? expert.ethz.ch 3 Common questions and issues. expert.ethz.ch 4 Need help with expert? Mixed expressions Type Conversions

Mehr

Algorithmen auf Sequenzen

Algorithmen auf Sequenzen Algorithmen auf Sequenzen Vorlesung von Prof. Dr. Sven Rahmann im Sommersemester 2008 Kapitel 4 Reguläre Ausdrücke Webseite zur Vorlesung http://ls11-www.cs.tu-dortmund.de/people/rahmann/teaching/ss2008/algorithmenaufsequenzen

Mehr

Wiederholung: Listen, Referenzen

Wiederholung: Listen, Referenzen Wiederholung: Listen, Referenzen Symbolische Programmiersprache Benjamin Roth and Annemarie Friedrich Wintersemester 2016/2017 Centrum für Informations- und Sprachverarbeitung LMU München 1 Wiederholung

Mehr

Technische Universität München WS 2004/2005 Fakultät für Informatik 11. Dezember 2004 Prof. Dr. Seidl

Technische Universität München WS 2004/2005 Fakultät für Informatik 11. Dezember 2004 Prof. Dr. Seidl Name: Vorname: Matr. Nr.: Technische Universität München WS 2004/2005 Fakultät für Informatik 11. Dezember 2004 Prof. Dr. Seidl Zwischenklausur zu Einführung in die Informatik I Hinweis: In dieser Zwischenklausur

Mehr

Informatik II, SS 2018

Informatik II, SS 2018 Informatik II - SS 2018 (Algorithmen & Datenstrukturen) Vorlesung 21 (11.7.2018) String Matching (Textsuche) II Greedy Algorithmen I Algorithmen und Komplexität Textsuche / String Matching Gegeben: Zwei

Mehr

3 Syntax von Programmiersprachen

3 Syntax von Programmiersprachen 3 Syntax von Programmiersprachen Syntax ( Lehre vom Satzbau ) formale Beschreibung des Aufbaus der Worte und Sätze, die zu einer Sprache gehören; im Falle einer Programmiersprache Festlegung, wie Programme

Mehr

13 Abstrakte Datentypen

13 Abstrakte Datentypen 13 Abstrakte Datentypen Bisher: Konkrete Datentypen Menge von Elementen Operationen auf den Elementen (Konstruktoren, Selektoren, Typprädikate) Eigenschaften abgeleitet Jetzt: Abstrakte Datentypen (ADT)

Mehr

Software development with continuous integration

Software development with continuous integration Software development with continuous integration (FESG/MPIfR) ettl@fs.wettzell.de (FESG) neidhardt@fs.wettzell.de 1 A critical view on scientific software Tendency to become complex and unstructured Highly

Mehr

Automaten und formale Sprachen. Lösungen zu den Übungsblättern

Automaten und formale Sprachen. Lösungen zu den Übungsblättern Automaten und formale Sprachen zu den Übungsblättern Übungsblatt Aufgabe. (Sipser, exercise.3) M = ({q, q2, q3, q4, q5}, {u, d}, δ, q3, {q3}) δ: u d q q q 2 q 2 q q 3 q 3 q 2 q 4 q 4 q 3 q 5 q 5 q 4 q

Mehr

Exercise 6. Compound Types and Control Flow. Informatik I für D-MAVT. M. Gross, ETH Zürich, 2017

Exercise 6. Compound Types and Control Flow. Informatik I für D-MAVT. M. Gross, ETH Zürich, 2017 Exercise 6 Compound Types and Control Flow Daniel Bogado Duffner Slides auf: Informatik I für D-MAVT bodaniel@student.ethz.ch n.ethz.ch/~bodaniel Agenda Recap/Quiz Structures Unions Enumerations Loops

Mehr

Allgemeine Hinweise:

Allgemeine Hinweise: TECHNISCHE UNIVERSITÄT MÜNCHEN FAKULTÄT FÜR INFORMATIK Lehrstuhl für Sprachen und Beschreibungsstrukturen WS 11/12 Einführung in die Informatik I Probe-Klausur Prof. Dr. Helmut Seidl, M. Schwarz, A. Herz,

Mehr

T (n) = max. g(x)=n t(n) S(n) = max. g(x)=n s(n)

T (n) = max. g(x)=n t(n) S(n) = max. g(x)=n s(n) Beim Logarithmischen Kostenmaß wird, im Gegensatz zum EKM, die Stelligkeit der Werte berücksichtigt und mit in die Laufzeit eingerechnet. Beispiel: R1 := R2 (R3), wobei R2 den Wert 5, R3 den Wert 10 und

Mehr

Seminar: Software Engineering verteilter Systeme

Seminar: Software Engineering verteilter Systeme Seminar: Software Engineering verteilter Systeme Hauptseminar im Sommersemester 2011 Programmierung verteilter Systeme Institut für Informatik Universität Augsburg 86135 Augsburg Tel.: +49 821 598-2118

Mehr

2.2 Einfache Datenstrukturen

2.2 Einfache Datenstrukturen 2.2 Einfache Datenstrukturen Konstante und Variable Die Begriffe "Konstante" und "Variable" haben zunächst auch in der Informatik dieselbe grundsätzliche Bedeutung wie in der übrigen Mathematik. Variablen

Mehr

Berühmte Informatiker

Berühmte Informatiker Berühmte Informatiker Teil 10: J. Backus & D. E. Knuth 1924-1938- * 03.12.1924 in Philadelphia John Backus Vorzeitiger Abbruch des Studiums der Chemie (1942) und der Medizin (1945) Während der Arbeit als

Mehr

Java Übung. Übung 2. Werner Gaulke. 19. April Universität Duisburg-Essen Kommedia, Übung EinPro SS06, Einführung in Java - Übung.

Java Übung. Übung 2. Werner Gaulke. 19. April Universität Duisburg-Essen Kommedia, Übung EinPro SS06, Einführung in Java - Übung. Java Übung Übung 2 Universität Duisburg-Essen Kommedia, Übung EinPro SS06, 19. April 2006 (UniDUE) 19. April 2006 1 / 13 Java Programme Java Programme bestehen aus (meist mehreren) Klassen. In den Klassen

Mehr

Methoden zur Interpretation LISPähnlicher. Programmiersprachen. Seminarvortrag / 53 FH AACHEN FACHBEREICH 9 TOBIAS STUMM MATR.-NR.

Methoden zur Interpretation LISPähnlicher. Programmiersprachen. Seminarvortrag / 53 FH AACHEN FACHBEREICH 9 TOBIAS STUMM MATR.-NR. Methoden zur Interpretation LISPähnlicher Programmiersprachen Seminarvortrag 20.01.2017 FACHBEREICH 9 TOBIAS STUMM MATR.-NR. 4012917 1 Inhalt Motivation Lisp > Definition > Scheme Interpreter > Definition

Mehr

Nachholklausur zur Vorlesung: Einführung in die objektorientierte Programmierung mit Java WS1415

Nachholklausur zur Vorlesung: Einführung in die objektorientierte Programmierung mit Java WS1415 Nachholklausur zur Vorlesung: Einführung in die objektorientierte Programmierung mit Java WS1415 Alexander Bazo 10. April 2015 Allgemeine Hinweise 1. Die Bearbeitungszeit beträgt 60 Minuten. Sie könne

Mehr

Pascal Schärli

Pascal Schärli Informatik I - Übung 8 Pascal Schärli pascscha@student.ethz.ch 12.04.2019 1 Was gibts heute? Best-Of Vorlesung: Prefix / Infix EBNF Vorbesprechung Problem of the Week 2 Vorlesung 3. 1 Prefix Notation Infix

Mehr

So schreiben Sie ein Parser-Programm

So schreiben Sie ein Parser-Programm Universität des Saarlandes Fachrichtung Informatik Programming Systems Lab Prof. Gert Smolka Proseminar Programmiersysteme WS 03/04 Höhere Funktionale Programmierung: Parser-Kombinatoren Matthias Berg

Mehr

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

Softwaretechnik. Überblick I. Prof. Dr. Rainer Koschke. Sommersemester 2007 Softwaretechnik Prof. Dr. Rainer Koschke Fachbereich Mathematik und Informatik Arbeitsgruppe Softwaretechnik Universität Bremen Sommersemester 2007 Überblick I 1 Vorbemerkungen Vorbemerkungen: Vorbemerkungen

Mehr

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

Softwaretechnik. Prof. Dr. Rainer Koschke. Sommersemester Fachbereich Mathematik und Informatik Arbeitsgruppe Softwaretechnik Universität Bremen Softwaretechnik Prof. Dr. Rainer Koschke Fachbereich Mathematik und Informatik Arbeitsgruppe Softwaretechnik Universität Bremen Sommersemester 2007 Überblick I 1 Vorbemerkungen Vorbemerkungen: Vorbemerkungen

Mehr

Stratego/XT und ASF+SDF Meta-Environment. Paul Weder Seminar Transformationen Datum:

Stratego/XT und ASF+SDF Meta-Environment. Paul Weder Seminar Transformationen Datum: Stratego/XT und ASF+SDF Meta-Environment Paul Weder Seminar Transformationen Datum: 20.01.2006 Gliederung Allgemeines ASF+SDF Meta-Environment Stratego/XT Zusammenfassung/Vergleich SDF (Syntax Definition

Mehr

Quelltextähnlichkeit

Quelltextähnlichkeit Quelltextähnlichkeit String autor = Tobias Jamin ; String projekt = Arte-Fakt ; String seminar = Transformationen ; Date termin = new Date(3, // Tag 2, // Monat 2006); Presentation praesentation = new

Mehr

Vorlesung Software-Reengineering

Vorlesung Software-Reengineering Vorlesung Software-Reengineering Prof. Dr. Rainer Koschke Arbeitsgruppe Softwaretechnik Fachbereich Mathematik und Informatik Universität Bremen Wintersemester 2005/06 Überblick I 1 1 Ausgangsszenario

Mehr

Es ist für die Lösung der Programmieraufgabe nicht nötig, den mathematischen Hintergrund zu verstehen, es kann aber beim Verständnis helfen.

Es ist für die Lösung der Programmieraufgabe nicht nötig, den mathematischen Hintergrund zu verstehen, es kann aber beim Verständnis helfen. Ziele sind das Arbeiten mit Funktionen und dem Aufzählungstyp (enum), sowie - einfache Verzweigung (if else) - Alternativen switch case - einfache Schleifen (while oder do while) Aufgabe 3: Diese Aufgabe

Mehr

Vergleich von Techniken zur Erkennung duplizierten Quellcodes

Vergleich von Techniken zur Erkennung duplizierten Quellcodes Studiengang: Informatik Prüfer: Betreuer: Prof. Dr. Erhard Plödereder Dr. Rainer Koschke begonnen am: 30. März 2002 beendet am: 13. September 2002 CR-Klassifikation: D.2.7 Diplomarbeit Nr. 1998 Vergleich

Mehr

FACHHOCHSCHULE MANNHEIM

FACHHOCHSCHULE MANNHEIM für Java-Programmierer Der Präprozessor Prof. Dr. Wolfgang Schramm FACHHOCHSCHULE MANNHEIM Hochschule für Technik und Gestaltung Präprozessor Ist dem Compiler vorgeschaltet ( Prä -). Spezielle Anweisungen

Mehr

Waitomo. Compilerbaupraktikum Wintersemester 2006/2007. Stefan Wehr. 24. Oktober 2006

Waitomo. Compilerbaupraktikum Wintersemester 2006/2007. Stefan Wehr. 24. Oktober 2006 Waitomo Compilerbaupraktikum Wintersemester 2006/2007 Stefan Wehr 24. Oktober 2006 1 Einleitung Quellsprache für das Compilerbaupraktikum ist Waitomo, ein Java-ähnliche Sprache mit Unterstützung für Typklassen

Mehr

Informatik II - Übung 03

Informatik II - Übung 03 Informatik II - Übung 03 Katja Wolff katja.wolff@inf.ethz.ch 15.03.2014 Besprechung Übungsblatt 2 Informatik II - Übung 03 15.03.2017 2 U2.A1 S Klammerdarstellung und eingerückter Form R P V S(R(H(K)),P(A(N,O),Q,T),V(J,F(G)))

Mehr

Zwei Arten von Attributen. Klassenvariablen. Introspektion. getattr(object_instance, string)

Zwei Arten von Attributen. Klassenvariablen. Introspektion. getattr(object_instance, string) Zwei Arten von Attributen Klassenvariablen Die Daten, die von einem Objekt gespeichert werden und keine Methoden sind, heißen Attribute. Es gibt zwei Arten: Instanzattribute ( = Instanzvariablen): Variable,

Mehr

Zwei Arten von Attributen

Zwei Arten von Attributen Zwei Arten von Attributen Die Daten, die von einem Objekt gespeichert werden und keine Methoden sind, heißen Attribute. Es gibt zwei Arten: Instanzattribute ( = Instanzvariablen): Variable, die einer bestimmten

Mehr

Modell-Differenzen zur Änderungserkennung in großen Modellen

Modell-Differenzen zur Änderungserkennung in großen Modellen Modell-Differenzen zur Änderungserkennung in großen Modellen Phil Hebborn Agenda Motivation Grundlagen von Modell-Differenzen Modellieren mit EMF Der SiDiff-Algorithmus SiLift 2 Motivation Große Projekte

Mehr

10. Übung Algorithmen I

10. Übung Algorithmen I INSTITUT FÜR THEORETISCHE INFORMATIK 1 KIT Universität des Landes Baden-Württemberg und nationales Forschungszentrum in der Helmholtz-Gemeinschaft Institut für Theoretische www.kit.edu Informatik Bäume

Mehr

Algorithmen und Datenstrukturen II

Algorithmen und Datenstrukturen II Algorithmen und Datenstrukturen II Algorithmen zur Textverarbeitung III: D. Rösner Institut für Wissens- und Sprachverarbeitung Fakultät für Informatik Otto-von-Guericke Universität Magdeburg Sommer 2009,

Mehr

Informatik II, SS 2018

Informatik II, SS 2018 Informatik II - SS 2018 (Algorithmen & Datenstrukturen) Vorlesung 20 (9.7.2018) String Matching (Textsuche) Algorithmen und Komplexität Textsuche / String Matching Gegeben: Zwei Zeichenketten (Strings)

Mehr

Lehrveranstaltungen im Wintersemester 2012/2013

Lehrveranstaltungen im Wintersemester 2012/2013 Lehrveranstaltungen im Wintersemester 2012/2013 Information Systems and Machine Learning Lab (ISMLL) Prof. Dr. Dr. Lars Schmidt-Thieme Hildesheim, Juli 2012 1 / 1 Übersicht Praktika Hildesheim, Juli 2012

Mehr

Praktikum Softwareanalyse und -transformation

Praktikum Softwareanalyse und -transformation Praktikum Softwareanalyse und -transformation Thilo Mende Universität Bremen Fachbereich 3 Mathematik und Informatik Arbeitsgruppe Softwaretechnik http://www.informatik.uni-bremen/st Sommersemester 2009

Mehr