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 2010/11 Überblick I Klonerkennung

2 Techniken zur Klonerkennung: Techniken zur Klonerkennung I 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 Techniken zur Klonerkennung: 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

3 Techniken zur Klonerkennung: Klonerkennung Lernziele Varianten der Klonerkennung (Erkennung duplizierten Codes) Bezug zu Abstraktionsebenen von Programmdarstellungen Kontext Beseitigung von Redundanz auf Codierungsebene erleichtert nachfolgende Reengineering-Aktivitäten Techniken zur Klonerkennung: Hintergrund 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)

4 Techniken zur Klonerkennung: Hintergrund Klontypen: Typ 1 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 } 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 } Techniken zur Klonerkennung: Hintergrund Klontypen: Typ 2 1 r e t u r n TRUE ; 2 } 3 4 / r e a d operand #0 ( a l w a y s p r e s e n t ) / 5 6 thisop >op [ 0 ]. t y p e 7 = v a a r g ( ap, a 3 a r g u m e n t t y p e ) ; 8 9 i f ( ( thisop >op [ 0 ]. t y p e == ocfloat ) 10 ( thisop >op [ 0 ]. t y p e & 1 6 ) ) // i n d e x e d 11 { 12 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 ) ; 13 thisop >op [ 0 ]. v a l. f [1]= v a a r g ( ap, INT32 ) 12 ; thisop >op [ 2 ]. v a l. f [1]= v a a r g ( ap, INT32 ) ; 14 } 15 e l s e 16 thisop >op [ 0 ]. v a l. l = v a a r g ( ap, INT32 ) 15 ; thisop >op [ 2 ]. v a l. l = v a a r g ( ap, INT32 ) ; / r e a d 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 ]. t y p e 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 { 13 } 14 e l s e 16 } 17 e l s e 18 thisop >op [ 2 ]. t y p e = onone ;

5 Techniken zur Klonerkennung: Hintergrund Klontypen: Typ 3 1 r e t u r n FALSE ; 2 } 3 4 i f (! parse ( ) ) 5 { 6 p r i n t e r r o r ( s t d o u t, 0 ) ; 7 r e t u r n FALSE ; 8 } 9 10 fclose( fp ) ; i f ( d e b u g f l a g ) 13 { 14 p r i n t f ( result of parser ) ; 15 i f (! p r i n t t r e e ( FALSE ) ) 16 { 17 p r i n t e r r o r ( s t d o u t, 0 ) ; 18 r e t u r n FALSE ; 19 } 20 } i f ( v e r b o s e f l a g d e b u g f l a g ) 23 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 r e t u r n FALSE ; 8 } 9 10 i f ( d e b u g f l a g ) 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 r e t u r n FALSE ; 17 } 18 } i f ( g e n c o d e f l a g ) 21 { 22 i f ( ( f p = f o p e n ( o u t f i l e n a m e, wt ))==NULL) 23 { 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.

6 Techniken zur Klonerkennung: Hintergrund 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... Techniken zur Klonerkennung: Folgen 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...

7 Techniken zur Klonerkennung: Folgen 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) Techniken zur Klonerkennung: Übersicht zu den Ansätzen zur Klonerkennung Nächster Abschnitt Wie können Klone gefunden werden?

8 Techniken zur Klonerkennung: Übersicht zu den Ansätzen zur Klonerkennung 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 Techniken zur Klonerkennung: Übersicht zu den Ansätzen zur Klonerkennung 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ß?

9 Techniken zur Klonerkennung: Übersicht zu den Ansätzen zur Klonerkennung 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 Dot-Plot: file2.c file1.c file1.c file2.c

10 Techniken zur Klonerkennung: Übersicht zu den Ansätzen zur Klonerkennung Wie können Klone gefunden werden? Vergleich von... Tokens Type-1/-2-Klone: Suffixbaum für parametrisierte Zeichenketten pro Zeile (Baker 1995) Type-3: Zusammenfassung von Typ-1/2-Klonen mit Lücken (Baker 1995). pro Token mit Normalisierung des Tokenstroms (Kamiya u. a. 2002) lexikalische Klone, die vollständig in syntaktischen Einheiten enthalten sind: lexikalisches Postprocessing (Higo u. a. 2002) lexikalisches Preprocessing (Synytskyy u. a. 2003; Cordy u. a. 2004) Suffixbaum: a a b x y a a b $ a b x y a a b $ a b $ x y a a b $ b $ x y a a b $ $ x y a a b $ y a a b $ $

11 Techniken zur Klonerkennung: Übersicht zu den Ansätzen zur Klonerkennung 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) Techniken zur Klonerkennung: Übersicht zu den Ansätzen zur Klonerkennung 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

12 Techniken zur Klonerkennung: Übersicht zu den Ansätzen zur Klonerkennung 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 + j ; p r o d u c t = p r o d u c t i ; p = p j ; 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 = 1 sum = 0 control influence set use i = i + 1 entry product = product * i sum = sum + i read(m) j = 1 p = 1 s = 0 j = j + 1 p = p * j s = s + j i <= n write(sum) write(product) j <= m write(s) write(p) Techniken zur Klonerkennung: Lexikalische Verfahren 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

