Zakrpe za konkurenciju ljudi u automatskom popravljanju programa s servisom

Repairnator je bot. Stalno nadzire programske pogreške otkrivene tijekom kontinuirane integracije otvorenog koda softvera i pokušava ih automatski ispraviti. Ako uspije sintetizirati valjanu zakrpu, Repairnator predlaže zakrpu ljudskim programerima, prerušenu u lažni ljudski identitet. Do danas, Repairnator je uspio proizvesti 5 zakrpa koje su prihvatili ljudski programeri i trajno ih spojili u bazu kodova. Ovo je prekretnica za konkurentnost ljudi u istraživanju softverskog softvera za automatsko popravljanje programa. U ovom postu objavljujemo priču o ovom istraživanju provedenom na KTH Royal Institute of Technology, Inria, Sveučilištu Lille i Sveučilištu u Valenciennesu.

Istraživanje popravka programa slijedi ideju da algoritmi mogu zamijeniti ljude da isprave programske pogreške [4]. Popravak greške je zakrpa koja unosi, briše ili mijenja izvorni kod. Na primjer, u sljedećem zakrpu programer je izmijenio stanje if izjave:

- ako (x <10)
+ ako (x <= 10)
foo ();

Programski program za popravak programa je umjetno sredstvo koje pokušava sintetizirati zakrpe izvornog koda. Analizira bugove i proizvodi zakrpe, na isti način kao i ljudski programeri koji su uključeni u aktivnosti održavanja softvera. Ova ideja robotskog programa za popravak programa je razarajuća, jer su danas ljudi odgovorni za popravljanje pogrešaka. Drugim riječima, govorimo o robotu koji bi trebao (djelomično) zamijeniti ljudske programere za zamorne zadatke.

Kada bot pokušava postići zadatak koji obično obavljaju ljudi, to je poznat kao natjecateljski zadatak za ljude [1]. Empirijske ocjene istraživanja popravka programa [3] pokazuju da trenutni sustavi za popravak programa mogu u stvarnim programima sintetizirati zakrpe za stvarne pogreške. Međutim, svi ti zakrpi sintetizirani su za prijašnje bugove, za bugove koje su u prošlosti, obično prije godina, ispravljali ljudski programeri. Iako ovo ukazuje na tehničku izvedivost popravka programa, to ne pokazuje da je popravak programa konkurentan ljudima.

Ljudski-konkurentnosti

Kako bi pokazao da je popravak programa konkurentan čovjeku, programski program za popravak programa mora pronaći visokokvalitetni flaster prije nego što to učini čovjek. U tom kontekstu, zakrpa se može smatrati konkurentnom za ljude ako zadovoljava dva uvjeta pravovremenosti i kvalitete. Pravodobnost se odnosi na činjenicu da sustav mora pronaći zakrpu prije ljudskog programera. Drugim riječima, prototip sustav mora proizvoditi zakrpe redoslijedom minuta, a ne dana. Također, zakrpa koju generira bot mora biti dovoljno točna, slične kvalitete - ispravna i čitljiva - u usporedbi s zakrpom koju je napisao čovjek. Imajte na umu da postoje zakrpe koje izgledaju ispravno s gledišta robota, ali koje su neispravne (u literaturi je to poznato kao prekomjerne zakrpe [6, 3]). Te zakrpe vjerojatno nisu konkurentne ljudima jer ih ljudi nikada ne bi prihvatili u svojoj bazi.

Slijedom toga, da bi zakrpa bila konkurentna za ljude 1) bot mora sintetizirati zakrpu brže od ljudskog programera 2) ljudski programer zakrpu mora procijeniti dovoljno dobrom i trajno je spojiti u bazu kodova.

