Testdriven utveckling och stora språkmodeller: Enhetstester som prompt till ChatGPT att generera kod
2024 (Swedish)Independent thesis Basic level (degree of Bachelor), 10 credits / 15 HE credits
Student thesisAlternative title
Test Driven Design and Large Language Models: Java Unit Testing to Prompt ChatGPT Code Generation (English)
Abstract [sv]
Artificiell intelligens (AI) har fått en ökad uppmärksamhet inom mjukvaruutveckling med automatiserad kodgenerering som ett ständigt eftertraktat mål. Denna rapport behandlar en specifik utmaning med generativa AI-modeller som ChatGPT, som i sig är icke-deterministiska: Även med identiska parameterinställningar och instruktioner i prompten kan svaren från GPT-modellen variera mellan olika förfrågningar.
Testdriven utveckling (TDD) är en etablerad metod inom mjukvaruutveckling där tester skrivs tidigt i processen utifrån specifikationskrav, och kod implementeras för att möta dessa tester. För att använda genererad programkod i en TDD-miljö krävs en uppfattning om dess tillförlitlighet.
Ett kvantitativt experiment utformades för att utforska GPT-modellens förmåga att generera funktionell Java-programkod när den promptats med enhetstester med full branchtäckning och publikt gränssnitt. Javametoder med varierande kodkomplexitet valdes ut.
Ett system för automatiska API-anrop till OpenAi:s GPT-modell implementerades. Systemet kompilerade den generade koden och körde dess motsvarande testsvit. Statisk analys utfördes för att identifiera potentiella buggmönster i den genererade källkoden. Experimentet upprepades för att samla in mätpunkter för statistisk analys med både GPT-3.5 och GPT-4.
Resultaten visar att GPT-4 uppnådde en högre andel av lyckade enhetstester jämfört med GPT-3.5. Däremot uppvisade GPT-4 fler mönster för potentiella buggar i den statiska analysen och orsakade fler syntaktiska fel och avvikelser från förväntade metodsignaturer. Ingen uppenbar relation mellan uppmätta värden och kodkomplexitet fastställdes för metoder med låg komplexitet medan en högre komplexitet ledde till fler misslyckade enhetstester och syntaktiska fel, särskilt med GPT-4.
Abstract [en]
The role of Artificial Intelligence (AI) in software development has recently gained traction, with reliable automated code generation being a continually sought-after objective. This thesis addresses a specific issue with Generative AI models like ChatGPT, which are inherently non-deterministic: Despite identical parameter settings and instructions sent in prompts, responses from the GPT model can vary across different requests.
Test-Driven Development (TDD) is an established method where tests are written early based on specification requirements, and code is implemented to meet these tests. To make use of automatically generated code in a TDD process would require a sense of the code's reliability.
A quantitative experiment was designed to explore ChatGPT's ability to generate functional Java code when prompted with unit tests with complete branch coverage and public interface. Methods with varying complexity were selected.
A system for automatic API calls to ’OpenAIs GPT model was implemented. The system dynamically compiled the generated code and ran the corresponding test suites against it. Static analysis was conducted to identify potential bug patterns in the generated source code. The experiment was repeated to gather data points for statistical analysis, using both GPT-3.5 and GPT-4 models.
Results showed that GPT-4 achieved a higher percentage of successful unit tests compared to GPT-3.5. However, GPT-4 exhibited more bug-prone patterns in static analysis and caused more syntax errors and deviations from expected method signatures. No clear relationship between measured values and code complexity was established for methods with low complexity while higher complexity led to more failed unit tests and syntactic issues, particularly with GPT-4.
Place, publisher, year, edition, pages
Stockholm: KTH Royal Institute of Technology , 2024. , p. 63
Series
TRITA-EECS-EX ; 2024:288
Keywords [en]
Unit Testing, Java, Artificial Intelligence, ChatGPT, Large Language Models, Software Development, Test Driven Development
Keywords [sv]
Enhetstestning, Java, Artificiell intelligens, ChatGPT, Stora språkmodeller, Mjukvaruutveckling, Testdriven utveckling
National Category
Software Engineering
Identifiers
URN: urn:nbn:se:kth:diva-350890OAI: oai:DiVA.org:kth-350890DiVA, id: diva2:1885309
Presentation
2024-05-30, 304, Kistagången 16, Stockholm, 13:00 (Swedish)
Supervisors
Examiners
2024-08-142024-07-222024-08-14Bibliographically approved