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 2005/06 Überblick I 1 Klonerkennung

2 1 Klonerkennung Hintergrund Definitionen und Beispiele Ansätze zur Klonerkennung Verfahren nach Baker Verfahren nach Baxter Verfahren nach Mayrand et al. Vergleich von Wiederholungsfragen Rainer Koschke (Univ. Bremen) Vorlesung Software-Reengineering WS 2005/ / 49 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 2005/ / 49

3 Software-Redundanz Duplikation von Quelltext durch Copy&Paste (Code Cloning) Nummer 1 auf Beck und Fowlers Stink Parade of Bad Smells Konsistente Änderungen an Klonen schwierig erhöhter Wartungsaufwand Gegenmaßnahme Abstraktion durch Funktionen oder Makros Code wird kürzer, klarer und besser wartbar! Rainer Koschke (Univ. Bremen) Vorlesung Software-Reengineering WS 2005/ / 49 Software-Redundanz for (i = 1; i < MAX; i++) { x = func() * y + x; } for (i = 1; i < MAX; i++) { x = func() * y + x; } for (j = 1; j < MAX; j++) { x = func() * y + x; } foo.c bar.c fred.c for (i = 1; i < MAX; i++) { x1 = func() * y1 + x1; } for (i = 1; i < MAX; i++) { x2 = func() * y2 + x2; } Typisch: 5 30 % des Codes sind redundant... Rainer Koschke (Univ. Bremen) Vorlesung Software-Reengineering WS 2005/ / 49

4 Software-Redundanz foo.c bar.c fred.c set_coordinate (&x, y); set_coordinate (&x, y); set_coordinate (&x, y); void set_coordinate ( float *x, float y) { int i; for (i = 1; i < MAX; i++) { *x = func() * y + *x; } } set_coordinate (&x1, y1); set_coordinate (&x2, y2);... und können abstrahiert werden Rainer Koschke (Univ. Bremen) Vorlesung Software-Reengineering WS 2005/ / 49 Copy&Paste-Programmierung Szenario 1: Neue Funktionalität soll hinzugefügt, die ähnlich ist zu einer existierenden. Auswirkungen sind nicht bekannt: Wer benutzt die existierende Funktionalität bereits? Was benutzt die existierende Funktionalität alles? Häufige Folge: Funktion wird kopiert und leicht modifiziert. Szenario 2: Wegen unzureichender Versionskontrolle existieren mehrere Versionen derselben Funktion im selben Code oder in verschiedenen Systemen. Szenario 3: Programmiersprache unterstützt keine Vererbung und keine generischen Einheiten. Compiler bietet kein Inlining. Folge: Code wird dupliziert Rainer Koschke (Univ. Bremen) Vorlesung Software-Reengineering WS 2005/ / 49

5 Folgen der Copy&Paste-Programmierung Die Folgen sind duplizierter Code und damit höherer Aufwand für Wartung, Verstehen und Test: Schwierigere Fehlerkorrektur Quelle subtiler Fehler Höherer Aufwand beim Verstehen Mehr Daten zu analysieren und visualisieren Änderbarkeit leidet = Untersuchungen: 5 30 % Code sind redundant. Rainer Koschke (Univ. Bremen) Vorlesung Software-Reengineering WS 2005/ / 49 Arten von Klonen Die Kopie eines Programmfragments wird Klon genannt. Typ 1 Exakte Kopie Keinerlei Veränderung an der Kopie (bis auf White Space und Kommentaren). Z.B. Inlining von Hand. Typ 2 Kopie mit Umbenennungen (parametrisierte Übereinstimmung) Bezeichner werden in der Kopie umbenannt. Z.B. Wiederverwendung einer Funktion, generische Funktion von Hand Typ 3 Kopie mit weiteren Modifikationen Code der Kopie wird abgeändert, nicht nur Bezeichner. Z.B. Erweiterung einer Funktion. Typ 4 Semantische Klone Verschiedene Implementierungen desselben Konzepts. Rainer Koschke (Univ. Bremen) Vorlesung Software-Reengineering WS 2005/ / 49

