Das Wissensportal für IT-Professionals. Entdecke die Tiefe und Breite unseres IT-Contents in exklusiven Themenchannels und Magazinmarken.

SIGS DATACOM GmbH

Lindlaustraße 2c, 53842 Troisdorf

Tel: +49 (0)2241/2341-100

kundenservice@sigs-datacom.de

Automatische Testgenerierung mit generativer KI

Softwaretests sind notwendig, um Funktionalität, Zuverlässigkeit und Benutzerfreundlichkeit von Software sicherzustellen. Doch in der Realität sind das Erstellen und Warten von Softwaretests für Unternehmen nicht nur zeitaufwendig, sondern auch teuer, insbesondere bei Unittests, die häufig manuell erstellt werden. Hier setzt die Automatisierung an, doch auch diese birgt Herausforderungen. Große Sprachmodelle wie GPT-4 haben sich in der Code- und Unittest-Generierung als vielversprechend erwiesen. Dennoch stehen ihrer breiten Nutzung zwei zentrale Hindernisse im Weg: hohe API-Kosten und fehlender Schutz sensibler Daten. Die Lösung? Ein spezialisiertes, Transformer-basiertes Sprachmodell, das diese Hindernisse umgeht.

Author Image
Demian Frister

Wissenschaftlicher Mitarbeiter

Author Image
Jacob Hoffmann

Human-Centered AI Master


  • 22.01.2025
  • Lesezeit: 15 Minuten
  • 17 Views

In diesem Artikel stellen wir TestGen-Dart vor, ein Transformer-basiertes Sprachmodell, das speziell für das Generieren von Unittests für mobile Applikationen in Dart trainiert wurde. Es kombiniert hohe Leistungsfähigkeit mit einer kleinen Modellgröße, sodass es lokal ohne externe API-Kosten und mit voller Kontrolle über die Daten betrieben werden kann.

Motivation

Die Entwicklung mobiler Anwendungen hat in den letzten Jahren weiter zugenommen, was die Bedeutung qualitativ hochwertiger Software in diesem Bereich unterstreicht [18]. Je mehr unentdeckte Fehler in einer Anwendung sind, desto niedriger ist deren Softwarequalität. Softwaretests sind unerlässlich, um diese Fehler in der Software zu finden und damit die Funktionalität, Zuverlässigkeit und Benutzerfreundlichkeit von Anwendungen sicherzustellen [15]. Allerdings stellt die Generierung dieser Softwaretests aufgrund ihres hohen Zeit- und Kostenaufwands eine erhebliche Herausforderung für Unternehmen dar [7] [14].

Trotz kontinuierlicher Fortschritte in der Werkzeugunterstützung für das Erstellen von Softwaretests besteht hier weiterhin erhebliches Verbesserungspotenzial. Ein Großteil der Softwaretests, insbesondere Modultests, sogenannten Unittests, wird manuell erstellt, was einen besonders arbeitsintensiven Prozess darstellt [3]. Die Automatisierung der Generierung von Softwaretests bietet daher einen vielversprechenden Ansatz zur Optimierung dieses kritischen Aspekts der Softwareentwicklung.

In diesem Kontext haben große Sprachmodelle (Large Language Models, LLMs) in jüngster Zeit bemerkenswerte Fortschritte erzielt, insbesondere bei der Codegenerierung und beim Erstellen von Unittests [6] [16] [21]. LLMs, die auf der Transformer-Architektur basieren [22], zeichnen sich durch ihre Fähigkeit aus, komplexe Zusammenhänge in natürlicher Sprache und Code zu verstehen und darauf basierende Antworten zu generieren.

Die Leistungssteigerung von LLMs wurde bisher hauptsächlich durch die Vergrößerung der Anzahl der Modellparameter in Verbindung mit einer Zunahme der Trainingsdatenmenge und der eingesetzten Rechenleistung erreicht [11] [19]. Dieser Ansatz führt jedoch zu erheblichen Rechenkosten, die nur von Unternehmen mit beträchtlichen finanziellen Ressourcen getragen werden können. Angesichts dieser Herausforderung besteht ein wachsendes Interesse an der Entwicklung ressourceneffizienterer LLMs, die sowohl bei spezifischen Aufgaben wie der Softwaretestgenerierung hervorragende Leistungen erbringen als auch durch eine kleinere Modellgröße kosten- und ressourceneffizient sind. Es ist außerdem wichtig, dass die Inferenz, also das Generieren von Antworten durch LLMs, auch auf kleineren Entwicklercomputern wie beispielsweise Windows Copilot+ PCs durchgeführt werden kann.