13 Techniken zur Klonerkennung: Lexikalische Verfahren 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 Techniken zur Klonerkennung: Lexikalische Verfahren 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

14 Techniken zur Klonerkennung: Lexikalische Verfahren 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 ) = $ α0 β0α0α2$ $ β2α0α2$ $ α2$ Techniken zur Klonerkennung: Lexikalische Verfahren 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

15 Techniken zur Klonerkennung: Lexikalische Verfahren Typ-3-Erkennung Gefundene P-Matches werden, wenn möglich, zusammengefasst: A A d 1 B d 2 B Modi: nur wenn d 1 = d 2 wenn max(d 1, d 2 ) Θ Techniken zur Klonerkennung: Lexikalische Verfahren 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)

16 Techniken zur Klonerkennung: Lexikalische Verfahren 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) Techniken zur Klonerkennung: Syntaxbasierte Verfahren AST-Matching Ansatz basierend auf abstrakten Syntaxbäumen (ASTs): vergleiche jeden Teilbaum mit jedem anderen Teilbaum auf Gleichheit if if cond else cond else then then = call := = call := left right lhs rhs left right lhs rhs a b x y z q t s

17 Techniken zur Klonerkennung: Syntaxbasierte Verfahren 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. Techniken zur Klonerkennung: Syntaxbasierte Verfahren 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

18 Techniken zur Klonerkennung: Syntaxbasierte Verfahren Skalierungsproblem und Erkennung der Klontypen Bäume werden auf Gleichheit): Ähnlichkeit verglichen (nicht auf 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. Techniken zur Klonerkennung: Syntaxbasierte Verfahren 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.

19 Techniken zur Klonerkennung: Syntaxbasierte Verfahren 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 ; Techniken zur Klonerkennung: Syntaxbasierte Verfahren 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.

20 Techniken zur Klonerkennung: Syntaxbasierte Verfahren 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 ; Techniken zur Klonerkennung: Syntaxbasierte Verfahren 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.

21 Techniken zur Klonerkennung: Syntaxbasierte Verfahren 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 ; Techniken zur Klonerkennung: Syntaxbasierte Verfahren 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

22 Techniken zur Klonerkennung: Metrikbasierte Verfahren 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. Techniken zur Klonerkennung: Metrikbasierte Verfahren 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

23 Techniken zur Klonerkennung: Metrikbasierte Verfahren 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 Techniken zur Klonerkennung: Metrikbasierte Verfahren 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

24 Techniken zur Klonerkennung: Metrikbasierte Verfahren 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 Techniken zur Klonerkennung: Metrikbasierte Verfahren 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.

25 Techniken zur Klonerkennung: Metrikbasierte Verfahren 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 2 ) Kennzahlen(Code 1 ) = Code 1 Code 2 Kennzahlen(Code 2 ) Kennzahlen(Code 1 ) Kennzahlen(Code 1 ) = Kennzahlen(Code 2 ) Code 1 = Code 2? Kennzahlen(Code 1 ) Kennzahlen(Code 2 ) Code 1 Code 2??? Techniken zur Klonerkennung: Vergleich von Techniken zur Klonerkennung Vergleich von Klonerkennungstechniken (Bellon 2003; Bellon u. a. 2007) Teilnehmer Matthias Rieger Brenda S. Baker Toshihiro Kamiya Ira D. Baxter Ettore Merlo Jens Krinke Ansatz 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

26 Techniken zur Klonerkennung: Vergleich von Techniken zur Klonerkennung 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 % Techniken zur Klonerkennung: Vergleich von Techniken zur Klonerkennung 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 lloyd/tildealgds/tree/ Suffix/ und suffixt/suffixt.htm: Erklärungen, Beispiele, Referenzen und Algorithmen Koschke u. a. (2006) verwenden Suffixbäume für AST-basierte Erkennung

27 McCreight (1976) stellt einen Algorithmus zur Konstruktion von Suffix-Bäumen für Zeichenketten vor (als Verbesserung von Weimers Algorithmus), der lineare Zeit und linearen Speicheraufwand (relativ zur Länge der Zeichenkette) benötigt. 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 darstellt, die für das korrekte Funktionieren von McCreights Algorithmus Voraussetzung ist). lloyd/tildealgds/tree/suffix/ und geben Erklärungen, Beispiele, Referenzen und Algorithmen an. Techniken zur Klonerkennung: Wiederholungsfragen 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.

28 Techniken zur Klonerkennung: 1 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 3 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 , , Techniken zur Klonerkennung: 4 Bellon 2003 Bellon, Stefan: Vergleich von Klonerkennungstechniken. Fakultät Informatik, Universität Stuttgart, Deutschland, Diplomarbeit, 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 7 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. 1 12

29 Techniken zur Klonerkennung: 8 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 Techniken zur Klonerkennung: 11 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 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, 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

30 Techniken zur Klonerkennung: 15 Kontogiannis 1997 Kontogiannis, K.: Evaluation Experiments on the Detection of Programming Patterns Using Software Metrics. In: Working Conference on Reverse Engineering, 1997, S 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 Techniken zur Klonerkennung: 19 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 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