6 Beispiele i = l e n g t h ( l ) ; i f ( i < 3) {... } i = l e n g t h ( l ) ; i f ( i < 3) {... } i = l e n g t h ( l ) ; i f ( i < 3) {... } i = l e n g t h ( l ) ; i f ( i < 3) {... } i = l e n g t h ( l ) ; i f ( i < 3) {... } k = l e n g t h ( j ) ; i f ( k < x ) {... } k = l e n g t h ( j ) ; i f ( j < 3) {... } k = l e n g t h ( j ) ; f ( ) ; i f ( k < x ) {... } Typ 1 Typ 2 zwei Typ 2 bzw. ein Typ 2 mit inkonsistenter Umbenennung Typ 3 x = x + 1 ; x++; primitiver Typ 4 Rainer Koschke (Univ. Bremen) Vorlesung Software-Reengineering WS 2005/ / 49 Granularität der Klone Das Ziel der Klonerkennung bestimmt Granularität. Je feiner die Granularität, desto höher der Aufwand. Sequenzen von Anweisungen Beseitigung von manuellem Inlining. Kapselung von Operationen in Unterprogrammen. Unterprogramme und Datenstrukturen Identifikation von Kandidaten für die Einführung generischer Konzepte. Vereinigung von Varianten. Objektifizierung Pakete Wie oben, jedoch im größeren Stil. Säuberung nach gescheiterter Versionskontrolle. Rainer Koschke (Univ. Bremen) Vorlesung Software-Reengineering WS 2005/ / 49

7 Ansätze zur Klonerkennung Die Ansätze unterscheiden sich in Granularität des berücksichtigten Wissens Anweisungssequenzen Funktionen Pakete und der Abstraktionsebene der Analyse Text Token-Ebene Syntax quantifizierbare Merkmale Programmabhängigkeiten Rainer Koschke (Univ. Bremen) Vorlesung Software-Reengineering WS 2005/ / 49 Existierende Ansätze Anzahl unterschiedlicher Zeilen des Unix-Diff-Programmes Pattern Matching auf Ebene der Lexeme (Baker) Matching auf dem abstrakten Syntaxbaum (Baxter et al.) Vergleich quantifizierter Merkmale (Metriken) des Codes (Mayrand et al.) Rainer Koschke (Univ. Bremen) Vorlesung Software-Reengineering WS 2005/ / 49

8 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 können zu größeren Klonen zusammengefasst werden. Codefragmente müssen nicht direkt zusammenhängend sein. Rainer Koschke (Univ. Bremen) Vorlesung Software-Reengineering WS 2005/ / 49 Verfahren nach Baker (1995) Verfahren basiert auf Lexemen. 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 2005/ / 49

9 Parameter-String Für jede Codezeile wird eine Zeichenkette aus Parametersymbolen und Nichtparametersymbolen generiert (so genannter Parameter-String oder P-String): Struktur der Zeile 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 2005/ / 49 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 2005/ / 49

10 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$ prev(s 5 ) = α0α2$ prev(s 6 ) = 0α2$ prev(s 7 ) = α0$ prev(s 8 ) = 0$ prev(s 9 ) = $ Rainer Koschke (Univ. Bremen) Vorlesung Software-Reengineering WS 2005/ / 49 P-Suffix-Baum Klone lassen sich im Baum durch Verzweigungen identifizieren. (Benutzer legt die Mindestzeilenlänge der Klone fest; entspricht der Anzahl von Funktoren). Gefundene P-Matches werden, wenn möglich, zusammengefasst: Modi: nur wenn d 1 = d 2 wenn max(d 1, d 2 ) Θ Rainer Koschke (Univ. Bremen) Vorlesung Software-Reengineering WS 2005/ / 49

11 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). Rainer Koschke (Univ. Bremen) Vorlesung Software-Reengineering WS 2005/ / 49 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 umgebrochen 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 2005/ / 49

12 AST-Matching Ansatz basierend auf abstrakten Syntaxbäumen (ASTs): vergleiche jeden Teilbaum mit jedem anderen Teilbaum auf Gleichheit Rainer Koschke (Univ. Bremen) Vorlesung Software-Reengineering WS 2005/ / 49 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 2005/ / 49

13 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 2005/ / 49 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 2005/ / 49

14 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 2005/ / 49 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 2005/ / 49

15 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 2005/ / 49 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 2005/ / 49