Copilot+ PCs sind eine neue, von Microsoft zertifizierte PC-Kategorie, die bestimmte Hardwareanforderungen erfüllen muss, um ausreichend Leistung zur lokalen Verwendung von KI-Modellen wie LLMs bereitzustellen. Unter Einhaltung dieser Hardwareanforderungen können diese Modelle im Regelfall aber auch auf anderen Geräten mit gleicher Hardwareausstattung laufen. Dies ermöglicht nicht nur eine breitere Zugänglichkeit der Nutzung von LLMs, sondern gewährleistet auch, dass sensible Daten lokal, auf den Computern der Entwickler, verarbeitet werden können, was wichtige Datenschutzaspekte berücksichtigt und die Daten der Entwickler und ihrer Projekte schützt.

TestGen-Dart – Konzept und Methodik

Vor diesem Hintergrund stellen wir TestGen-Dart vor, ein Transformer-basiertes LLM, das speziell für die Generierung von Unittests für mobile Anwendungen in der Programmiersprache Dart entwickelt wurde. TestGen-Dart zielt darauf ab, die Lücke zwischen leistungsfähigeren, aber ressourcenintensiven LLMs und den praktischen Anforderungen, wie Hardware- und Datenschutzbeschränkungen, von Softwareentwicklern zu schließen.

TestGen-Dart verwendet ein kleines vortrainiertes Sprachmodell, das speziell für das Erstellen von Unittests in Dart trainiert wurde. Diese gezielte Anpassung soll die Effizienz und Leistungsfähigkeit bei der Generierung von Softwaretests für mobile Anwendungen deutlich verbessern. Durch diesen Ansatz können die Vorteile von LLMs genutzt werden, ohne die hohen Ressourcenanforderungen von großen LLMs in Kauf nehmen zu müssen [5].

Die in Abbildung 1 zu sehende Methodik zur Entwicklung von TestGen-Dart gliedert sich in die drei Hauptphasen: Datenbeschaffung, Auswahl der LLMs und überwachte Feinabstimmung. Diese Methodik von TestGen-Dart basiert auf einer Modifikation des Ansatzes von [21] und wurde spezifisch für die Generierung von Unittests für mobile Anwendungen in Dart angepasst.

Abb. 1: Die Methodik von TestGen-Dart besteht aus drei Schritten: 1) Beschaffung von Daten zur Feinabstimmung 2) Auswahl geeigneter transformerbasierter LLMs 3) Durchführung von überwachter Feinabstimmung mit den ausgewählten LLMs. Modifikation des Ansatzes von [7]

Für die Datenbeschaffung wurde auf öffentlich zugängliche Daten aus Open-Source-GitHub-Repositories zurückgegriffen, die über Google BigQuery abrufbar sind [13]. Zur späteren Durchführung überwachter Feinabstimmung wird ein gelabelter Datensatz aus Eingaben X und Ausgaben Y benötigt. Im Gegensatz zu früheren Ansätzen wurden dabei vollständige Codedateien als Eingaben X und die entsprechenden Testdateien als Ausgaben Y extrahiert. Unter Verwendung der Namenskonventionen von Code- und zugehörigen Testdateien im Softwaretesting hat unser Zuordnungsverfahren Codedateien mit Testdateien aus demselben Software-Repository abgeglichen, indem sichergestellt wurde, dass sie denselben Basisdateinamen teilen, wobei die Testdateien zusätzlich das Suffix „Test“ tragen. Zur Sicherstellung der Datenqualität wurden Filterkriterien angewandt, die sich an bewährten Heuristiken aus der Literatur orientieren [2] [12].

Die Auswahl der LLMs für die überwachte Feinabstimmung erfolgte unter Berücksichtigung der Codegenerierungsfähigkeiten, der Modellgröße und der Trainingsdaten. Auf Grundlage ihrer Leistung auf Benchmark-Datensätzen wie HumanEval [2] und MBPP [1] sowie ihrer öffentlichen Verfügbarkeit für Forschungszwecke wurden LLaMA 2 13B [20], Code Llama 13B [17] und Mistral 7B [10] ausgewählt.

