210 lecturi

Studiul găsește mutații de cod AI ajutând dezvoltatorii să prindă bug-urile mai repede

Prea lung; A citi

Acest studiu arată că GPT-4 și alte LLM-uri pot genera mutații de cod diverse, care dezvăluie defecte în Java, depășind instrumentele tradiționale de testare a mutațiilor cu 18%.
featured image - Studiul găsește mutații de cod AI ajutând dezvoltatorii să prindă bug-urile mai repede
Mutation Technology Publications HackerNoon profile picture
0-item

Autorii :

(1) Bo Wang, Universitatea Jiaotong din Beijing, Beijing, China ([email protected]);

(2) Mingda Chen, Universitatea Jiaotong din Beijing, Beijing, China ([email protected]);

(3) Youfang Lin, Universitatea Jiaotong din Beijing, Beijing, China ([email protected]);

(4) Mike Papadakis, Universitatea din Luxemburg ([email protected]);

(5) Jie M. Zhang, King’s College London, Londra, Regatul Unit ([email protected]).

Authors:

(1) Bo Wang, Universitatea Jiaotong din Beijing, Beijing, China ([email protected]);

(2) Mingda Chen, Universitatea Jiaotong din Beijing, Beijing, China ([email protected]);

(3) Youfang Lin, Universitatea Jiaotong din Beijing, Beijing, China ([email protected]);

(4) Mike Papadakis, Universitatea din Luxemburg ([email protected]);

(5) Jie M. Zhang, King’s College London, Londra, Regatul Unit ([email protected]).

Abstract și1 Introducere

1 Introducere

2 Background and Related Work

2 Activități de fond și lucrări conexe

3 Study Design

3.1 Prezentare generală și întrebări de cercetare

3.2 Datele

3.3 Generația de mutații prin intermediul LLM

4.3 Metricile de evaluare

3.5 Setări experimentale

4 Evaluation Results

4.1 RQ1: Performanță în ceea ce privește costurile și utilizabilitatea

4.2 RQ2: Similitudinea comportamentală

4.3 RQ3: Impactul diferitelor prompte

RQ4: Impactul diferitelor LLM-uri

RQ5: Cauze de rădăcină și tipuri de erori ale mutațiilor non-compilabile

5 Discussion

5.1 Sensibilitate la setările selectate ale experimentului

5.2 Implicații

5.3 Threats to Validity

6 Conclusion and References

6 Concluzii și referințe

abstractă

Modelele lingvistice mari (LLM) au demonstrat un mare potențial în sarcinile legate de cod, dar utilitatea lor în testarea mutațiilor rămâne neexplorată. În acest scop, investigăm sistematic performanța LLM-urilor în generarea de mutații eficiente în raport cu utilizabilitatea, potențialul de detectare a defectelor și relația cu bug-urile reale. În special, efectuăm un studiu empiric la scară largă care implică 4 LLM-uri, inclusiv atât modele cu sursă deschisă, cât și cu sursă închisă, și 440 de bug-uri reale pe două benchmarks Java. Am constatat că, în comparație cu abordările existente, LLM-urile generează mutații mai diverse care sunt mai apropiate din punct de vedere comportamental de bug-urile reale, ceea ce duce la aproximativ 18% mai

1 Introducere

Testarea mutației este una dintre cele mai eficiente tehnici de testare a software-ului [17, 18, 27, 33, 59]. Se realizează prin producerea de variante ale programului prin efectuarea de modificări sintactice simple (adică mutații) în codul sursă al programului de origine (adică mutanți). Aceste variante formează obiectivele testării, într-un sens care solicită teste pentru a declanșa diferite comportamente pe programele originale și mutante. Un mutant este numit ucis sau viu în funcție de faptul dacă execuția testului duce la o ieșire diferită a programului (comportamentul observabil) față de cel al programului original sau nu. Proporția mutanților uciși pe întregul set de mutanți formează o metrică de testare a adecvării care se numește scor de mutație.


Deoarece mutațiile sunt obiectivele testării, eficacitatea metodei depinde în mare măsură de setul de mutanți pe care îl folosește.Tehnicile tradiționale folosesc transformări sintactice simple (reguli), numite operatori de mutație, care introduc modificări sintactice în fiecare locație de cod pe care o aplică [33, 59].Noi numim aceste abordări abordări bazate pe reguli.


Din păcate, abordările bazate pe reguli produc un număr mare de mutante redundante, adică mutanți care nu contribuie la procesul de testare [5, 57] și, astfel, exacerbează capetele de calcul ale metodei, precum și efortul uman implicat în examinarea mutanților vii. Pentru a aborda această problemă, cercetătorii valorifică abordările de învățare profundă pentru a forma operatori de mutații pe baza istoriei proiectului [62, 70, 73], cu speranța că acestea vor produce puține mutații, dar eficiente.


