Forschungsdesign

Statische Analyse eines Korpus von Java-Klassen


Iman Keivanloo, Juergen Rilling u. Ying Zou (2014) haben im 1. Quartal 2012 einen Korpus von ca. 2,8 Mio Java-Klassendateien erhoben**. Die Dateien stammen aus SoureForge und Google Code-Repositories.

Die Fallstudie erfolgt im Rahmen einer Independent Study/Hausarbeit im Modul Softwaretechnik bei Rainer Koschke. Ziel ist es, Antworten für die folgenden Fragen zu finden:

  • Wie sehen typische Java-Klassen aus?
  • Welche Sprachkonstrukte werden häufig verwendet?
  • Gibt es Abhängigkeiten zwischen den Merkmalsausprägungen verschiedener Software-Metriken?
Workflow der Fallstudie Java-Korpus
Workflow der Fallstudie Java-Korpus.

Eingesetzte Werkzeuge

Im nebenstehenden Diagramm lässt sich der Workflow erkennen.

Zur Erhebung der Metriken wird ANTLR4 eingesetzt. Es gibt einen Parser für die Java-Grammatik, die Definition der Metriken und zu erhebenden Merkmale muss jedoch im Rahmen der Fallstudie erfolgen.

Die Analyse der erhobenen Rohdaten erfolgt schließlich mit der Programmiersprache R.

Zwischenstand

Eine erste Untersuchung einer Stichprobe von 137.644 Klassendateien zeigt, dass es nicht die eine typische Java-Klasse gibt.

Dies ist nicht verwunderlich. Häufig verwendete Architektur-Muster wie z. B. Model-View-Presenter (MVP) führen dazu, dass es Gruppen von Java-Klassen gibt, die sich gewisse Eigenschaften teilen.

So haben z. B. Model-Klassen im MVP relativ viele Attribute und durch Getter/Setter in der Regel mindestens doppelt so viele Methoden (die oft nur wenige Zeilen lang sind). Im Gegensatz dazu haben zustandlose Session-Beans häufig nur einzelne Attribute, dafür jedoch viele Methoden. Da hier oft die Geschäftslogik abgebildet wird, sind die Methoden zudem sehr lang.

Das Diagramm zeigt dies auch noch mal: Hier werden die Lines of Code (LoC) mit der Anzahl der Attribute und der Anzahl der Methoden pro Klasse gegenübergestellt.

LoC vs Attribute vs Methoden als Cube
LoC vs Attribute vs Methoden als Cube.

Dabei zeigt sich, dass eine recht hohe Konzentration mit geringer Streuung mit wenigen, extremen Ausreißern vorherrscht. So beträgt z. B. der Gini-Koeffizient der Attribute pro Klasse 0,817 und der Gini-Koeffizient der Methoden pro Klasse 0,705.

Ausblick – Was noch kommt

Nachdem die Stichprobe einen ersten Einblick in den Datensatz ermöglicht hat, wird die Fallstudie nun auf den gesamten Datensatz ausgeweitet.

Die Hypothese, dass es verschiedene Gruppen von Java-Klassen gibt, soll weiter untersucht werden. Zu vermuten wäre, dass sich diese Gruppen durch eine Cluster-Analyse aufzeigen lassen.

Außerdem sollen statistische Hypothesentests durchgeführt werden, um die Allgemeingültigkeit der erhobenen Merkmalsausprägungen zu überprüfen.

Sobald hier weitere Ergebnisse vorliegen, werde ich sie hier zur Verfügung stellen.

** = Keivanloo, Iman; J. Rilling und Y. Zou (2014). Spotting working code examples. In: ICSE 2014 Proceedings of the 36th International Conference on Software Engineering, S. 664-675.

Sven Meyer

Geschrieben von: Sven Meyer

Ich bin Sven Meyer und unterstütze Selbstständige, ihr Business auf gesunde Beine zu stellen. Die Kernzutaten: organisiert arbeiten, die richtige Technik und clevere Abläufe. So steht dem Wachstum nichts im Weg!

Bildquelle(n):


    Kommentar schreiben:

    Nicht verpassen!
    Abonniere meinen Newsletter:
    Bekomme eine E-Mail, wenn es Neues gibt.