Die überwachte Feinabstimmung erfolgte unter Verwendung der QLoRA-Methode (Quantized Low-Rank Adaptation), die eine effiziente Feinabstimmung von LLMs mit begrenzten Hardwareressourcen ermöglicht [4]. Dieser Ansatz kombiniert Quantisierung und Low-Rank Adaptation [8], um den Speicherbedarf und die Anzahl der trainierbaren Parameter zu reuzieren, ohne signifikante Leistungseinbußen zu verursachen.

Ergebnisse und Evaluation

Die Evaluation von TestGen-Dart erfolgte sowohl quantitativ als auch qualitativ, in Anlehnung an etablierte Evaluationsmethoden für Softwaretests [9]. Im Rahmen der quantitativen Evaluation wurden fünf verschiedene Modellversionen untersucht. Dabei erzielte TestGen-Dart_v0.2, das auf dem Basismodell Code Llama 13B basiert, die besten quantitativen Ergebnisse, gemessen an der niedrigsten Trainings- und Validierungsperplexität.

Die qualitative Evaluation konzentrierte sich auf die Fähigkeit der feinabgestimmten LLMs, syntaktisch und funktional korrekte Unittests zu generieren. TestGen-Dart_v0.2 zeigte hier bemerkenswerte Leistungen:

  • eine Verbesserung der syntaktischen Korrektheit um 15,38 Prozent gegenüber dem Basismodell Code Llama 13B,
  • eine Steigerung der funktionalen Korrektheit um 16,67 Prozent im Vergleich zu Code Llama 13B,
  • bessere Leistung gegenüber anderen vergleichbaren LLMs, wie LLaMA 2 13B, mit 25 Prozent mehr syntaktisch korrekten und 55,55 Prozent mehr funktional korrekten Unittests.

Die Ergebnisse von TestGen-Dart demonstrieren das Potenzial überwachter Feinabstimmung zur Verbesserung der Leistung von LLMs bei spezifischen Aufgaben wie der Unittest-Generierung für mobile Anwendungen. Die erzielte Kombination aus hoher Leistungsfähigkeit und kleiner Modellgröße ermöglicht eine effiziente Softwaretestgenerierung und macht TestGen-Dart attraktiv für praktische Anwendungen in der Softwareentwicklung.

Auf HuggingFace findet sich einen Link zu dem Modell. Anleitungen zur Benutzung findet man unter huggingface.co/jacobhoffmann/CodeLlama-13B-TestGen-Dart_v0.2#how-to-get-started-with-the-model (Tutorium: huggingface.co/docs/transformers/en/llm_tutorial, LM Studio: lmstudio.ai).

In der Praxis bietet sich TestGen-Dart für verschiedene Einsatzszenarien an. Eine typische Anwendung wäre die Integration in CI/CD-Architekturen, in welchen es automatisch Unittests für neue Funktionen generieren oder die Codeabdeckung bestehender Unittests erhöhen kann. Dies trägt dazu bei, Entwickler bei repetitiven Aufgaben zu unterstützen und die Softwaretestqualität zu verbessern. Besonders wertvoll kann TestGen-Dart bei der Modernisierung bestehender Codebasen sein, indem es hilft, automatisiert und damit schnell eine umfassende Testabdeckung für Legacy-Code aufzubauen. Auch Open-Source-Projekte, Start-ups und kleinere Entwicklerteams mit begrenzten Ressourcen können von der automatisierten Softwaretestgenerierung profitieren, um eine hohe Testabdeckung und damit potenziell eine verbesserte Codequalität zu erreichen.

Diskussion und Ausblick

Die Stärken von TestGen-Dart liegen in seiner Spezialisierung auf Softwaretestgenerierung und seiner damit einhergehenden Ressourceneffizienz. Die Fähigkeit, funktional korrekte Unittests mit begrenzten Ressourcen zu generieren, adressiert ein zentrales Problem in der Entwicklung mobiler Anwendungen. Allerdings gibt es auch Limitationen: TestGen-Dart ist stark von der Qualität und Repräsentativität der Trainingsdaten für die Softwaretestgenerierung abhängig, und nicht alle Testanforderungen können immer durch die generierten Softwaretests vollständig abgedeckt werden.