16 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 2005/ / 49 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 2005/ / 49

17 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 2005/ / 49 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 2005/ / 49

18 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 2005/ / 49 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 2005/ / 49

19 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 2005/ / 49 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 2005/ / 49

20 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 2005/ / 49 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 2005/ / 49

21 Vergleich von Klonerkennungstechniken (Bellon 2003) Teilnehmer Referenz Ansatz Brenda S. Baker (Baker 1995) Suffix-Tree, tokenbasiert Ira D. Baxter (Baxter u. a. 1998) Subtree-Matching im AST Toshihiro Kamiya (Kamiya u. a. 2002) Eingabetransformation, Suffix-Tree, tokenbasiert Jens Krinke (Krinke 2001) Program Dependence Graph Ettore Merlo (Mayrand u. a. 1996) Funktions-Metriken + Token-Vergleich Matthias Rieger (Ducasse u. a. 1999) Pattern Matching auf Dotplots (textuell) Rainer Koschke (Univ. Bremen) Vorlesung Software-Reengineering WS 2005/ / 49 Untersuchte Software-Systeme Projekt Sprache Größe Kandidaten Referenzen (SLOC) weltab C 11K cook C 80K snns C 115K postgresql C 235K netbeans-javadoc Java 19K eclipse-ant Java 35K eclipse-jdtcore Java 148K j2sdk1.4.0-javax-swing Java 204K Rainer Koschke (Univ. Bremen) Vorlesung Software-Reengineering WS 2005/ / 49

22 Beispiel SNNS: Kandidaten Typ 3 Typ 2 Typ 1 unbestimmt Orakel Baker Baxter Kamiya Kamiya (vol.) Krinke Merlo Merlo (vol.) Rieger Rainer Koschke (Univ. Bremen) Vorlesung Software-Reengineering WS 2005/ / 49 Beispiel SNNS: Gefundene Referenzen Typ 3 Typ Typ OK Good OK Good OK Good OK Good OK Good OK Good OK Good OK Good OK Good Orakel Baker Baxter Kamiya Kamiya (vol.) Krinke Merlo Merlo (vol.) Rieger Rainer Koschke (Univ. Bremen) Vorlesung Software-Reengineering WS 2005/ / 49

23 Beispiel SNNS: Recall und Precision Baker Baxter Kamiya Kamiya (vol.) Krinke Merlo Merlo (vol.) Rieger Typ 3 Typ 2 Typ 1 insgesamt Rainer Koschke (Univ. Bremen) Vorlesung Software-Reengineering WS 2005/ / 49 Zusammenfassung Baker Baxter Kamiya Krinke Merlo Rieger Ansatz Token AST Token PDG Metrik Token Erkennt Typ 1, 2 1, 2 1, 2, 3 3 1, 2, 3 1, 2, 3 Klassifiziert 1, 2 1, 2 3 1, 2, 3 Geschwind ? Speicher ? Recall Precision Versteckte 42 % 28 % 46 % 4 % 24 % 31 % Rainer Koschke (Univ. Bremen) Vorlesung Software-Reengineering WS 2005/ / 49

24 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 zu Grunde? Diskutiere die Annahme. Rainer Koschke (Univ. Bremen) Vorlesung Software-Reengineering WS 2005/ / 49 1 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 2 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 , , Bellon 2003 Bellon, Stefan: Vergleich von Klonerkennungstechniken. Fakultät Informatik, Universität Stuttgart, Deutschland, Diplomarbeit, 2003 Rainer Koschke (Univ. Bremen) Vorlesung Software-Reengineering WS 2005/ / 49

25 4 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), 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 Krinke 2001 Krinke, Jens: Identifying Similar Code with Program Dependence Graphs. In: Working Conference on Reverse Engineering, 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 Rainer Koschke (Univ. Bremen) Vorlesung Software-Reengineering WS 2005/ / 49

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 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 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 2009/10 Überblick I 1 Klonerkennung Techniken

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

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 2011/12 Überblick I Refactoring Code-Transformationen:

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

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

Quelltextähnlichkeit

Quelltextähnlichkeit Quelltextähnlichkeit Tobias Jamin Universität Bremen Fachbereich 3 Mathematik und Informatik tjamin@tzi.de Abstrakt Programm-Transformationen ändern den Quelltext eines Programms. Bei den Transformationen

