Return to search

Sind Sprachmodelle in der Lage die Arbeit von Software-Testern zu übernehmen?: automatisierte JUnit Testgenerierung durch Large Language Models

Die Bachelorarbeit untersucht die Qualität von Sprachmodellen im Kontext der Generierung
von Unit Tests für Java Anwendungen. Ziel der Arbeit ist es, zu analysieren,
inwieweit JUnit Tests durch den Einsatz von Sprachmodellen automatisiert generiert
werden können und daraus abzuleiten mit welcher Qualität sie die Arbeit von Software-
Testern übernehmen und ersetzen. Hierzu wird ein automatisiertes Testerstellungssystem
in Form eines Python-Kommandozeilen-Tools konzipiert sowie implementiert, welches mithilfe
von Anfragen an das Sprachmodell Testfälle generiert. Um dessen Qualität messen zu
können, werden die generierten Tests ohne manuellen Einfluss übernommen. Als Grundlage
der Evaluierung findet eine Durchführung statt, in der für 3 Java-Maven Projekte, mit
unterschiedlichen Komplexitätsgraden, Tests generiert werden. Die anschließende Analyse
besteht aus einem festen Bewertungsverfahren, welches die Testcodeabdeckung sowie
Erfolgsquote evaluiert und mit manuellen Tests vergleicht. Die Ergebnisse zeigen, dass
Sprachmodelle in der Lage sind, JUnit Tests mit einer zufriedenstellenden Testabdeckung
zu generieren, jedoch eine unzureichende Erfolsquote im Vergleich zu manuellen Tests
aufweisen. Es wird deutlich, dass sie aufgrund von Qualitätsmängeln bei der Generierung
von Testcode die Arbeit von Software-Testern nicht vollständig ersetzen können. Jedoch
bieten sie eine Möglichkeit, Testerstellungsprozesse zu übernehmen, welche mit einer
anschließenden manuellen Nachkontrolle enden und reduzieren somit den Arbeitsaufwand
der Tester.:Abbildungsverzeichnis IV
Tabellenverzeichnis V
Quellcodeverzeichnis VI
Abkürzungsverzeichnis VIII
1 Einleitung 1
1.1 Problemstellung 1
1.2 Zielstellung 2
2 Grundlagen 4
2.1 Software Development Lifecycle 4
2.2 Large Language Models 6
2.2.1 Begriff und Einführung 6
2.2.2 Generative Pre-trained Transformer 8
2.3 Prompt Engineering 9
2.3.1 Prompt Elemente 10
2.3.2 Prompt Techniken 10
2.4 Unit Testing 12
2.4.1 Grundlagen 12
2.4.2 Java mit JUnit5 14
2.5 SonarQube 16
3 Konzeption 18
3.1 Voraussetzungen 18
3.2 Anforderungsanalyse 19
3.3 Wahl des Large Language Models 21
3.4 Design des Prompts 22
3.5 Programmablaufplan 25
4 Implementation 28
4.1 Funktionalitäten 28
4.1.1 Nutzerabfrage 28
4.1.2 Java-Datei Erfassung im Projekt 30
4.1.3 Prompt-Erstellung 30
4.1.4 API-Anfrage zur Generierung von Tests 33
4.1.5 Testüberprüfung mit Repair Rounds 34
4.1.6 Logging 37
4.2 Integration von SonarQube, Plugins, Dependencies 39
4.3 Testdurchlauf 40
5 Durchführung und Analyse 43
5.1 Durchführung 43
5.2 Evaluation der Tests 44
5.2.1 Line Coverage 45
5.2.2 Branch Coverage 47
5.2.3 Overall Coverage 49
5.2.4 Erfolgsquote 51
5.3 Testcodeanalyse 52
5.4 Vergleich mit manuellen Testergebnissen 56
5.5 Einordnung der Ergebnisse 57
6 Fazit 58
6.1 Schlussfolgerung 58
6.2 Ausblick 59
Literaturverzeichnis I
A Anhang - Quelltexte

Identiferoai:union.ndltd.org:DRESDEN/oai:qucosa:de:qucosa:93824
Date20 September 2024
CreatorsSchäfer, Nils
ContributorsHochschule für Technik Wirtschaft und Kultur Leipzig
Source SetsHochschulschriftenserver (HSSS) der SLUB Dresden
LanguageGerman
Detected LanguageGerman
Typeinfo:eu-repo/semantics/publishedVersion, doc-type:bachelorThesis, info:eu-repo/semantics/bachelorThesis, doc-type:Text
Rightsinfo:eu-repo/semantics/openAccess

Page generated in 0.0017 seconds