Zukünftige Entwicklungen könnten sich darauf fokussieren, Kontextinformationen aus Codekommentaren und Projektdokumentationen zu integrieren, um die Testabdeckung weiter zu erhöhen. Eine interessante Forschungsfrage wäre zudem, inwieweit TestGen-Dart um Fähigkeiten zur Generierung von UI-Tests oder Integrationstests erweitert werden könnte.

Im Rahmen weiterer Forschungsvorhaben wird TestGen-Dart in ein umfassenderes Testframework für mobile Anwendungen integriert, wie in Abbildung 2 dargestellt.

Abb. 2: Das KI-Testframework besteht aus zwei Hauptkomponenten: Im White-Box Testing (oben) generiert TestGen-Dart automatisch Unittests auf Basis des Quellcodes. Im Black-Box Testing (unten) wird ein Reinforcement-Learning-Agent (RL-Agent) eingesetzt, der mit der Benutzeroberfläche der Anwendung interagiert, Zustände analysiert, Aktionen ausführt und auf deren Ergebnisse reagiert, um die Benutzeroberfläche zu testen

Dieses Framework kombiniert LLMs für die Generierung von White-Box-Tests, wie Unittests, mit Reinforcement Learning (RL) für die Durchführung von Black-Box-Tests, insbesondere UI-Tests. Das Ziel ist eine ganzheitliche Testabdeckung, die sowohl die interne Codestruktur als auch das Benutzerverhalten berücksichtigt.

TestGen-Dart stellt einen wichtigen Schritt in der Weiterentwicklung des automatisierten Softwaretestings von mobilen Anwendungen dar. Durch die Kombination von KI-Technologie mit spezifischer Anpassung an die Aufgabe der Softwaretestgenerierung bietet es eine vielversprechende Lösung für eine zentrale Herausforderung in der Softwareentwicklung. Dieser Ansatz könnte in Zukunft dazu beitragen, den Softwaretestprozess schrittweise von manuellen und zeitaufwendigen Methoden hin zu stärker automatisierten Lösungen zu transformieren.

Die Einführung von Tools wie TestGen-Dart hat das Potenzial, die Effizienz erheblich zu verbessern, indem Entwickler bei der Erstellung von Softwaretests unterstützt werden. Dadurch gewinnen sie mehr Zeit für kreative und komplexe Aufgaben. Gleichzeitig können die Testabdeckung verbessert und die allgemeine Codequalität erhöht werden.

Literaturangaben

[1] J. Austin et al., Program Synthesis with Large Language Models, arXiv, 2021, siehe: arxiv.org/abs/2108.07732

[2] M. Chen et al., Evaluating Large Language Models Trained on Code, arXiv, 2021, siehe: doi.org/10.48550/arXiv.2107.03374

[3] E. Daka, G. Fraser, A Survey on Unit Testing Practices and Problems, in: IEEE 25th Int. Symposium on Software Reliability Engineering, Seiten 201 – 211, 2014, siehe: doi.org/10.1109/ISSRE.2014.11

[4] T. Dettmers et al., QLoRA: Efficient Finetuning of Quantized LLMs, arXiv, 2013, siehe: arxiv.org/abs/2305.14314

[5] N. Ding et al., Parameter-efficient fine-tuning of large-scale pre-trained language models, in: Nature Machine Intelligence, 5(3), Seiten 220 – 235, 2023, siehe: doi.org/10.1038/s42256-023-00626-4

[6] S. R. Dubey, S. K. Singh, B. B. Chaudhuri, Activation Functions in Deep Learning: A Comprehensive Survey and Benchmark, arXiv, 2022, siehe: doi.org/10.48550/arXiv.2109.14545

[7] H. V. Gamido, M. V. Gamido, Comparative Review of the Features of Automated Software Testing Tools, in: Int. J. of Electrical and Computer Engineering (IJECE), 9(5), 4473, 2019, siehe: doi.org/10.11591/ijece.v9i5.pp4473-4478

[8] E. J. Hu et al., LoRA: Low-Rank Adaptation of Large Language Models, arXiv, 2021, siehe arxiv.org/abs/2106.09685