31 Techniken zur Klonerkennung: 23 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, 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 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: IEEE International Workshop on Source Code Analysis and Manipulation, 2004, S Techniken zur Klonerkennung: 28 Yang 1991 Yang, Wuu: Identifying Syntactic Differences Between Two Programs. In: Software Practice and Experience 21 (1991), Juli, Nr. 7, S

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

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

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

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

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

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

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

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

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

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

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

Vorlesung Software-Reengineering

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

Mehr

Inhalt Software-Metriken Software-Metriken mit Together FindBugs. Software-Metriken. Raimar Lill Matthias Meitner David Föhrweiser Marc Spisländer

Inhalt Software-Metriken Software-Metriken mit Together FindBugs. Software-Metriken. Raimar Lill Matthias Meitner David Föhrweiser Marc Spisländer Lill, Meitner, Föhrweiser, Spisländer FAU Erlangen-Nürnberg Software-Metriken 1 / 24 Software-Metriken Raimar Lill Matthias Meitner David Föhrweiser Marc Spisländer Lehrstuhl für Software Engineering Friedrich-Alexander-Universität

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

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

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 1 Softwarearchitektur

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

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

Statische Programmanalysen für die Qualitätssicherung

Statische Programmanalysen für die Qualitätssicherung die ssicherung Prof. Dr. Rainer Koschke Arbeitsgruppe Softwaretechnik Fachbereich Mathematik und Informatik Universität Bremen http://www.tzi.de/st 7. Juli 2009 Wer wir sind die ssicherung Bereich Softwarequalität

Mehr

Alias Analysis for Exceptions in Java Seminar

Alias Analysis for Exceptions in Java Seminar Alias Analysis for Exceptions in Java Seminar Michal Revucky e0225176@student.tuwien.ac.at 16. Dezember 2004 Zusammenfassung Diese Arbeit schlägt einen Alias Analysis Algorithmus für Java vor, dieser kann

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

Seminar Werkzeuggestütze. tze Softwareprüfung. fung. Slicing. Sebastian Meyer

Seminar Werkzeuggestütze. tze Softwareprüfung. fung. Slicing. Sebastian Meyer Seminar Werkzeuggestütze tze Softwareprüfung fung Slicing Sebastian Meyer Überblick Einführung und Begriffe Static Slicing Dynamic Slicing Erweiterte Slicing-Techniken Fazit 2 Was ist Slicing?? (I) Program

Mehr

Interpreter - Gliederung

Interpreter - Gliederung Institut für Informatik Ludwig-Maximilian Universität Interpreter - Gliederung Programmiersprache Syntax Konkrete Syntax Abstrakter Syntax Baum (Abstrakte Syntax) Parser Syntaktische Struktur einer Sprache

Mehr

Software Engineering in der Praxis

Software Engineering in der Praxis Software Engineering in der Praxis Praktische Übungen Adersberger, Spisländer FAU Erlangen-Nürnberg Software-Metriken 1 / 26 Software-Metriken Josef Adersberger Marc Spisländer Lehrstuhl für Software Engineering

Mehr

14. Rot-Schwarz-Bäume

14. Rot-Schwarz-Bäume Bislang: Wörterbuchoperationen bei binären Suchbäume effizient durchführbar, falls Höhe des Baums klein. Rot-Schwarz-Bäume spezielle Suchbäume. Rot-Schwarz-Baum mit n Knoten hat Höhe höchstens 2 log(n+1).

Mehr

Visualisierung von Software-Klonerkennung

Visualisierung von Software-Klonerkennung Diplomarbeit Visualisierung von Software-Klonerkennung Felix Beckwermert 17. Oktober 2006 Betreut von Rainer Koschke und Martin Gogolla Prof. Dr. Rainer Koschke ist Leiter der Arbeitsgruppe Softwaretechnik

Mehr

Praktikum Funktionale Programmierung Teil 1: Lexen und Parsen

Praktikum Funktionale Programmierung Teil 1: Lexen und Parsen Praktikum Funktionale Programmierung Teil 1: Lexen und Parsen Professur für Künstliche Intelligenz und Softwaretechnologie Sommersemester 2009 Überblick Teil 1: Lexen und Parsen Die Sprache LFP +C Professur

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

SOMA Reverse Engineering

SOMA Reverse Engineering SOMA Reverse Engineering Univ.Prof. Dr. Franz Wotawa Institut für Softwaretechnologie wotawa@ist.tugraz.at Inhalt Was versteht man unter Reverse Engineering? Techniken/Methoden Probleme VU Software Maintenance

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

Security Patterns. Benny Clauss. Sicherheit in der Softwareentwicklung WS 07/08

Security Patterns. Benny Clauss. Sicherheit in der Softwareentwicklung WS 07/08 Security Patterns Benny Clauss Sicherheit in der Softwareentwicklung WS 07/08 Gliederung Pattern Was ist das? Warum Security Pattern? Security Pattern Aufbau Security Pattern Alternative Beispiel Patternsysteme

Mehr

4. Lernen von Entscheidungsbäumen. Klassifikation mit Entscheidungsbäumen. Entscheidungsbaum

