Umfang

Dieses Thema kann als Bachelorarbeit, Teil einer Projektarbeit oder im Rahmen einer Masterarbeit bearbeitet werden.

Problemstellung

Duplikate in Source Code sind ein prominentes Problem in der Langzeitwartung von Systemen. Insbesondere, wenn Code dupliziert wird und die Duplikate unabhängig voneinander verändert werden, entsteht die Gefahr von unerwartetem und inkorrektem Verhalten des Programms. Hierdurch entsteht auch ein erhöhter Wartungsaufwand und damit verbundene, erhöhte Wartungskosten.

Die Forschung beschäftigt sich seit über 10 Jahren damit, Code Clones effizient zu entdecken (Ain et al. (2019), Thummalapenta et al. (2009)). Hierbei existiert ein starker Fokus auf Java, Python, C und anderen, in der Industrie stark verbreiteten Sprachen. Dabei gibt es eine Unterscheidung zwischen vier verschiedenen Arten von Code Clones:

Typ 1
Exakte Klone modulo White Space
  • Unit a = new Unit(b.getValue())
  • Unit a=new Unit(b.getValue())
Typ 2
Klone modulo Umbenennung
  • Unit a = new Unit(b.getValue())
  • Unit transformedValue = new Unit(initialObservation.getValue())
Typ 3
Near Miss Clones - Inkonsistente Klone
  • if (b.getValue() > 42) { /* ... */ }
  • if (b != null && b.getValue() > 42) { /* ... */ }
Typ 4
Semantische Klone
  • for (int i=0; i<list.size(); i++) System.out.println(coll.get(i))
  • list.stream().foreach(System.out::println)

In dieser Arbeit soll ein Tool zur Erkennung von Typ-2 und Typ-3 Klonen in Prolog-Code erstellt werden. Hierfür bieten sich Machine Learning Techniken (wie bspw. Word2Vec) an sowie statische Analysen mit Abschätzungen (vgl. Dandois & Vanhoof (2011)). Ebenso soll ein simplerer Algorithmus erstellt werden, der bei der Auswertung der Performance als Baseline dient.

Die Klonerkennung erfolgt hierbei auf ganzen Prädikaten und nicht nur auf Klauselbasis.

Relevante Literatur

Empfohlene Vorkenntnisse

  • Prolog
  • Machine Learning
  • Parsing und ASTs

Minimalanforderungen

  • Erstellung eines Tools, welches für zwei gegebene Prolog-Prädikate entscheiden können soll, ob diese Duplikate voneinander sind
  • Messung der Performance
  • Erstellung einer Baseline-Performance
  • Vergleich: Tool vs. Baseline

Variationen/Erweiterungen

Kontakt

Jannik Dunkelau
Raum 25.12.02.52 · jannik.dunkelau@hhu.de