[9] ISO, IEC, & IEEE, ISO/IEC/IEEE 24765:2017 – Systems and software engineering – Vocabulary. Int. Organization for Standardization, siehe: www.iso.org/standard/71952.html

[10] A. Q. Jiang et al., Mistral 7B, arXiv, 2023, siehe: doi.org/10.48550/arXiv.2310.06825

[11] J. Kaplan et al., Scaling Laws for Neural Language Models, arXiv, 2020, siehe: arxiv.org/abs/2001.08361

[12] H. Laurençon et al., The BigScience ROOTS Corpus: A 1.6TB Composite Multilingual Dataset, in: S. Koyejo et al. (Hrsg.), Advances in Neural Information Processing Systems (Bd. 35, S. 31809 – 31826), Curran Associates, Inc., 2022, siehe: proceedings.neurips.cc/paper_files/paper/2022/file/ce9e92e3de2372a4b93353eb7f3dc0bd-Paper-Datasets_and_Benchmarks.pdf

[13] Y. Li et al., Competition-level code generation with AlphaCode, in: Science, 378(6624), 1092 – 1097, 2022, siehe: doi.org/10.1126/science.abq1158

[14] H. Muccini, A. Di Francesco, P. Esposito, Software testing of mobile applications: Challenges and future research directions, in: 7th Int. Workshop on Automation of Software Test (AST), 29 – 35, 2012, siehe: doi.org/10.1109/IWAST.2012.6228987

[15] S. Nidhra, Black Box and White Box Testing Techniques – A Literature Review, in: Int. J. of Embedded Systems and Applications, 2(2), Seiten 29 – 50, 2012, siehe: doi.org/10.5121/ijesa.2012.2204

[16] OpenAI, GPT-4 Technical Report, arXiv, 2023, siehe: arXiv.org/abs/2303.08774

[17] B. Rozière et al., Code Llama: Open Foundation Models for Code, arXiv, 2023, siehe: arxiv.org/abs/2308.12950

[18] Statista, Annual number of mobile app downloads worldwide 2023, Statista, 2024, siehe: www.statista.com/statistics/271644/worldwide-free-and-paid-mobile-app-store-downloads

[19] H. Touvron et al., LLaMA: Open and Efficient Foundation Language Models, arXiv, 2023, siehe: doi.org/10.48550/arXiv.2302.13971

[20] H. Touvron et al., Llama 2: Open Foundation and Fine-Tuned Chat Models, arXiv, 2023, siehe: www.semanticscholar.org/paper/Llama-2%3A-Open-Foundation-and-Fine-Tuned-Chat-Models-Touvron-Martin/104b0bb1da562d53cbda87aec79ef6a2827d191a

[21] M. Tufano et al., Unit Test Case Generation with Transformers and Focal Context, arXiv, 2021, siehe: arxiv.org/abs/2009.05617

[22] A. Vaswani et al., Attention Is All You Need, in:31st Conf. on Neural Information Processing Systems (NIPS 2017), Long Beach, CA, USA, 2017, siehe: arxiv.org/abs/1706.03762

. . .

Author Image

Demian Frister

Wissenschaftlicher Mitarbeiter
Zu Inhalten

Demian Frister, der ursprünglich im Bereich der Robotik forschte, widmet sich am Karlsruher Institut für Technologie (KIT) der Anwendung von Maschinellem Lernen in der Softwareentwicklung, mit einem besonderen Schwerpunkt auf Softwaretesting. Darüber hinaus betreut er eine Vorlesung zu Softwarequalitätsmanagement am KIT und bringt Studierenden die Bedeutung von frühzeitiger Softwarequalitätskontrolle nahe.

Author Image

Jacob Hoffmann

Human-Centered AI Master
Zu Inhalten

Jacob Hoffmann beschäftigt sich am Karlsruher Institut für Technologie (KIT) mit Forschung im Bereich des Maschinellen Lernens, insbesondere mit dem Trainieren großer Sprachmodelle für spezifische Anwendungsfälle. Gleichzeitig studiert er an der Technischen Universität Dänemark den Masterstudiengang Menschzentrierte Künstliche Intelligenz, der sich der Erforschung der Schnittstelle zwischen Mensch und KI widmet.


Artikel teilen