Mehr

Software Entwicklung 1

Software Entwicklung 1 Software Entwicklung 1 Annette Bieniusa / Arnd Poetzsch-Heffter AG Softech FB Informatik TU Kaiserslautern Fallstudie: Arithmetische Ausdrücke Bieniusa/Poetzsch-Heffter Software Entwicklung 1 2/ 33 Überblick

Mehr

Software Entwicklung 1. Fallstudie: Arithmetische Ausdrücke. Rekursive Klassen. Überblick. Annette Bieniusa / Arnd Poetzsch-Heffter

Software Entwicklung 1. Fallstudie: Arithmetische Ausdrücke. Rekursive Klassen. Überblick. Annette Bieniusa / Arnd Poetzsch-Heffter Software Entwicklung 1 Annette Bieniusa / Arnd Poetzsch-Heffter Fallstudie: Arithmetische Ausdrücke AG Softech FB Informatik TU Kaiserslautern Bieniusa/Poetzsch-Heffter Software Entwicklung 1 2/ 33 Überblick

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

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

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

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

2. Programmierung in C

2. Programmierung in C 2. Programmierung in C Inhalt: Überblick über Programmiersprachen, Allgemeines zur Sprache C C: Basisdatentypen, Variablen, Konstanten, Operatoren und Ausdrücke Anweisungen und Kontrollstrukturen (Steuerfluss)

Mehr

2. Programmierung in C

2. Programmierung in C 2. Programmierung in C Inhalt: Überblick über Programmiersprachen, Allgemeines zur Sprache C C: Basisdatentypen, Variablen, Konstanten, Operatoren und Ausdrücke Anweisungen und Kontrollstrukturen (Steuerfluss)

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

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

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

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

Compilerbau für die Common Language Run-Time

Compilerbau für die Common Language Run-Time Compilerbau für die Common Language Run-Time Syntax und Semantik von Programmiersprachen 2 Compilerbau Sprachbeschreibung vs. Implementierung Beschreibung: formale oder informale (engl.) Lexik, Syntax,

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

Programmierpraktikum

Programmierpraktikum TECHNISCHE UNIVERSITÄT MÜNCHEN FAKULTÄT FÜR INFORMATIK Praktikum: Grundlagen der Programmierung Programmierpraktikum Woche 04 (17.11.2016) Stefan Berktold s.berktold@tum.de PRÄSENZAUFGABEN Heutige Übersicht

Mehr

Vorlesung Software-Reengineering

Vorlesung Software-Reengineering Vorlesung Software-Reengineering Prof. Dr. R. Koschke 1 D. Simon 2 1 Arbeitsgruppe Softwaretechnik Fachbereich Mathematik und Informatik Universität Bremen 2 Institut für Software Technologie Fakultät

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

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

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

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

Allgemeines. Verschiedene Sprachkonzepte C-Sprachfamilie C-ähnliche Programmiersprachen Allgemeines zu C. #include <stdio.h>

Allgemeines. Verschiedene Sprachkonzepte C-Sprachfamilie C-ähnliche Programmiersprachen Allgemeines zu C. #include <stdio.h> Allgemeines Verschiedene Sprachkonzepte C-Sprachfamilie C-ähnliche Programmiersprachen Allgemeines zu C #include int main() { printf( hello world\n ); return 0; } Peter Sobe 1 Verschiedene Sprachkonzepte

Mehr

Studiengang Informatik der FH Gießen-Friedberg. Sequenz-Alignment. Jan Schäfer. WS 2006/07 Betreuer: Prof. Dr. Klaus Quibeldey-Cirkel

Studiengang Informatik der FH Gießen-Friedberg. Sequenz-Alignment. Jan Schäfer. WS 2006/07 Betreuer: Prof. Dr. Klaus Quibeldey-Cirkel Studiengang Informatik der FH Gießen-Friedberg Sequenz-Alignment Jan Schäfer WS 2006/07 Betreuer: Prof. Dr. Klaus Quibeldey-Cirkel Überblick Einführung Grundlagen Wann ist das Merkmal der Ähnlichkeit erfüllt?

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

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