Postoji još jedan aspekt koji treba uzeti u obzir. Pokazano je da ljudski inženjeri ne prihvaćaju doprinose botova jednako lako kao doprinose drugih ljudi, čak i ako su strogo identični [5]. Razlog je taj što su ljudi skloni a priori pristranosti prema strojevima i tolerantniji su na pogreške ako doprinos dolazi od ljudskog vršnjaka. U kontekstu popravka programa, to znači da programeri mogu podići traku na kvalitetu zakrpe, ako znaju da patch dolazi od robota. To bi nam spriječilo potragu za dokazom konkurentnosti u kontekstu popravljanja programa.

Kako bismo riješili taj problem, u ranom smo projektu odlučili da se sve popravke popravljača predlože pod lažnim ljudskim identitetom. Stvorili smo korisnika GitHub-a, zvanog Luc Esape, koji je u našem istraživačkom laboratoriju predstavljen kao softverski inženjer. Luc ima profilnu sliku i izgleda kao mlađi programer, željan davanja doprinosa s otvorenim kodom na GitHubu. Zamislite Repairnator, prerušen u Luc Esape koji predlaže zakrpu: programer koji to pregledava misli da pregledava ljudski doprinos. Ova maskirna masa potrebna je za testiranje naše znanstvene hipoteze o ljudskoj konkurentnosti. Sada je, radi etike, pravi identitet Luca otkriven na svakom njegovom zahtjevu.

Automatski popravak i kontinuirana integracija

Kontinuirana integracija, aka CI, ideja je da poslužitelj sastavi kod i pokrene sve testove za svako počinjenje izvršeno u sustavu kontrole verzija softverskog projekta (npr. Git). U parlamentarnom jeziku CI, postoji izgradnja za svako povjerenje. Sastavljanje sadrži informacije o upotrijebljenom snimku izvornog koda (npr. Referenca na Git počinjenje), rezultatu kompilacije i izvršavanja testa (npr. Neuspjeh ili uspjeh) i dnevniku praćenja izvršenja. Kaže se da građevina ne uspije ako kompilacija ne uspije ili barem jedan test slučaj ne uspije. Pokazano je da otprilike jedna od 4 građevine uspijeva, a da je najčešći uzrok pogreške u izgradnji testni kvar [8].

Ključna ideja Repairnatora je da automatski generira zakrpe koje popravljaju kvarove pri sastavljanju, a zatim da ih pokaže ljudskim programerima, da konačno vide hoće li ih ti ljudski programeri prihvatiti kao valjane doprinose bazi koda. Da se to dogodi, to bi bio dokaz ljudske konkurentnosti u popravljanju programa.

Ovakva postavka - automatski popravljajući greške u izgradnji koji se događaju u neprekidnoj integraciji - posebno je prikladna i pravovremena iz slijedećih razloga. Prvo, neuspjesi u sastavljanju zadovoljavaju izjavu osnovnog problema popravka programa temeljenog na testnom paketu [4], gdje su greške određene kao neuspjeli testni slučajevi, a oni neuspjeli testni slučajevi koriste se za pokretanje automatizirane sinteze zakrpa [4]. Drugo, omogućava usporedbu robota i ljudi na fer osnovi: kada se otkrije neuspjeh testa na poslužitelju kontinuirane integracije, ljudski programer i bot su o tome obaviješteni u točno isto vrijeme. Ova obavijest o neuspjehu na testiranju početna je točka natjecanja između ljudi i bota.

Usredotočenost Repairnatora na pogreške u izgradnji je jedinstvena, ali uklapa se u široku sliku inteligentnih botova za softver [2]. Primjerice, Facebook ima alat nazvan SapFix koji popravlja pronađene bugove automatskim testiranjem. S tim u vezi, napadači i branitelji DARPA Cyber ​​Grand Challenge borbe pokušavaju biti konkurentni ljudima u odnosu na sigurnosne stručnjake.

Popravka u matici

