Bitte benutzen Sie diese Kennung, um auf die Ressource zu verweisen: http://dx.doi.org/10.18419/opus-13263
Autor(en): Burk, Felix
Titel: A dynamic analysis-based linter for Python
Erscheinungsdatum: 2023
Dokumentart: Abschlussarbeit (Master)
Seiten: 70
URI: http://nbn-resolving.de/urn:nbn:de:bsz:93-opus-ds-132824
http://elib.uni-stuttgart.de/handle/11682/13282
http://dx.doi.org/10.18419/opus-13263
Zusammenfassung: The rising popularity of the Python language yields a wide range of programs, spanning across a large assortment of domains. Common domains include, data science, machine learning, web development, as well as database and networking applications. To implement such applications properly, developers rely on a range of analysis tools which assist them in terms of correctness, performance, and code quality. Both in academia and in the industry analysis tools have been proposed. However, general purpose analyses of Python programs often rely on static analysis, which is inherently limited in analysing dynamic languages, such as Python. This work presents an approach to analyse Python programs during their execution. As a result, our analyses are able to infer additional information, such as the exact control flow, the precise value, and type of each object allocated. We directly address the dynamic nature of the Python language by applying dynamic analysis concepts to realise a general purpose linter. We present a total of 22 rules to analyse general Python programs, which address correctness, performance and code quality. Moreover, we supplement those rules with 10 additional machine learning specific rules, which analyse the usage of popular machine learning libraries within Python’s ecosystem, such as scikit-learn and TensorFlow. Additionally, this work includes a novel approach to track and annotate objects observed during the execution, facilitating the future development of dynamic analysis tools. We evaluate our prototype by analysing submissions to the Kaggle platform, which include a wide range of programs related to data science and machine learning. Our findings include at least 4 violations with high risk regarding correctness. Additionally, we evaluate general purpose rules on 11 real world GitHub repositories of various domains. Our results include 8 medium risk rule violations and 1 rule violation with high risk regarding correctness. Most rules imposed by our prototype report few false positives. Furthermore, the overhead is at most a 7x increase, which we regard as as acceptable for practical use. Overall, the results show that dynamic analysis yields promising results for both general purpose and machine learning applications within Python’s ecosystem.
Die weiterhin zunehmende Popularität der Programmiersprache Python bringt eine große Menge an Programmen hervor, welche breite Bereiche abdecken. Zu diesen gehören Data Science Applikationen, maschinelles Lernen, Web-, Datenbanken- und Netzwerkapplikationen. Damit diese Applikationen den erforderlichen Standards entsprechen, verwenden Entwickler eine Fülle von Programmen, welche Ihnen in den Bereichen Korrektheit, Performanz und Code Qualität Unterstützung leisten. Viele solcher Programme wurden sowohl im akademischen Bereich, als auch von der Industrie vorgestellt. Jedoch beruhen die Meisten auf den Prinzipien der statischen Analyse, welche grundsätzlichen Einschränkungen unterliegen, besonders bei dynamischen Programmiersprachen wie Python. Diese Arbeit stellt einen Ansatz vor, Python Programme während der Ausführung zu analysieren. Aufgrund dessen, erlaubt es unser Ansatz zusätzliche Informationen über ein gegebenes Programm zu sammeln. Diese beinhalten den exakten Kontrollfluss des Programms, den Inhalt von Variablen und Attributen, und deren Typen. Wir adressieren damit direkt die dynamische Natur der Python Programmiersprache, indem wir Prinzipien der dynamischen Analyse anwenden. Diese Arbeit präsentiert 22 allgemeine Regeln für Python Programme, welche die Korrektheit, Performanz und Code Qualität des jeweiligen Programms analysieren. Weiterhin stellen wir 10 Regeln zur Analyse der Nutzung von Bibliotheken im Bereich des maschinellen Lernens vor. Um die zukünftige Entwicklung von dynamischen Analysen zu erleichtern, stellen wir außerdem einen neuen Ansatz vor, wie zusätzliche Informationen zu Objekten während der Laufzeit gespeichert und verwendet werden können. Wir evaluieren unseren Ansatz anhand von Einreichungen für die Plattform Kaggle. Diese beinhalten Python Programme im Bereich des maschinellen Lernens und Data Science. Unsere Befunde beinhalten mindestens 4 Regelverstöße mit einem hohen Risiko zur Verletzung der Korrektheit des Programms. Zudem evaluieren wir 11 Programme, aus unterschiedlichsten Bereichen, von der Plattform GitHub, welche in der Praxis verwendet werden. Unsere Resultate beinhalten 7 Befunde mit einem mittelgroßen Risiko bezüglich der Korrektheit und einen Befund mit hohem Risiko. Insgesamt zeigen unsere Befunde, dass dynamische Analyse von Python Programmen vielversprechende Resultate liefert, sowohl im Bereich des Maschinelles Lernen, als auch im Allgemeinen.
Enthalten in den Sammlungen:05 Fakultät Informatik, Elektrotechnik und Informationstechnik

Dateien zu dieser Ressource:
Datei Beschreibung GrößeFormat 
MasterThesisFelixBurk.pdf646,87 kBAdobe PDFÖffnen/Anzeigen


Alle Ressourcen in diesem Repositorium sind urheberrechtlich geschützt.