4. Lernen von Entscheidungsbäumen. Klassifikation mit Entscheidungsbäumen. Entscheidungsbaum 4. Lernen von Entscheidungsbäumen Klassifikation mit Entscheidungsbäumen Gegeben sei eine Menge von Objekten, die durch /Wert- Paare beschrieben sind. Jedes Objekt kann einer Klasse zugeordnet werden.

Mehr

Informatik II, SS 2014

Informatik II, SS 2014 Informatik II SS 2014 (Algorithmen & Datenstrukturen) Vorlesung 10 (3.6.2014) Binäre Suchbäume I Algorithmen und Komplexität Zusätzliche Dictionary Operationen Dictionary: Zusätzliche mögliche Operationen:

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

Übungen zu Programmierung I - Blatt 8

Übungen zu Programmierung I - Blatt 8 Dr. G. Zachmann A. Greß Universität Bonn Institut für Informatik II 1. Dezember 2004 Wintersemester 2004/2005 Übungen zu Programmierung I - Blatt 8 Abgabe am Mittwoch, dem 15.12.2004, 15:00 Uhr per E-Mail

Mehr

FAKULTÄT FÜR INFORMATIK

FAKULTÄT FÜR INFORMATIK FAKULTÄT FÜR INFORMATIK DER TECHNISCHEN UNIVERSITÄT MÜNCHEN Seminararbeit zum Proseminar Software-Qualität Gapped Clone Detection Marius Daniel Schulz Abstract In diesem Paper wird die Problematik inkonsistenter

Mehr

2. Lernen von Entscheidungsbäumen

2. Lernen von Entscheidungsbäumen 2. Lernen von Entscheidungsbäumen Entscheidungsbäume 2. Lernen von Entscheidungsbäumen Gegeben sei eine Menge von Objekten, die durch Attribut/Wert- Paare beschrieben sind. Jedes Objekt kann einer Klasse

Mehr

Programmierung und Modellierung

Programmierung und Modellierung Programmierung und Modellierung Terme, Suchbäume und Pattern Matching Martin Wirsing in Zusammenarbeit mit Moritz Hammer SS 2009 2 Inhalt Kap. 7 Benutzerdefinierte Datentypen 7. Binärer Suchbaum 8. Anwendung:

Mehr

Seminar "Softwareentwicklung in der Wissenschaft" "Code-Qualität"

Seminar Softwareentwicklung in der Wissenschaft Code-Qualität Seminar "Softwareentwicklung in der Wissenschaft" "Code-Qualität" Johann Weging 8weging@informatik.uni-hamburg.de Arbeitsbereich Wissenschaftliches Rechnen Department Informatik Universität Hamburg 2011-02-09

Mehr

Die Programmiersprache C Eine Einführung

Die Programmiersprache C Eine Einführung Die Programmiersprache C Eine Einführung Christian Gentsch Fakutltät IV Technische Universität Berlin Projektlabor 2. Mai 2014 Inhaltsverzeichnis 1 Einführung Entstehungsgeschichte Verwendung 2 Objektorientiert

Mehr

Informatik II Bäume. Beispiele. G. Zachmann Clausthal University, Germany zach@in.tu-clausthal.de. Stammbaum. Stammbaum. Stammbaum

Informatik II Bäume. Beispiele. G. Zachmann Clausthal University, Germany zach@in.tu-clausthal.de. Stammbaum. Stammbaum. Stammbaum lausthal Beispiele Stammbaum Informatik II. Zachmann lausthal University, ermany zach@in.tu-clausthal.de. Zachmann Informatik - SS 06 Stammbaum Stammbaum / Parse tree, Rekursionsbaum Parse tree, Rekursionsbaum

Mehr

Mining top-k frequent itemsets from data streams

Mining top-k frequent itemsets from data streams Seminar: Maschinelles Lernen Mining top-k frequent itemsets from data streams R.C.-W. Wong A.W.-C. Fu 1 Gliederung 1. Einleitung 2. Chernoff-basierter Algorithmus 3. top-k lossy counting Algorithmus 4.

Mehr

Advanced Slicing of Sequential and Concurrent Programs

Advanced Slicing of Sequential and Concurrent Programs Advanced Slicing of Sequential and Concurrent Programs Jens Krinke Universität Passau Abstract: Program Slicing ist eine Technik zur Identifikation von Anweisungen, die andere Anweisungen beeinflussen

Mehr

Aktivitäten in C# /.NET umsetzen

Aktivitäten in C# /.NET umsetzen Aktivitäten in C# /.NET umsetzen Grundlagen von C# Dr. Beatrice Amrhein Überblick Grundlagen der C# Syntax Visual C# Express Einfache Abläufe umsetzen 2 Grundlagen von C# 3 Merkmale von C# C# besteht aus

Mehr

Die Datenmanipulationssprache SQL

Die Datenmanipulationssprache SQL Die Datenmanipulationssprache SQL Daten eingeben Daten ändern Datenbank-Inhalte aus Dateien laden Seite 1 Data Manipulation Language A DML statement is executed when you Add new rows to a table Modify

Mehr

Falko. Error annotations in Falko 2.x. Marc Reznicek & Cedric Krummes