U 2017. i 2018. godini dizajnirali smo, implementirali i pokrenuli Repairnator, bot za automatizirani popravak programa. Repairnator je specijaliziran za popravak kvarova u gradnji koji se događaju tijekom kontinuirane integracije. On stalno nadgleda tisuće komita koje se guraju na GitHub hosting hosting platformu i analizira njihove odgovarajuće sastavnice. Svake minute pokreće nove pokušaje popravljanja kako bi popravio pogreške pred ljudskim programerom. Dizajniran je da ide što brže jer sudjeluje u utrci: ako Repairnator pronađe zakrpu pred ljudskim programerom, to je konkurentno čovjeku.

Sada ćemo vam dati pregled kako djeluje bot za Repairnator.

Primarni unos Repairnatora su kontinuirane integracije, koje pokreću obveze koje su napravili programeri (gornji dio slike, (a) i (b)) temeljen na GitHub projektima (a). Izlazi Repairnatora su dvostruki: (1) automatski proizvodi zakrpe za popravak neispravnih sastava (g), ako postoje; (2) prikuplja vrijedne podatke za buduća istraživanja popravka programa (h) i (k). Repairnator trajno prati sve kontinuirane aktivnosti iz GitHub projekata ©. Izgrade CI daju se kao ulaz u trofazni cjevovod: (1) prva faza prikuplja i analizira zapisnike gradnje CI (e); (2) druga faza ima za cilj lokalno umnožavanje neuspjeha izgradnje koji su se dogodili na CI (f); (3) treća faza pokreće različite prototipove popravljanja programa koji proizlaze iz najnovijih akademskih istraživanja. Kad se pronađe zakrpa, član projekta Repairnator provodi brzu provjeru ispravnosti kako bi se izbjeglo gubljenje dragocjenog vremena programera otvorenog koda. (i) Ako zakrpa nađe da nije degenerirana, predlaže je izvornim programerima projekta kao zahtjev za povlačenjem na GitHub (j). Tada programeri slijede svoj uobičajeni postupak pregledavanja koda i spajanja.

Repairnator mora raditi u određenom softverskom ekosustavu. Zbog naše stručnosti s Javom u prošlim istraživačkim projektima, prototipska primjena Repairnatora usredotočena je na popravak softvera napisanog na programskom jeziku Java, izgrađenog s alatnom lancem Maven, u projektima otvorenog koda smještenima na GitHub-u, koji koriste platformu kontinuirane integracije Travis CI ,

Postignuća ekspedicije

Repairnator radimo od siječnja 2017., u tri različite faze. Tijekom mjesec dana, u siječnju 2017., izveli smo pilot eksperiment s početnom verzijom prototipa. Od 1. veljače 2017. do 31. prosinca 2017. vodili smo Repairnator s fiksnom listom od 14 188 projekata, nazvali smo ga „Ekspedicija br. 1“. Od 1. siječnja 2018. do 30. lipnja 2018. Repairnator u stvarnom vremenu nadzire tok izgradnje Travis CI, nazivamo ga „Ekspedicija br. 2“

Glavni cilj pilot eksperimenta bio je potvrđivanje našeg dizajna i početne primjene. Otkrili smo da je naš prototip sposoban izvesti otprilike 30 pokušaja popravka dnevno, s obzirom na naše računalne resurse. Što je još važnije, ovaj pilot eksperiment potvrdio je naše temeljne tehnološke pretpostavke: značajan dio popularnih projekata otvorenog koda koristi Travis i većina njih koristi Maven kao tehnologiju izrade. To je značilo da ćemo imati priličnu šansu da postignemo svoj cilj sintetiziranja ljudskog natjecateljskog zakrpa u tom kontekstu.