Kapitel 12: Induktive

Kapitel 12: Induktive Kapitel 12: Induktive Datenstrukturen Felix Freiling Lehrstuhl für Praktische Informatik 1 Universität Mannheim Vorlesung Praktische Informatik I im Herbstsemester 2009 Folien nach einer Vorlage von H.-Peter

Mehr

Kapitel 2. Methoden zur Beschreibung von Syntax

Kapitel 2. Methoden zur Beschreibung von Syntax 1 Kapitel 2 Methoden zur Beschreibung von Syntax Grammatik, die sogar Könige zu kontrollieren weiß... aus Molière, Les Femmes Savantes (1672), 2. Akt 2 Ziele Zwei Standards zur Definition der Syntax von

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

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

Repetitorium Informatik (Java)

Repetitorium Informatik (Java) Repetitorium Informatik (Java) Tag 6 Lehrstuhl für Informatik 2 (Programmiersysteme) Übersicht 1 Klassen und Objekte Objektorientierung Begrifflichkeiten Deklaration von Klassen Instanzmethoden/-variablen

Mehr

2. Programmierung in C

2. Programmierung in C 2. Programmierung in C Inhalt: Überblick über Programmiersprachen, Allgemeines zur Sprache C C: Basisdatentypen, Variablen, Konstanten, Operatoren und Ausdrücke Anweisungen und Kontrollstrukturen (Steuerfluss)

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

Gedächtnis. Während der Abarbeitung eines Algorithmus müssen sich Dinge gemerkt werden bzw. auf Dingen wird gerechnet. Zugriff.

Gedächtnis. Während der Abarbeitung eines Algorithmus müssen sich Dinge gemerkt werden bzw. auf Dingen wird gerechnet. Zugriff. Gedächtnis Während der Abarbeitung eines Algorithmus müssen sich Dinge gemerkt werden bzw. auf Dingen wird gerechnet Hauptspeicher 38265 Telefon CPU Gedächtnis Vorlesender Zugriff Verarbeitungseinheit

Mehr

Kapitel 1: Informationsverarbeitung durch Programme

Kapitel 1: Informationsverarbeitung durch Programme LUDWIG- MAXIMILIANS- UNIVERSITY MUNICH DEPARTMENT INSTITUTE FOR INFORMATICS Skript zur Vorlesung: Einführung in die Informatik: Systeme und Anwendungen Sommersemester 2009 Kapitel 1: Informationsverarbeitung

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

Programmverstehen 3: Detailliertes Verständnis. Dr. Thorsten Arendt Marburg, 10. Dezember 2015

Programmverstehen 3: Detailliertes Verständnis. Dr. Thorsten Arendt Marburg, 10. Dezember 2015 Programmverstehen 3: Detailliertes Verständnis Dr. Thorsten Arendt Marburg, 10. Dezember 2015 Re-Engineering Patterns [Demeyer et al.] 2 Software-Evolution WS 2015/2016 Überblick Probleme Auch wenn das

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

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

FAKULTÄT FÜR INFORMATIK

FAKULTÄT FÜR INFORMATIK TECHNISCHE UNIVERSITÄT MÜNCHEN FAKULTÄT FÜR INFORMATIK Lehrstuhl für Sprachen und Beschreibungsstrukturen WS 2008/09 Einführung in die Informatik 2 Übungsblatt 10 Prof. Dr. Helmut Seidl, T. M. Gawlitza,

Mehr

Übungs- und Praktikumsaufgaben zur Systemprogrammierung Dipl.-Ing. H. Büchter (Lehrbeauftragter) FH-Dortmund WS 2001/2002 / SS 2002

Übungs- und Praktikumsaufgaben zur Systemprogrammierung Dipl.-Ing. H. Büchter (Lehrbeauftragter) FH-Dortmund WS 2001/2002 / SS 2002 1. Stellen Sie die schrittweise Verbesserung eines Compilers durch das Bootstrap- Verfahren mit Hilfe von T-Diagrammen dar. Gegeben ist ein auf der Maschine M lauffähiger Compiler C 1, der in S geschrieben

Mehr

2 Eine einfache Programmiersprache