Cu toate acestea, întrebarea care mutanți ar trebui să fie utilizați atunci când se efectuează testarea mutațiilor rămâne deschisă din cauza următoarelor provocări: (1) Formarea mutațiilor eficiente. Pentru a fi eficiente, mutațiile trebuie să fie corecte din punct de vedere sintactic, ceea ce nu este cazul majorității metodelor existente bazate pe învățare, și sunt susceptibile de a dezvălui defecte [10, 80], adică au un potențial bun de a fi abordate cu defecte reale. În timp ce metodele existente sunt eficiente, există încă spațiu semnificativ pentru îmbunătățire [15]. (2) Formarea mutațiilor naturale trebuie să se alinieze la modelele și practicile de codificare naturale observate de dezvoltatori, astfel încât acestea să fie aliniate cu așteptările dezvoltatorului, adică să le facă să


Pentru a face față acestor provocări, ne propunem să folosim Modelele de Limbi Large (LLM), care au fost instruite în cod mare și pot produce cod asemănător cu omul [11]. În urma studiilor existente [26, 49, 65], am proiectat o comandă implicită care conține instrucțiuni de sarcină, elementul de cod care urmează să fie mutat, codul de metodă corespunzător și câteva exemple prelevate din bug-uri din lumea reală. am efectuat o evaluare la scară largă care a implicat 4 LLM-uri, 2 comerciale cu sursă închisă și 2 cu sursă deschisă, 440 de bug-uri din lumea reală din două benchmarks Java, adică Defects4J [37] și ConDefects [82], și a comparat cu tehnicile și instrumentele


Evaluarea noastră include atât o analiză cantitativă, cât și calitativă a mutațiilor generate de LLM-uri, comparându-le cu abordările existente pentru a evalua costul și eficacitatea acestora. În plus, studiem modul în care diferitele strategii de inginerie prompt și LLM-uri (de exemplu, GPT-3.5-Turbo [4], GPT-4-Turbo, CodeLlama-13bInstruct [64] și StarChat-β-16b [45]) afectează eficacitatea sarcinii.


Our results reveal that the best model for mutant generation is GPT-4 as it outperforms the other LLMs in all metrics used, i.e., produces less equivalent mutants, mutants with higher fault detection potential, as well as higher coupling and semantic similarity with real faults. GPT-3.5 is the second best in terms of fault detection potential, leading to a detection of 96.7% of bugs in Defects4J and 86.7% in ConDefects. From the rest of the techniques, Major is the best, with the potential to reveal 91.6% of bugs in Defects4J and 68.9% in ConDefects, indicating an advantage of approximately 18% for the GPT on ConDefects which is a newly and unseen dataset.


O altă constatare interesantă a analizei noastre se referă la diversitatea mutanților (măsurată în termeni de tipuri de noduri AST nou introduse). în special, rezultatele noastre arată că GPT-urile prezintă cea mai mare diversitate, introducând recent 45 de tipuri diferite de noduri AST, spre deosebire de doar 2 utilizate de abordările tradiționale, cum ar fi Major, și sumând toate abordările existente, indicând o contextualizare mult mai bună a abordării bazate pe LLM.


We also analyzed the mutations generated by GPT that fail to compile, a common issue with learning-based mutations, and found that they fall in 9 compilation error types with the Usage of Unknown Methods and Code Structural Destruction types being the most prevalent ones. This finding indicates that future approaches could focus on directing the LLMs in choosing the right method invocations when mutating.


Am înfășurat metoda noastră într-un instrument de mutație numitKumo, un instrument de generare a mutațiilor bazat pe LLM pentru Java. Pe baza datelor experimentale, am construit, de asemenea, un set de date care conține mutații de înaltă calitate generate de LLM care pot fi utilizate nu numai în testarea mutațiilor, ci și în alte aplicații de semințe de bug-uri, cum ar fi localizarea defectelor și predicția defectelor.


In summary, our paper makes the following main contributions:


• We investigate the applicability of LLMs in mutation testing. We perform extensive and detailed comparative experiments to evaluate LLMs against existing tools/methods. Our findings indicate that GPT models excel in generating mutations that closely mimic real bugs.


• Comparăm invitații diferite și găsim că învățarea cu câteva fotografii cu un context de cod adecvat arhivează cele mai bune performanțe.


• We analyze the error types of non-compilable mutations and figure out that method invocation and member assessment are more likely to lead LLMs to generate non-compilable mutations.


• Construim un set de date de înaltă calitate de mutații Java care include mutante echivalente analizate manual.


Acest document este disponibil în arhivă sub licența CC by 4.0 Deed (Attribution 4.0 International).

Acest document este disponibil în arhivă sub licența CC by 4.0 Deed (Attribution 4.0 International).

Disponibil în arhivă


Trending Topics

blockchaincryptocurrencyhackernoon-top-storyprogrammingsoftware-developmenttechnologystartuphackernoon-booksBitcoinbooks