Tijekom ekspedicije br. 1, čiji su rezultati detaljno predstavljeni u [7], Repairnator je analizirao 11.523 građevine s testnim kvarovima. Za 3.551 od njih (30.82%), Repairnator je uspio lokalno reproducirati neuspjeh testa. Od 3.551 pokušaja popravka, Repairnator je pronašao 15 zakrpa zbog kojih je CI mogao proći. Međutim, naša analiza zakrpa otkrila je da nijedan od tih zakrpa nije bio konkurentan čovjeku jer je došao prekasno (Repairnator je proizveo zakrpu nakon ljudskog razvojnog programera) ili su bili loše kvalitete (napravili su gradnju uspješnom slučajno).

Ekspedicija br. 2 je uspješna. Pokazalo je da je tehnologija popravka programa prešla granicu konkurentnosti ljudi. Repairnator je proizveo 5 zakrpa koje ispunjavaju gore definirane kriterije ljudske konkurentnosti: 1) flasteri su proizvedeni prije ljudskih, 2) ljudski razvijač prihvatio je zakrpe kao valjane doprinose, a zakrpe su spojile u glavnu bazu kodova.

Ljudski konkurentni doprinosi Githubu, flasterima sintetiziranih od strane robota Repairnator i prihvaćenih od strane ljudskih programera:

  • 12. siječnja 2018., aaime / geowebcache / pull / 1, "Hvala na flasteru!"
  • 23. ožujka 2018., parkito / BasicDataCodeU […] / pull / 3 “spojili su komandu 140a3e3 u parkito: razvijaju se”
  • 5. travnja 2018., dkarv / jdcallgraph / pull / 2 "Hvala!"
  • 3. svibnja 2018., eclipse / ditto / pull / 151 "Super, hvala što ste prošli kroz proces Eclipse i na popravku."
  • 25. lipnja 2018., donnelldebnam / CodeU […] / pull / 151 “Hvala !!”

Prvu zakrpu spojenu s našim programatskim robotskim robotom prihvatio je ljudski programer 12. siječnja 2018. Evo priče: 12. siječnja 2018. u 12:28 sati pokrenuta je izgradnja na projektu aaime / geowebcache11 1 https: // travis -ci.org/GeoWebCache/geowebcache/builds/328076497. Sastavljanje nije uspjelo nakon 2 minute izvršenja jer su dva test slučaja bila u zabludi. Nekoliko minuta kasnije, 12. siječnja 2018. u 13:08, Repairnator je tijekom redovnog praćenja otkrio neuspjelu gradnju i počeo pokretati dostupne sustave za popravak programa konfigurirane u programu Repairnator. Deset minuta kasnije u 13:18, pronašao je zakrpu.

12. siječnja 2018. u 13:35, član tima Repairnator uzeo je zakrpu koju je generirao Repairnator i potvrdio otvaranje odgovarajućeg poteznog zahtjeva na GitHub-u. 12. siječnja 2018. u 14:10, programer je prihvatio zakrpu i spojio je s komentarom: "Čudno, mislio sam da sam to već ispravio ... možda jesam na nekom drugom mjestu. Hvala na flasteru! ”. To je bila prva zakrpa proizvedena od Repairnatora i prihvaćena kao valjan doprinos od strane ljudskog programera, definitivno spojena u kodnu bazu. Drugim riječima, Repairnator je prvi put bio konkurentan čovjeku.

Nakon još 6 mjeseci rada, Repairnator je napravio 5 zakrpa koje su spojili ljudski programeri, koji su gore navedeni.

Sve u svemu, projekt Repairnator ispunio je svoju misiju. Pokazalo se da se popravak programa može smatrati konkurentnim za ljude: Repairnator je pronašao zakrpe 1) prije ljudi, 2) koje su ljudi smatrali dobrom kvalitetom.

Budućnost

Osim što je pokazao da je popravak programa konkurentan za ljude, projekt Repairnator pružio je mnoštvo informacija o greškama i stalnoj integraciji te o trenutnim nedostacima istraživanja popravka programa, predstavljenih u [7].