2 Eine einfache Programmiersprache 2 Eine einfache Programmiersprache Eine Programmiersprache soll Datenstrukturen anbieten Operationen auf Daten erlauben Kontrollstrukturen zur Ablaufsteuerung bereitstellen Als Beispiel betrachten wir

Mehr

Beispiel. Problem: mehrteilige Nachnamen (von Goethe, Mac Donald, Di Caprio)

Beispiel. Problem: mehrteilige Nachnamen (von Goethe, Mac Donald, Di Caprio) Beispiel Beispiel: Namensliste konvertieren (Karl Egon Meier Meier, Karl Egon). s/(.*) (.*)/$2, $1/; Problem: mehrteilige Nachnamen (von Goethe, Mac Donald, Di Caprio) s/(.*) (.*)/$2, $1/; s/(.*) ([a-z]+

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

Das diesem Dokument zugrundeliegende Vorhaben wurde mit Mitteln des Bundesministeriums für Bildung und Forschung unter dem Förderkennzeichen

Das diesem Dokument zugrundeliegende Vorhaben wurde mit Mitteln des Bundesministeriums für Bildung und Forschung unter dem Förderkennzeichen Das diesem Dokument zugrundeliegende Vorhaben wurde mit Mitteln des Bundesministeriums für Bildung und Forschung unter dem Förderkennzeichen 16OH21005 gefördert. Die Verantwortung für den Inhalt dieser

Mehr

Einführung in C. EDV1-04C-Einführung 1

Einführung in C. EDV1-04C-Einführung 1 Einführung in C 1 Helmut Erlenkötter C Programmieren von Anfang an Rowohlt Taschenbuch Verlag ISBN 3-4993 499-60074-9 19,90 DM http://www.erlenkoetter.de Walter Herglotz Das Einsteigerseminar C++ bhv Verlags

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

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 27 Einstieg in die Informatik mit Java Methoden / Funktionen Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 27 1 Überblick 2 Zweck von Methoden 3 Methodendefinition

Mehr

Inhalte des Moduls Programmieren 1

Inhalte des Moduls Programmieren 1 Inhalte des Moduls Programmieren 1 Einführung: Algorithmus und Programm, Programmiersprache Erste Schritte in Java Grundlagen der Sprache: Datentypen, Ausdrücke und Anweisungen, imperative Programmierung

Mehr

Einleitung Typsystem Typisierung Zusammenfassung Literatur. Typisierung. Effiziente Programmierung. Thomas Schnieders

Einleitung Typsystem Typisierung Zusammenfassung Literatur. Typisierung. Effiziente Programmierung. Thomas Schnieders Typisierung Effiziente Programmierung Thomas Schnieders Fachbereich Informatik Fakultät für Mathematik, Informatik und Naturwissenschaften Universität Hamburg 2018-04-26 Thomas Schnieders Typisierung 1

Mehr

SE2-6. Übung Johannes Bürdek

SE2-6. Übung Johannes Bürdek SE2-6. Übung 11.12.2014 Johannes Bürdek johannes.buerdek@es.tu-darmstadt.de Fragen und Support: se2@es.tu-darmstadt.de oder ins Forum: https://moodle.tu-darmstadt.de/mod/forum/view.php?id=56674 ES Real-Time

Mehr

Codegenerierung für Basisblöcke (1)

Codegenerierung für Basisblöcke (1) Codegenerierung für Basisblöcke (1) Basisblock (Grundblock): Teil des Kontrollflussgraphen, der keine Verzweigungen (Sprünge) oder Vereinigungen (Label) enthält keine Zyklen: bessere Optimierung möglich

Mehr

Objektorientierte Programmierung. Kapitel 3: Syntaxdiagramme

Objektorientierte Programmierung. Kapitel 3: Syntaxdiagramme Stefan Brass: OOP (Java), 3. 1/31 Objektorientierte Programmierung Kapitel 3: Stefan Brass Martin-Luther-Universität Halle-Wittenberg Wintersemester 2014/15 http://www.informatik.uni-halle.de/ brass/oop14/

Mehr

2 Eine einfache Programmiersprache

2 Eine einfache Programmiersprache 2 Eine einfache Programmiersprache Eine Programmiersprache soll Datenstrukturen anbieten Operationen auf Daten erlauben Kontrollstrukturen zur Ablaufsteuerung bereitstellen Als Beispiel betrachten wir

Mehr

2.2 Syntax, Semantik und Simulation

2.2 Syntax, Semantik und Simulation 2.2 Syntax, Semantik und Simulation Ein Java Programm ist eine Folge von Buchstaben. Nicht jede Folge von Buchstaben ist ein korrektes Java Programm! Wie kann man alle korrekten Java Programme beschreiben?

Mehr

4.4 Imperative Algorithmen Prozeduren

4.4 Imperative Algorithmen Prozeduren 4.4.2 Prozeduren Der Wert eines Ausdrucks u in Zustand z Z lässt sich damit auch leicht definieren (jetzt W Z statt W σ ) Dazu erweitern wir die rekursive Definition von Folie 57 (Wert eines Ausdrucks):

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

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

Vorkurs C++ Programmierung

Vorkurs C++ Programmierung Vorkurs C++ Programmierung Funktionen Rückblick Operatoren logische Verknüpfungen Zusammengesetzte Operatoren ( Zuweisungsoperatoren ) Kontrollstrukturen Bedingte Anweisungen (if-abfrage, switch-konstrukt)

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

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

Funktionen in Matlab. Nutzerdefinierte Funktionen können in.m-datei gespeichert werden

Funktionen in Matlab. Nutzerdefinierte Funktionen können in.m-datei gespeichert werden Funktionen in Matlab Zusammenfassung von Befehlssequenzen als aufrufbare/wiederverwendbare Funktionen in einem Programmblock mit festgelegter Schnittstelle (Signatur) Derartige prozedurale Programmierung

Mehr

13. Bäume: effektives Suchen und Sortieren

13. Bäume: effektives Suchen und Sortieren 13. Bäume: effektives Suchen und Sortieren Java-Beispiele: Baum.java Traverse.java TraverseTest.java Version: 25. Jan. 2016 Schwerpunkte Aufgabe und Vorteile von Bäumen Sortieren mit Bäumen Ausgabealgorithmen:

Mehr

Inhaltsverzeichnis. Grundlagen und Einführung (1. Band) 1

Inhaltsverzeichnis. Grundlagen und Einführung (1. Band) 1 Inhaltsverzeichnis Grundlagen und Einführung (1. Band) 1 1 Einleitung und Vorwort 1 1.1 Vorwort zur 13. Auflage....................... 1 1.2 Vorwort zur 10. Auflage....................... 1 1.3 Voraussetzungen...........................

Mehr

Inhaltsverzeichnis 1 Der objektorientierte Ansatz 2 Elementare Objekte und Ausdrücke

Inhaltsverzeichnis 1 Der objektorientierte Ansatz 2 Elementare Objekte und Ausdrücke Inhaltsverzeichnis 1 Der objektorientierte Ansatz... 1 1.1 Ein einführendes Beispiel...2 1.1.1 Aktive Objekte...4 1.1.2 Klassifikation...4 1.1.3 Datenkapselung...6 1.2 OOP im Überblick...6 1.3 Programmaufbau...7

Mehr

Tutorium 2. Strings. Skript zur Vorlesung Einführung in die Programmierung

Tutorium 2. Strings. Skript zur Vorlesung Einführung in die Programmierung LUDWIG- MAXIMILIANS- UNIVERSITY MUNICH DEPARTMENT INSTITUTE FOR INFORMATICS DATABASE Tutorium 2 Strings Skript zur Vorlesung Einführung in die Programmierung im Wintersemester 2012/13 Ludwig-Maximilians-Universität

Mehr

2 Eine einfache Programmiersprache

2 Eine einfache Programmiersprache 2 Eine einfache Programmiersprache Eine Programmiersprache soll Datenstrukturen anbieten Operationen auf Daten erlauben Kontrollstrukturen zur Ablaufsteuerung bereitstellen Als Beispiel betrachten wir

Mehr

Kapitel 1: Informationsverarbeitung durch Programme

Kapitel 1: Informationsverarbeitung durch Programme LUDWIG- MAXIMILIANS- UNIVERSITY MUNICH DEPARTMENT INSTITUTE FOR INFORMATICS Skript zur Vorlesung: Einführung in die Informatik: Systeme und Anwendungen Sommersemester 2018 Kapitel 1: Informationsverarbeitung

Mehr

13. Bäume: effektives Suchen und Sortieren

13. Bäume: effektives Suchen und Sortieren Schwerpunkte Aufgabe und Vorteile von Bäumen 13. Bäume: effektives Suchen und Sortieren Java-Beispiele: Baum.java Traverse.java TraverseTest.java Sortieren mit Bäumen Ausgabealgorithmen: - Preorder - Postorder

Mehr

Elementare Konzepte von

Elementare Konzepte von Elementare Konzepte von Programmiersprachen Teil 2: Anweisungen (Statements) Kapitel 6.3 bis 6.7 in Küchlin/Weber: Einführung in die Informatik Anweisungen (statements) in Java Berechnung (expression statement)

Mehr

Programmieren I + II Regeln der Code-Formatierung

Programmieren I + II Regeln der Code-Formatierung Technische Universität Braunschweig Dr. Werner Struckmann Institut für Programmierung und Reaktive Systeme WS 2012/2013, SS 2013 Programmieren I + II Regeln der Code-Formatierung Die hier vorgestellten

Mehr

Programmieren in Java -Eingangstest-

Programmieren in Java -Eingangstest- Programmieren in Java -Eingangstest- Nummer: 1. Studiengang: Informatik B.Sc. Informatik M.Sc. ESE B.Sc. ESE M.Sc. Sonstiges: Fachsemester: Bitte Fragen, die Sie nicht beantworten können unbedingt mit

Mehr

COPE COuPled Evolution of metamodels and models

COPE COuPled Evolution of metamodels and models COPE COuPled Evolution of metamodels and models Diplomarbeit in Zusammenarbeit mit der BMW Car IT (Betreuer: Elmar Jürgens, Sebastian Benz) Markus Herrmannsdörfer 7. November 2007 Perlen der Informatik

Mehr

Programmieren I + II Regeln der Code-Formatierung

Programmieren I + II Regeln der Code-Formatierung Technische Universität Braunschweig Dr. Werner Struckmann Institut für Programmierung und Reaktive Systeme WS 2016/2017, SS 2017 Programmieren I + II Regeln der Code-Formatierung In diesem Dokument finden

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 I 1 Arten von Reengineering-Projekten

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

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

Funktionale Programmierung und Typtheorie

Funktionale Programmierung und Typtheorie Funktionale Programmierung und Typtheorie 5. Fortgeschrittene Konzepte 5.1 Komprehensionen 5.2 Partielle Applikationen 5.3 Strikte und nichtstrikte Funktionen 5.4 Unendliche Datenstrukturen und verzögerte

Mehr

Grundlagen der theoretischen Informatik

Grundlagen der theoretischen Informatik Grundlagen der theoretischen Informatik Kurt Sieber Fakultät IV, Department ETI Universität Siegen SS 2013 Vorlesung vom 09.04.2013 Inhalt der Vorlesung Teil I: Automaten und formale Sprachen (Kurt Sieber)

Mehr

2. Programmierung in C

2. Programmierung in C 2. Programmierung in C Inhalt: Überblick über Programmiersprachen, Allgemeines zur Sprache C C: Basisdatentypen, Variablen, Konstanten, Operatoren und Ausdrücke Anweisungen und Kontrollstrukturen (Steuerfluss)

Mehr

Java I Vorlesung Imperatives Programmieren

Java I Vorlesung Imperatives Programmieren Java I Vorlesung 2 Imperatives Programmieren 3.5.2004 Variablen -- Datentypen -- Werte Operatoren und Ausdrücke Kontrollstrukturen: if Imperatives Programmieren Im Kern ist Java eine imperative Programmiersprache.

Mehr

Informatik II, SS 2016

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

Mehr

Kap. 6.5: Minimale Spannbäume ff

Kap. 6.5: Minimale Spannbäume ff Kap. 6.: Minimale Spannbäume ff Professor Dr. Karsten Klein Lehrstuhl für Algorithm Engineering, LS11 Fakultät für Informatik, TU Dortmund 20. VO 2. TEIL DAP2 SS 2009 2. Juli 2009 SS08 1 Überblick 6.:

Mehr