Large Language Models on Software Refactoring
Metsola, Mikko (2024)
Metsola, Mikko
2024
Tietotekniikan DI-ohjelma - Master's Programme in Information Technology
Informaatioteknologian ja viestinnän tiedekunta - Faculty of Information Technology and Communication Sciences
This publication is copyrighted. You may download, display and print it for Your own personal use. Commercial use is prohibited.
Hyväksymispäivämäärä
2024-10-18
Julkaisun pysyvä osoite on
https://urn.fi/URN:NBN:fi:tuni-202409248876
https://urn.fi/URN:NBN:fi:tuni-202409248876
Tiivistelmä
The recent surge in popularity of large language models (LLM) such as OpenAI's GPT series of models has raised interest in the application of artificial intelligence (AI) in different fields, including software engineering. AI-powered programming assistants and code generation tools, namely GitHub Copilot, have decisively paved their way into common integrated development environments to provide feedback for software developers with programming tasks. These tasks may range from producing new software code, to providing suggestions for a programming task, to parsing through written code and analyzing it for potential improvements.
Maintaining existing software is a very resource intensive task. Software programs are rarely written in a way that do not need adjustments later on. Addressing bugs and introducing new features are common tasks for developers, which require a reasonable understanding of the code they are working on. Refactoring is the process of rewriting software code in an attempt to streamline further development and maintenance or to improve the underlying design of the software without making changes to the overall functionality of the software.
The thesis begins with an introduction to the topic of software quality. This aims to give a thorough understanding on which factors contribute to the quality of software. An overview of LLMs is presented as well as how they are generally applied to code generation. This thesis explores the extent to which a selection of four different LLMs can be utilized in code refactoring and what kinds of refactorings these LLMs are able to determine. This research is done by giving each LLM a piece of code to refactor. The outputs of these models are then evaluated on a variety of software metrics and commonly accepted code refactoring practices. With these results we can assess whether these language models could be applied in practice. Suurten kielimallien (Large Language Model, LLM), kuten OpenAI:n GPT-sarjan mallien, viimeaikainen suosion kasvu on ollut räjähdysmäistä, ja tämä on myös herättänyt merkittävää kiinnostusta mallien hyödyntämisestä eri teknologian aloilla, myös ohjelmistokehityksessä. Esimerkiksi tekoälyä hyödyntävä ohjelmointiavustaja Github Copilot on saavuttanut merkittävän suosion kehittäjien keskuudessa. Nämä tekoälytyökalut pystyvät auttamaan kehittäjiä uuden ohjelmakoodin luonnissa, antamaan ehdotuksia ohjelmointitehtävän suorittamiseen tai lukemaan ohjelmakoodia läpi ja antamaan ehdotuksia sen parantamiseksi.
Ohjelmiston koodin ylläpitäminen vaatii hyvin paljon resursseja, sillä ohjelmakoodia harvoin kirjoitetaan kerralla siten, ettei sitä tarvitsisi myöhemmin muuttaa. Ylläpito on yleensä joko vikojen korjaamista tai uusien toiminnallisuuksien luomista, jotka usein vaativat yleistä ymmärrystä ohjelmiston koodista. Ohjelmakoodin refaktorointi on prosessi, missä osa ohjelmakoodista luodaan uudelleen. Sen tavoitteena on suoraviivaistaa jatkokehitystä, selkeyttää ohjelmakoodin rakennetta tai mahdollisesti havaita sekä korjata koodissa esiintyviä virheitä. Refaktoroinnissa olennaista on se, että vaikka ohjelman sisäinen rakenne muuttuu, sen ulkoisen käytöksen tulisi pysyä samana.
Työn alussa esitellään mitkä tekijät vaikuttavat ohjelmiston laatuun ja millä keinoilla ohjelmistoja pyritään ylläpitämään. Lisäksi selitetään mitä kielimallit ovat, millaisia ne ovat rakenteeltaan ja kuinka niitä sovelletaan koodin generointiin. Työssä tutkitaan neljän suositun suuren kielimallin soveltuvuutta ohjelmakoodin refaktorointiin. Lisäksi työssä selvitetään, mitä refaktorointimenetelmiä mallit osaavat havaita annetusta koodinäytteestä. Tämä testataan antamalla kielimalleille syötteenä refaktoroitavaa ohjelmakoodia. Mallien tuottamat tulokset sitten kootaan yhteen ja arvioidaan erinäisten ohjelmistojen laadun arviointiin suunniteltujen mittarien perusteella sekä yleisten refaktorointikäytäntöjen perusteella. Näiden tuloksien avulla voidaan arvioida kielimallien soveltuvuutta käytännössä.
Maintaining existing software is a very resource intensive task. Software programs are rarely written in a way that do not need adjustments later on. Addressing bugs and introducing new features are common tasks for developers, which require a reasonable understanding of the code they are working on. Refactoring is the process of rewriting software code in an attempt to streamline further development and maintenance or to improve the underlying design of the software without making changes to the overall functionality of the software.
The thesis begins with an introduction to the topic of software quality. This aims to give a thorough understanding on which factors contribute to the quality of software. An overview of LLMs is presented as well as how they are generally applied to code generation. This thesis explores the extent to which a selection of four different LLMs can be utilized in code refactoring and what kinds of refactorings these LLMs are able to determine. This research is done by giving each LLM a piece of code to refactor. The outputs of these models are then evaluated on a variety of software metrics and commonly accepted code refactoring practices. With these results we can assess whether these language models could be applied in practice.
Ohjelmiston koodin ylläpitäminen vaatii hyvin paljon resursseja, sillä ohjelmakoodia harvoin kirjoitetaan kerralla siten, ettei sitä tarvitsisi myöhemmin muuttaa. Ylläpito on yleensä joko vikojen korjaamista tai uusien toiminnallisuuksien luomista, jotka usein vaativat yleistä ymmärrystä ohjelmiston koodista. Ohjelmakoodin refaktorointi on prosessi, missä osa ohjelmakoodista luodaan uudelleen. Sen tavoitteena on suoraviivaistaa jatkokehitystä, selkeyttää ohjelmakoodin rakennetta tai mahdollisesti havaita sekä korjata koodissa esiintyviä virheitä. Refaktoroinnissa olennaista on se, että vaikka ohjelman sisäinen rakenne muuttuu, sen ulkoisen käytöksen tulisi pysyä samana.
Työn alussa esitellään mitkä tekijät vaikuttavat ohjelmiston laatuun ja millä keinoilla ohjelmistoja pyritään ylläpitämään. Lisäksi selitetään mitä kielimallit ovat, millaisia ne ovat rakenteeltaan ja kuinka niitä sovelletaan koodin generointiin. Työssä tutkitaan neljän suositun suuren kielimallin soveltuvuutta ohjelmakoodin refaktorointiin. Lisäksi työssä selvitetään, mitä refaktorointimenetelmiä mallit osaavat havaita annetusta koodinäytteestä. Tämä testataan antamalla kielimalleille syötteenä refaktoroitavaa ohjelmakoodia. Mallien tuottamat tulokset sitten kootaan yhteen ja arvioidaan erinäisten ohjelmistojen laadun arviointiin suunniteltujen mittarien perusteella sekä yleisten refaktorointikäytäntöjen perusteella. Näiden tuloksien avulla voidaan arvioida kielimallien soveltuvuutta käytännössä.