Falko. Error annotations in Falko 2.x. Marc Reznicek & Cedric Krummes Falko Error annotations in Falko 2.x Marc Reznicek & Cedric Krummes Symposium What s Hard in German? Structural Difficulties, Research Approaches and Pedagogic Solutions Bangor University Monday and Tuesday,

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

Grammatiken und ANTLR

Grammatiken und ANTLR Grammatiken und ANTLR Zusatzfolien zu Algo Blatt 6 Author: Henry Schaefer http://www.majeeks.de/folien_blatt6.pdf Grammatik Definition: syntaktische Beschreibung einer Sprache (H.S.) Definiton Grammatik

Mehr

Quellcode-Repräsentation in Eclipse. Seminarvortrag PG Reclipse Jan Rieke

Quellcode-Repräsentation in Eclipse. Seminarvortrag PG Reclipse Jan Rieke Quellcode-Repräsentation in Eclipse Seminarvortrag PG Reclipse Jan Rieke Gliederung Motivation Architektur von Eclipse Quelltext-Repräsentation in Eclipse Java-Modell Java DOM/AST Zusätzliche Konzepte

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

Efficient Design Space Exploration for Embedded Systems

Efficient Design Space Exploration for Embedded Systems Diss. ETH No. 16589 Efficient Design Space Exploration for Embedded Systems A dissertation submitted to the SWISS FEDERAL INSTITUTE OF TECHNOLOGY ZURICH for the degree of Doctor of Sciences presented by

Mehr

PHP Code Konventionen Um einen einheitlichen Code zu generieren, der von jedem gelesen werden kann, müssen folgende Konventionen eingehalten werden.

PHP Code Konventionen Um einen einheitlichen Code zu generieren, der von jedem gelesen werden kann, müssen folgende Konventionen eingehalten werden. PHP Code Konventionen Um einen einheitlichen Code zu generieren, der von jedem gelesen werden kann, müssen folgende Konventionen eingehalten werden. Allgemein Ein Einzug sollte aus 4 Leerzeichen bestehen.

Mehr

Grundlagen der Informatik. Prof. Dr. Stefan Enderle NTA Isny

Grundlagen der Informatik. Prof. Dr. Stefan Enderle NTA Isny Grundlagen der Informatik Prof. Dr. Stefan Enderle NTA Isny 2 Datenstrukturen 2.1 Einführung Syntax: Definition einer formalen Grammatik, um Regeln einer formalen Sprache (Programmiersprache) festzulegen.

Mehr

Lehrstuhl für Allgemeine BWL Strategisches und Internationales Management Prof. Dr. Mike Geppert Carl-Zeiß-Str. 3 07743 Jena

Lehrstuhl für Allgemeine BWL Strategisches und Internationales Management Prof. Dr. Mike Geppert Carl-Zeiß-Str. 3 07743 Jena Lehrstuhl für Allgemeine BWL Strategisches und Internationales Management Prof. Dr. Mike Geppert Carl-Zeiß-Str. 3 07743 Jena http://www.im.uni-jena.de Contents I. Learning Objectives II. III. IV. Recap

Mehr

Informationsextraktion

Informationsextraktion Informationsextraktion Bestimmte Anwendungen bei der semantischen Verarbeitung erfordern keine tiefe linguistische Analyse mit exakter Disambiguierung (= eine einzige und korrekte Lesart). Hierzu gehört

Mehr

Software Engineering und Projektmanagement 2.0 VO

Software Engineering und Projektmanagement 2.0 VO Software Engineering und Projektmanagement 2.0 VO Inhalte der Einheit Was ist Usability? Wieso ist Usability wichtig? Vorlesung 2009W Usability Engineering (Christoph Wimmer) Sicherheit in der Softwareentwicklung

Mehr

Inhalt. Fragestellungen. ...we make the invisible visible... Analysen und deren Anwendung Erfahrungen

Inhalt. Fragestellungen. ...we make the invisible visible... Analysen und deren Anwendung Erfahrungen ...we make the invisible visible... 1 Inhalt Fragestellungen Analysen und deren Anwendung Erfahrungen 2 Projektleiter Hat unsere Software eine klare, verständliche Struktur? Gibt es problematischen Code,

Mehr

Seminarvortrag zum Thema maschinelles Lernen I - Entscheidungsbäume. von Lars-Peter Meyer. im Seminar Methoden wissensbasierter Systeme

Seminarvortrag zum Thema maschinelles Lernen I - Entscheidungsbäume. von Lars-Peter Meyer. im Seminar Methoden wissensbasierter Systeme Seminarvortrag zum Thema maschinelles Lernen I - Entscheidungsbäume von Lars-Peter Meyer im Seminar Methoden wissensbasierter Systeme bei Prof. Brewka im WS 2007/08 Übersicht Überblick maschinelles Lernen

Mehr

Grundlagen der Programmierung

Grundlagen der Programmierung Grundlagen der Programmierung Dr. Tom Kamphans 1. Vorlesung 12.10.2016 1 Organisatorisches Vorlesung: Mittwochs 14:00 15:30, Raum F 201 Übung: Mittwochs 15:45 19:00, Raum F 225 Übung: alle zwei Wochen

