Graph-based code pattern extraction

Software has found its way into many aspects of our everyday lives. However, the actual development of software is known to be time-consuming, and even minor mistakes can lead to devastating misbehaviors in the execution, commonly called bugs. With the rise of software engineering in the 1960s, software developers started to apply engineering principles. Software patterns were identified and used as a guideline, presenting reusable, high-quality solutions to common problems. However, the patterns were very general and there was a practical limit to the number of situations that could be considered.

The large number of different applications for software each come with their own requirements. To fulfill these, software needs to be very diverse. An assistant system for a plane has an entirely different code structure and development process than a step counter app running on a smartphone. Specific patterns could be more relevant to the situation than general patterns but are inherently difficult to examine as they depend on many outside factors. A pattern might only be relevant for a certain team structure, within a certain domain, or with certain hardware.

This thesis describes an approach to automatically discover patterns on a large scale, using pattern mining. These code change patterns capture reoccurring changes in a software's evolution. Open repositories in version control systems provide complete histories of a large number of software projects. The presented approach has three core steps:
1) the change extraction and modeling, where the source code is analyzed for contextual relations and transformed into a graph representation,
2) the extraction of frequent patterns from the dataset using a specifically adapted algorithm, and
3) the interpretation and application of mined patterns, using a novel analysis tool to effectively oversee thousands of patterns with thousands of instances.

Three experiments were conducted to evaluate the scalability of the change pattern mining approach, how patterns can be effectively interpreted, and what factors impact pattern structure and frequency. In the first experiment, a complete and exact mining was done on 7 individual projects. In the second experiment, an aggregate of 1000 projects was analyzed using stochastic methods. Finally, high-level file-overarching change patterns were mined from an aggregate of 1000 projects.

Software ist in vielen Bereichen des modernen Lebens relevant. Ihre Entwicklung ist jedoch zeitaufwändig, und selbst kleine Programmfehler können verheerende Auswirkungen auf die Programmausführung haben. Mit der Etablierung von "Software Engineering" um 1960 begannen Softwareentwickler, Ingenieurprinzipien bei der Entwicklung einzusetzen. Software-Entwurfsmuster haben sich seitdem als wichtiges Werkzeug der Softwareentwicklung etabliert. Sie sind jedoch inhärent allgemein und damit nicht in der Lage, projektspezifische Zusammenhänge abzubilden.
Eine große Vielfalt unterschiedlichster Anforderungen führt zu sehr vielfältiger Software. Beispielsweise ist der Quellcode für das Assistenzsystem eines Passagierflugzeugs anders strukturiert als der einer Schrittzähler-App auf dem Smartphone. Auch die Entwicklungsprozesse unterscheiden sich stark. Spezifischere Softwaremuster, die zugeschnitten sind auf die Domäne, den Enwicklungsprozess oder die Verwendung spezieller Hardware, haben potenziell eine höhere Relevanz als allgemeine Muster.
Diese Arbeit beschreibt eine Methode zur automatischen Extraktion von Code-Mustern, basierend auf "Pattern Mining". Die extrahierten Muster beschreiben häufig vorgenommene Änderungen. Dazu werden öffentlich verfügbare Daten aus Versionskontrollsystemen verwendet, die eine reichhaltige Historie verschiedener Softwareprojekte halten. Der präsentierte Ansatz besteht aus drei Schritten:
1) Die Modellierung von Änderungen und ihre Extraktion aus Programmcode. Dabei werden kontextuelle Zusammenhänge zwischen den Änderungen erfasst und die Änderungen schließlich als Graph repräsentiert.
2) Mit einem spezialisierten Algorithmus werden häufige Muster aus den Graphdaten extrahiert.
3) Die Muster werden mithilfe eines neuartigen Analysewerkzeugs interpretiert, sodass tausende Muster mit jeweils tausenden Vorkommnissen überblickt werden können.
Die Skalierbarkeit des Ansatzes, effektive Interpretationsmethoden sowie verschiedene Einflussfaktoren wurden mithilfe von drei Experimenten untersucht. Im ersten Experiment wurden Muster in 7 Projekten mittels eines vollständigen und exakten Algorithmus gefunden. Im zweiten Experiment wurden 1000 Projekte aggregiert und mithilfe einer stochastischen Methode analysiert. Letztlich wurden im dritten Experiment abstrakte, dateiübergreifende Muster aus 1000 Projekten extrahiert.

Zitieren

Zitierform:
Zitierform konnte nicht geladen werden.

Rechte

Nutzung und Vervielfältigung:
Alle Rechte vorbehalten