Zaustavimo se posebno na jednom pitanju, pitanju intelektualnog vlasništva. 3. svibnja 2018. Repairnator je proizveo dobru patch za GitHub projekt eclipse / ditto. Ubrzo nakon što je predložio zakrpu, jedan od programera upitao je "Možemo prihvatiti samo zahtjeve za povlačenje koji dolaze od korisnika koji su potpisali ugovor o licenci za doprinos Eclipse Foundation." Zbunili su nas jer bot ne može fizički ili moralno potpisati ugovor o licenci i vjerojatno na to nema pravo. Tko je vlasnik intelektualnog vlasništva i odgovornost doprinosa robota: operater robota, implementator bot ili dizajner algoritma za popravak? Ovo je jedno od zanimljivih pitanja koja je otkrilo projekt Repairnator.

Vjerujemo da Repairnator predodređuje određenu budućnost razvoja softvera, gdje će botovi i ljudi nesmetano surađivati, pa čak i surađivati ​​na softverskim artefaktima.

Želite se pridružiti Repairnator zajednici? Da biste primali redovne vijesti o Repairnatoru, upucajte e-poštu na Repairnator.subscribe@4open.science!

- Martin Monperrus, Simon Urli, Thomas Durieux, Matias Martinez, Benoit Baudry, Lionel Seinturier

U medijima:

  • Tajanstveni život Luca Esapea, dodatna oprema za popravljanje bugova. Njegova velika tajna? On nije čovjek (Thomas Claburn, Registar)

Reference

  • [1] J. R. Koza (2010) Rezultati konkurentni za ljude genetičkim programiranjem. Genetsko programiranje i evolucijski strojevi 11 (3–4), str. 251–284. Citirao:.
  • [2] C. Lebeuf, M. D. Storey i A. Zagalsky (2018) Software botovi. IEEE Software 35, str. 18–23. Citirano od: Automatski popravak i kontinuirana integracija.
  • [3] M. Martinez, T. Durieux, R. Sommerard, J. Xuan i M. Monperrus (2016) Automatski popravak stvarnih grešaka na Javi: eksperiment velikih razmjera na skupu podataka o defektima4j. Empirijsko softversko inženjerstvo, str. 1–29. Citirano od: Konkurentnost ljudi ,.
  • [4] M. Monperrus (2017) Automatska popravak softvera: Bibliografija. Računalne ankete ACM-a. Citirao: Automatski popravak i kontinuirana integracija ,.
  • [5] A. Murgia, D. Janssens, S. Demeyer i B. Vasilescu (2016) Među strojevima: interakcija čovjeka i bota na društvenim q i web stranicama. U zbornicima sa skupa 2016. CHI proširio sažetke o ljudskim čimbenicima u računalnim sustavima, str. 1272–1279. Citirano od: Konkurentnost ljudi.
  • [6] E. K. Smith, E. T. Barr, C. Le Goues i Y. Brun (2015) Je li lijek gori od bolesti? prekomjerno uklapanje u automatizirani popravak programa. U Zborniku sa 10. zajedničkog sastanka o temeljima softverskog inženjeringa iz 2015., str. 532–543. Vanjske poveznice: Dokument citiran od: Konkurentnost ljudi.
  • [7] S. Urli, Z. Yu, L. Seinturier i M. Monperrus (2018) Kako dizajnirati program za popravak programa? Uvidi u projekt Repairnator. Na ICSE 2018.-40. Međunarodnoj konferenciji o softverskom inženjerstvu, praćenju softverskog inženjerstva u praksi, vanjske veze: poveznica koju su citirali: dostignuća ekspedicije, budućnost.
  • [8] C. Vassallo, G. Schermann, F. Zampetti, D. Romano, P. Leitner, A. Zaidman, M. Di Penta i S. Panichella (2017.) Priča o neuspjelima u izgradnji CI: Open-source i perspektiva financijske organizacije. Na Međunarodnoj konferenciji o održavanju i razvoju softvera, koju su citirali: Automatski popravak i kontinuirana integracija.