Mehr

p^db=`oj===pìééçêíáåñçêã~íáçå=

p^db=`oj===pìééçêíáåñçêã~íáçå= p^db=`oj===pìééçêíáåñçêã~íáçå= Error: "Could not connect to the SQL Server Instance" or "Failed to open a connection to the database." When you attempt to launch ACT! by Sage or ACT by Sage Premium for

Mehr

6. Bibliothek mit Spezifikationsmodulen

6. Bibliothek mit Spezifikationsmodulen 6. Bibliothek mit Spezifikationsmodulen GSS-6.1 Spezifikationsmodul löst eine häufig vorkommende Aufgabe, z. B. Bindung von Namen gemäß Algol-Verdeckungsregel bietet abstrakte Symbole (CLASS) mit vorgefertigten

Mehr

Funktionale Konzepte in objektorientierten Sprachen LAMBDAS / CLOSURES

Funktionale Konzepte in objektorientierten Sprachen LAMBDAS / CLOSURES Funktionale Konzepte in objektorientierten Sprachen LAMBDAS / CLOSURES Motivation Überblick Was macht Funktionale Programmierung aus? Sind Funktionale Programmierung und Objektorientierte Programmierung

Mehr

Bäume, Suchbäume und Hash-Tabellen

Bäume, Suchbäume und Hash-Tabellen Im folgenden Fokus auf Datenstrukturen, welche den assoziativen Zugriff (über einen bestimmten Wert als Suchkriterium) optimieren Bäume: Abbildung bzw. Vorberechnung von Entscheidungen während der Suche

Mehr

Worx Landroid - Software Update

Worx Landroid - Software Update Worx Landroid - Software Update WORX Landroid Software Update für Anwender 30.04.2015 Website: www.worxlandroid.com Direct Direkter Link Link for auf the Update: Update: https://www.worxlandroid.com/en/software-update

Mehr

Software-Metriken. Dipl.-Ing.(BA) Henning Sievert <email@henningsievert.de> Seminar Software-Entwurf WS 2004/05

Software-Metriken. Dipl.-Ing.(BA) Henning Sievert <email@henningsievert.de> Seminar Software-Entwurf WS 2004/05 Software-Metriken Dipl.-Ing.(BA) Henning Sievert Seminar Software-Entwurf WS 2004/05 Gliederung Einordnung in den Seminar-Kontext Grundlegende Definitionen Klassifikation 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 2010/11 Überblick I Durchführung von Reengineering-Projekten

Mehr

Transformationswerkzeuge TXL, RAINCODE, DMS. Doum Maimouna Bamba Üniversität Bremen Fachbereich 3-Mathematik und Informatik maimouna@tzi.

Transformationswerkzeuge TXL, RAINCODE, DMS. Doum Maimouna Bamba Üniversität Bremen Fachbereich 3-Mathematik und Informatik maimouna@tzi. Transformationswerkzeuge TXL, RAINCODE, DMS Doum Maimouna Bamba Üniversität Bremen Fachbereich 3-Mathematik und Informatik maimouna@tzi.de Abstract Diese Arbeit gibt einen Überblick über Transformationsprogramme

Mehr

DATA ANALYSIS AND REPRESENTATION FOR SOFTWARE SYSTEMS

DATA ANALYSIS AND REPRESENTATION FOR SOFTWARE SYSTEMS DATA ANALYSIS AND REPRESENTATION FOR SOFTWARE SYSTEMS Master Seminar Empirical Software Engineering Anuradha Ganapathi Rathnachalam Institut für Informatik Software & Systems Engineering Agenda Introduction

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

Klassische Themen der Computerwissenschaft Constraint Programming: Exercises. Gruppe: 100. Inhaltsverzeichnis

Klassische Themen der Computerwissenschaft Constraint Programming: Exercises. Gruppe: 100. Inhaltsverzeichnis Klassische Themen der Computerwissenschaft Constraint Programming: Exercises Gruppe: 100 Inhaltsverzeichnis 1 Exercise 1 1 2 Exercise 2 2 2.1 Backtracking........................... 2 2.2 Forward checking.........................

Mehr

4.Grundsätzliche Programmentwicklungsmethoden

4.Grundsätzliche Programmentwicklungsmethoden 4.Grundsätzliche Programmentwicklungsmethoden 1.1 Grundlage strukturierter und objektorientierter Programmierung Begriff Software Engineering - umfaßt den gezielten Einsatz von Beschreibungsmitteln, Methoden

Mehr

Context-adaptation based on Ontologies and Spreading Activation

Context-adaptation based on Ontologies and Spreading Activation -1- Context-adaptation based on Ontologies and Spreading Activation ABIS 2007, Halle, 24.09.07 {hussein,westheide,ziegler}@interactivesystems.info -2- Context Adaptation in Spreadr Pubs near my location

Mehr

Grundlagen der Informatik I (Studiengang Medieninformatik)

Grundlagen der Informatik I (Studiengang Medieninformatik) Grundlagen der Informatik I (Studiengang Medieninformatik) Thema: 3. Datentypen, Datenstrukturen und imperative Programme Prof. Dr. S. Kühn Fachbereich Informatik/Mathematik Email: skuehn@informatik.htw-dresden.de

Mehr

Methodische Grundlagen des Software Engineering - Übung 9

Methodische Grundlagen des Software Engineering - Übung 9 Engineering - Übung 9 9 Prozess und Softwarequalität Abgabe der Hausaufgaben am Anfang der jeweiligen Präsenzübung am 14.06.2011 bzw. 15.06.2011. Hinweise und Kontakt: Veranstaltungsseite 1 9.1 Grundlagen

Mehr

Remotely Anywhere Verwendung von Zertifikaten Schritt für Schritt Anleitung zur Implementation von Zertifikaten in Remotely Anywhere

Remotely Anywhere Verwendung von Zertifikaten Schritt für Schritt Anleitung zur Implementation von Zertifikaten in Remotely Anywhere Remotely Anywhere Verwendung von Zertifikaten Schritt für Schritt Anleitung zur Implementation von Zertifikaten in Remotely Anywhere Copyright 1997-2005 Brainware Consulting & Development AG All rights

Mehr

Probeklausur: Programmierung WS04/05

Probeklausur: Programmierung WS04/05 Probeklausur: Programmierung WS04/05 Name: Hinweise zur Bearbeitung Nimm Dir für diese Klausur ausreichend Zeit, und sorge dafür, dass Du nicht gestört wirst. Die Klausur ist für 90 Minuten angesetzt,

Mehr

VoIP Test mit HST-3000 und T-Online Anschluss Von Sascha Chwalek

VoIP Test mit HST-3000 und T-Online Anschluss Von Sascha Chwalek Application Note VoIP Test mit HST-3000 und T-Online Anschluss Von Sascha Chwalek T-Online bietet jedem T-DSL Kunden einen kostenlosen VoIP-Anschluss unter der Bezeichnung DSL Telefonie an. Der Dienst

Mehr

Dynamische Programmierung. Problemlösungsstrategie der Informatik

Dynamische Programmierung. Problemlösungsstrategie der Informatik als Problemlösungsstrategie der Informatik und ihre Anwedung in der Diskreten Mathematik und Graphentheorie Fabian Cordt Enisa Metovic Wissenschaftliche Arbeiten und Präsentationen, WS 2010/2011 Gliederung

Mehr

AS Path-Prepending in the Internet And Its Impact on Routing Decisions

AS Path-Prepending in the Internet And Its Impact on Routing Decisions (SEP) Its Impact on Routing Decisions Zhi Qi ytqz@mytum.de Advisor: Wolfgang Mühlbauer Lehrstuhl für Netzwerkarchitekturen Background Motivation BGP -> core routing protocol BGP relies on policy routing

Mehr

Programmverstehen. Andreas Zeller Lehrstuhl für Softwaretechnik Universität des Saarlandes, Saarbrücken 2005-12-12

Programmverstehen. Andreas Zeller Lehrstuhl für Softwaretechnik Universität des Saarlandes, Saarbrücken 2005-12-12 Programmverstehen Andreas Zeller Lehrstuhl für Softwaretechnik Universität des Saarlandes, Saarbrücken 2005-12-12 Software Reengineering An der Universität lernen Sie in der Regel das Entwickeln eines

Mehr

Distributed testing. Demo Video

Distributed testing. Demo Video distributed testing Das intunify Team An der Entwicklung der Testsystem-Software arbeiten wir als Team von Software-Spezialisten und Designern der soft2tec GmbH in Kooperation mit der Universität Osnabrück.

Mehr

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

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

Mehr

Der Adapter Z250I / Z270I lässt sich auf folgenden Betriebssystemen installieren:

Der Adapter Z250I / Z270I lässt sich auf folgenden Betriebssystemen installieren: Installationshinweise Z250I / Z270I Adapter IR USB Installation hints Z250I / Z270I Adapter IR USB 06/07 (Laden Sie den Treiber vom WEB, entpacken Sie ihn in ein leeres Verzeichnis und geben Sie dieses

Mehr

Dr. Monika Meiler. Inhalt

Dr. Monika Meiler. Inhalt Inhalt 4 Anweisungen... 4-2 4.1 Strukturierte Programmierung... 4-2 4.1.1 Geschichte... 4-2 4.1.2 Strukturierung im Kleinen... 4-2 4.2 Einige Beispielanwendungen... 4-4 4.2.1 Addierer (do-schleife)...

Mehr

Einführung Datentypen Verzweigung Schleifen. Java Crashkurs. Kim-Manuel Klein May 4, 2015

Einführung Datentypen Verzweigung Schleifen. Java Crashkurs. Kim-Manuel Klein May 4, 2015 Java Crashkurs Kim-Manuel Klein (kmk@informatik.uni-kiel.de) May 4, 2015 Quellen und Editoren Internet Tutorial: z.b. http://www.java-tutorial.org Editoren Normaler Texteditor (Gedit, Scite oder ähnliche)

Mehr

Vorlesung Software Engineering

Vorlesung Software Engineering Vorlesung Software Engineering Kapitel 4 Qualitätsmanagement und Software-Metriken Software-Metriken mittels Werkzeug Understand - 1 - Neues Projekt anlegen New Project... - 2 - Neues Projekt anlegen Auswahl

Mehr

Einführung in die Informatik Grammars & Parsers

Einführung in die Informatik Grammars & Parsers Einführung in die Informatik Grammars & Parsers Grammatiken, Parsen von Texten Wolfram Burgard Cyrill Stachniss 12.1 Einleitung Wir haben in den vorangehenden Kapiteln meistens vollständige Java- Programme

Mehr

Eine Baumstruktur sei folgendermaßen definiert. Eine Baumstruktur mit Grundtyp Element ist entweder

Eine Baumstruktur sei folgendermaßen definiert. Eine Baumstruktur mit Grundtyp Element ist entweder Programmieren in PASCAL Bäume 1 1. Baumstrukturen Eine Baumstruktur sei folgendermaßen definiert. Eine Baumstruktur mit Grundtyp Element ist entweder 1. die leere Struktur oder 2. ein Knoten vom Typ Element

Mehr

1 Syntax von Programmiersprachen

1 Syntax von Programmiersprachen 1 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 Programmier-Sprache Festlegung, wie Programme

Mehr

Software Evolution: Einführung. Dr. Thorsten Arendt Marburg, 15. Oktober 2015

Software Evolution: Einführung. Dr. Thorsten Arendt Marburg, 15. Oktober 2015 Software Evolution: Einführung Dr. Thorsten Arendt Marburg, 15. Oktober 2015 Überblick Was ist Software-Evolution? Warum ist Software-Evolution wichtig? Was sind die Prinzipien der Software-Evolution?

Mehr

Einführung in C++ Operatoren überladen (Klassen)

Einführung in C++ Operatoren überladen (Klassen) Einführung in C++ Operatoren überladen (Klassen) Operatoren überladen Die Überladung von Operatoren ermöglicht es, vorhandene Operatoren (+,-,...) auch auf Objekte von Klassen anzuwenden. Die meisten der

Mehr

Mash-Up Personal Learning Environments. Dr. Hendrik Drachsler

Mash-Up Personal Learning Environments. Dr. Hendrik Drachsler Decision Support for Learners in Mash-Up Personal Learning Environments Dr. Hendrik Drachsler Personal Nowadays Environments Blog Reader More Information Providers Social Bookmarking Various Communities

Mehr

SARA 1. Project Meeting

SARA 1. Project Meeting SARA 1. Project Meeting Energy Concepts, BMS and Monitoring Integration of Simulation Assisted Control Systems for Innovative Energy Devices Prof. Dr. Ursula Eicker Dr. Jürgen Schumacher Dirk Pietruschka,

Mehr

Softwaretechnik. Funktionale Programmierung. Christian Lindig. 23. Januar 2006. Lehrstuhl für Softwaretechnik Universität des Saarlandes

Softwaretechnik. Funktionale Programmierung. Christian Lindig. 23. Januar 2006. Lehrstuhl für Softwaretechnik Universität des Saarlandes Softwaretechnik Funktionale Programmierung Christian Lindig Lehrstuhl für Softwaretechnik Universität des Saarlandes 23. Januar 2006 Quicksort in Java static void sort(int a[], int lo0, int hi0) { int

Mehr

Gliederung. Tutorium zur Vorlesung. Gliederung. Gliederung. 1. Gliederung der Informatik. 1. Gliederung der Informatik. 1. Gliederung der Informatik

Gliederung. Tutorium zur Vorlesung. Gliederung. Gliederung. 1. Gliederung der Informatik. 1. Gliederung der Informatik. 1. Gliederung der Informatik Informatik I WS 2012/13 Tutorium zur Vorlesung 1. Alexander Zietlow zietlow@informatik.uni-tuebingen.de Wilhelm-Schickard-Institut für Informatik Eberhard Karls Universität Tübingen 11.02.2013 1. 2. 1.

Mehr

Customer-specific software for autonomous driving and driver assistance (ADAS)

Customer-specific software for autonomous driving and driver assistance (ADAS) This press release is approved for publication. Press Release Chemnitz, February 6 th, 2014 Customer-specific software for autonomous driving and driver assistance (ADAS) With the new product line Baselabs

Mehr

ISO 15504 Reference Model

ISO 15504 Reference Model Process flow Remarks Role Documents, data, tools input, output Start Define purpose and scope Define process overview Define process details Define roles no Define metrics Pre-review Review yes Release

Mehr

Themen des Kapitels. 2 Grundlagen von PL/SQL. PL/SQL Blöcke Kommentare Bezeichner Variablen Operatoren. 2.1 Übersicht. Grundelemente von PL/SQL.

Themen des Kapitels. 2 Grundlagen von PL/SQL. PL/SQL Blöcke Kommentare Bezeichner Variablen Operatoren. 2.1 Übersicht. Grundelemente von PL/SQL. 2 Grundlagen von PL/SQL Grundelemente von PL/SQL. 2.1 Übersicht Themen des Kapitels Grundlagen von PL/SQL Themen des Kapitels PL/SQL Blöcke Kommentare Bezeichner Variablen Operatoren Im Kapitel Grundlagen

Mehr