Закрпе за конкуренцију људи у аутоматском поправљању програма помоћу сервисатора

Репаирнатор је бот. Стално надгледа грешке софтвера откривене током континуиране интеграције софтвера отвореног кода и покушава их аутоматски исправити. Ако успе да синтетише важећу закрпу, Репаирнатор предлаже закрпу људским програмерима, прерушену у лажни људски идентитет. До данас, Репаирнатор је успео да произведе 5 закрпа које су прихватили људски програмери и трајно их спојили у базу кодова. Ово је прекретница за конкурентност људи у истраживању софтверског софтвера за аутоматску поправку програма. У овом посту испричамо причу о овом истраживању урађеном на КТХ Роиал Институте оф Тецхнологи, Инриа, Универзитету Лилле и Универзитету Валенциеннес.

Истраживање поправка програма следи идеју да алгоритми могу заменити људе да исправе програмске грешке [4]. Исправка грешке је закрпа која убацује, брише или мења изворни код. На пример, у следећем закрпу програмер је променио стање иф изјаве:

- ако (к <10)
+ ако (к <= 10)
фоо ();

Бот за поправак програма је вештачко средство које покушава да синтетише закрпе изворног кода. Анализира грешке и производи закрпе, на исти начин као и људски програмери који су укључени у активности одржавања софтвера. Ова идеја роботског програма за поправак програма је разарајућа, јер су данас људи одговорни за поправљање грешака. Другим речима, говоримо о роботу који има за циљ да (делимично) замени људске програмере због заморних задатака.

Када бот покушава да постигне задатак који обично раде људи, то је познат као такмичарски задатак човека [1]. Емпиријске оцене истраживања поправка програма [3] показују да тренутни системи за поправак програма могу да синтетишу закрпе за стварне грешке у стварним програмима. Међутим, сви ти закрпи синтетизовани су за прошле грешке, за грешке које су фиксирали људски програмери у прошлости, обично пре година. Иако ово указује на техничку изводљивост поправка програма, ово не показује да је поправак програма конкурентан људима.

Конкурентност људи

Да би показао да је поправка програма конкурентна за човека, бот за поправак програма мора да нађе висококвалитетну закрпу пре него што то учини човек. У том контексту, закрпа се може сматрати конкурентном за људе ако задовољава два услова правовремености и квалитета. Правовременост се односи на чињеницу да систем мора пронаћи закрпу пред људским програмером. Другим речима, прототип систем мора да производи закрпе редоследом минута, а не дана. Такође, закрпа коју генерише бот мора бити довољно тачна, сличног квалитета - тачна и читљива - у поређењу са закрпом коју је написао човек. Имајте на уму да постоје закрпе које са гледишта робота изгледају исправно, а које су нетачне (у литератури је то познато као преклапање закрпа [6, 3]). Те закрпе не могу бити конкурентне људима, јер их људи никада не би прихватили у својој бази података.

Сходно томе, да би закрпа била компетитивна за људе 1) бот мора синтетизовати закрпу брже од људског програмера 2) људски програмер закрпу мора проценити довољно добро и трајно је спојити у базу кодова.

Постоји још један аспект који треба узети у обзир. Показано је да људски инжењери не прихватају доприносе ботова једнако лако као доприноси других људи, чак и ако су строго идентични [5]. Разлог је тај што су људи склони а приори пристрасности према машинама и толерантнији су до грешака ако допринос долази од људског вршњака. У контексту поправка програма, то значи да програмери могу ставити вишу траку на квалитет закрпе, ако знају да закрпа долази од робота. То би омело нашу потрагу за доказом конкурентности људи у контексту поправљања програма.

Да бисмо превазишли овај проблем, у току пројекта смо одлучили да се све поправке поправљача предложе под лажним људским идентитетом. Направили смо корисника ГитХуб-а, званог Луц Есапе, који је представљен као софтверски инжењер у нашој истраживачкој лабораторији. Луц има профилну слику и изгледа као млађи програмер, жељан давања доприноса отвореног кода на ГитХуб-у. Замислите сада Репаирнатор, прерушен у Луц Есапе који предлаже закрпу: програмер који то прегледава мисли да прегледава људски допринос. Ова маскирна маса потребна је за тестирање наше научне хипотезе о људској конкурентности. Сада, ради етике, прави идентитет Луца откривен је на сваком његовом захтеву.

Аутоматско поправљање и континуирана интеграција

Континуирана интеграција, ака ЦИ, је идеја да сервер састави код и покрене све тестове за свако извршење извршено у систему контроле верзија софтверског пројекта (нпр. Гит). У ЦИ парламентарном делу, постоји изградња за сваку обавезу. Састављање садржи информације о кориштеном снимку изворног кода (нпр. Референца на Гит-ов ангажман), резултату компилације и извођења теста (нпр. Неуспех или успех) и дневнику праћења извршења. Каже се да конструкција не успева ако компилација не успе или бар један тест случај не успе. Показано је да отприлике једна од 4 конструкције не успева и да је најчешћи узрок грешке у изградњи тестни квар [8].

Кључна идеја Репаирнатора је да аутоматски генерира закрпе које поправљају грешке при састављању, а затим да их покаже људским програмерима, да би коначно видели да ли ће их ти људски програмери прихватити као валидне доприносе бази кода. Ако се то догоди, то би био доказ људске конкурентности у поправљању програма.

Оваква поставка - аутоматски поправљајући грешке у изградњи који се дешавају у сталној интеграцији - нарочито је погодна и благовремена из следећих разлога. Прво, кварови уградње задовољавају суштински проблем поправка програма на основу програма тестирања [4], где се грешке наводе као неуспешни тестни случајеви, а они неуспешни тест случајеви се користе за покретање аутоматизоване синтезе закрпа [4]. Друго, омогућава поређење ботова и људи на фер основи: када се открије неуспешни тест на серверу континуиране интеграције, људски програмер и бот се обавештавају о томе у исто време. Ово обавештење о неуспеху на тесту почетна је точка такмичења између људи и бота.

Фокус поправљача на грешке у изградњи је јединствен, али уклапа се у ширу слику интелигентних ботова за софтвер [2]. На пример, Фацебоок има алат под називом СапФик који поправља грешке пронађене аутоматским тестирањем. Такође у вези са тим, нападачи и браниоци ДАРПА Цибер Гранд Цхалленге-а покушавају бити конкурентни људима у погледу безбедносних стручњака.

Поправка у матици

У 2017–2018. Години дизајнирали смо, имплементирали и радили Репаирнатор, бот за аутоматизовану поправку програма. Репаирнатор је специјализован за поправку кварова у конструкцији који се дешавају током континуиране интеграције. Стално прати хиљаде комита које се гурају на ГитХуб хостинг хостинг платформу и анализира њихове одговарајуће верзије. Сваког тренутка покреће нове покушаје поправка како би поправио грешке пред људским програмером. Дизајниран је да прође што је брже могуће јер учествује у трци: ако Репаирнатор пронађе закрпу пред људским програмером, биће конкурентан људима.

Сада ћемо вам дати преглед како функционише Репаирнатор бот.

Примарни унос Репаирнатора су континуиране интеграције, које покрећу обавезе које су направили програмери (горњи део слике, (а) и (б)) на основу ГитХуб пројеката (а). Излази Репаирнатора су двоструки: (1) аутоматски производи закрпе за поправљање кварова (г), ако постоје; (2) прикупља вриједне податке за будућа истраживања поправка програма (х) и (к). Репаирнатор трајно прати све континуиране активности из ГитХуб пројеката ©. Конструкције ЦИ дају се као улаз у трофазни цевовод: (1) прва фаза прикупља и анализира записе о изградњи ЦИ (е); (2) друга фаза има за циљ локалну репродукцију грешака у изградњи који су се догодили на ЦИ (ф); (3) трећа фаза покреће различите прототипове поправки програма који долазе из најновијих академских истраживања. Када се закрпа нађе, члан пројекта Репаирнатор врши брзу проверу исправности, како не би трошио драгоцено време на програмере отвореног кода. (и) Ако закрпа нађе да није дегенерирана, она је предлаже изворним програмерима пројекта као захтјев за повлачењем на ГитХуб (ј). Тада програмери следе уобичајени поступак прегледа кода и спајање.

Репаирнатор мора да ради у датом софтверском екосистему. Захваљујући нашој експертизи с Јава у претходним истраживачким пројектима, прототипска примена Репаирнатора фокусирана је на поправку софтвера написаног на Јава програмском језику, изграђеног с алатном ланцем Мавен, у пројектима отвореног кода угошћеним на ГитХуб-у, који користе платформу континуиране интеграције Травис ЦИ. .

Постигнућа експедиције

Репаирнатор радимо од јануара 2017., у три различите фазе. Током једног месеца, у јануару 2017. године, извели смо пилот експеримент са почетном верзијом прототипа. Од 1. фебруара 2017. до 31. децембра 2017. водили смо Репаирнатор са фиксном листом од 14.188 пројеката, назвали смо га „експедиција # 1“. Од 1. јануара 2018. до 30. јуна 2018. Репаирнатор надгледа Травис ЦИ ток градње у реалном времену, називамо га „експедиција бр. 2“

Главни циљ пилот експеримента био је потврђивање нашег дизајна и почетне примене. Открили смо да је наш прототип способан да изводи отприлике 30 покушаја поправке дневно, с обзиром на наше рачунарске ресурсе. Што је још важније, овај пилот експеримент потврдио је наше темељне технолошке претпоставке: значајан део популарних пројеката отвореног кода користи Травис и већина њих користи Мавен као технологију за прављење. То је значило да ћемо имати приличну шансу да постигнемо свој циљ синтетизовања закрпа конкурентног човеку у том контексту.

Током експедиције бр. 1, чији су резултати детаљно представљени у [7], Репаирнатор је анализирао 11.523 грађевине са испитима кварова. За 3.551 од њих (30.82%), Репаирнатор је био у стању да локално репродукује квар на тесту. Од 3.551 покушаја поправка, Репаирнатор је пронашао 15 закрпа које су могле да прођу ЦИ. Међутим, наша анализа закрпа открила је да ниједан од тих закрпа није био конкурентан човеку, јер су дошли прекасно (Репаирнатор је произвео закрпу након људског програмера) или су лошег квалитета (направили су прављење успеха случајно).

Експедиција бр. 2 је успешна. Показало се да је технологија поправке програма прешла границу конкурентности људи. Репаирнатор је произвео 5 закрпа које испуњавају горе дефинисане критеријуме конкурентности људи: 1) закрпе су произведене пре људских, 2) људски програмер је закрпе прихватио као ваљане доприносе и закрпе су спојене у главну кодну базу.

Људски конкурентни доприноси Гитхуб-у, закрпе синтетизоване од стране робота Репаирнатор и прихваћене од стране људских програмера:

  • 12. јануара 2018., ааиме / геовебцацхе / пулл / 1, "Хвала за закрпу!"
  • 23. марта 2018., паркито / БасицДатаЦодеУ […] / пулл / 3 „спојили команду 140а3е3 у паркито: развијај“
  • 5. априла 2018. године, дкарв / јдцаллграпх / пулл / 2 "Хвала!"
  • 3. маја 2018. ецлипсе / дитто / пулл / 151 "Супер, хвала што сте прошли кроз процес Ецлипсе и на исправци."
  • 25. јуна 2018., доннеллдебнам / ЦодеУ […] / пулл / 151 “Хвала !!”

Прву закрпу спојену са нашим програмом за поправљање програма прихватио је људски програмер 12. јануара 2018. Ево приче: 12. јануара 2018. у 12.28 сати покренута је изградња на пројекту ааиме / геовебцацхе11 1 хттпс: // травис -ци.орг/ГеоВебЦацхе/геовебцацхе/буилдс/328076497. Састављање није успело након 2 минута извршења, јер су два тест случаја била у грешци. Неколико минута касније, 12. јануара 2018. у 13:08, Репаирнатор је током редовног праћења открио неуспелу конструкцију и почео да покреће доступне системе за поправак програма конфигурисане у програму Репаирнатор. Десет минута касније у 13:18, пронашао је закрпу.

12. јануара 2018. у 13:35, члан тима Репаирнатор узео је закрпу коју је Репаирнатор генерирао и потврдио отварање одговарајућег потезног захтева на ГитХуб-у. 12. јануара 2018. у 14:10, програмер је прихватио закрпу и спојио је са коментаром: „Чудно, мислио сам да сам ово већ поправио ... можда јесам на неком другом месту. Хвала на закрпи! “. То је била прва закрпа произведена од Репаирнатора и прихваћена као валидан допринос од стране људског програмера, дефинитивно спојена у кодну базу. Другим речима, Репаирнатор је први пут био конкурентан човеку.

Након још 6 месеци рада, Репаирнатор је имао 5 закрпа које су спојили људски програмери, који су горе наведени.

Све у свему, пројекат Репаирнатор испунио је своју мисију. Показало се да се поправак програма може сматрати конкурентним за људе: Репаирнатор је пронашао закрпе 1) пред људима, 2) које су људи сматрали добрим квалитетом.

Будућност

Поред тога што је показао да је поправка програма конкурентна за људе, пројекат Репаирнатор пружио је мноштво информација о грешкама и сталној интеграцији и тренутним недостацима истраживања поправка програма, представљених у [7].

Зауставимо се посебно на једном питању, питању интелектуалног власништва. 3. маја 2018, Репаирнатор је произвео добру закрпу за ГитХуб пројекат ецлипсе / дитто. Убрзо након што је предложио закрпу, један од програмера упитао је „Можемо прихватити само захтеве за повлачење који долазе од корисника који су потписали уговор о лиценци Ецлипсе Фоундатион Цонтрибутор.“. Збуњивали смо се јер бот не може физички или морално потписати уговор о лиценци и вероватно на то нема право. Ко је власник интелектуалне својине и одговорности за бот допринос: оператер робота, имплементатор бот или дизајнер алгоритма за поправак? Ово је једно од занимљивих питања која је открило пројекат Репаирнатор.

Верујемо да Репаирнатор креира одређену будућност развоја софтвера, где ће ботови и људи несметано сарађивати, па чак и сарађивати на софтверским артефактима.

Желите да се придружите Репаирнатор заједници? Да бисте редовно добијали вести о Репаирнатору, упуцајте е-пошту на Репаирнатор.субсцрибе@4опен.сциенце!

- Мартин Монперрус, Симон Урли, Тхомас Дуриеук, Матиас Мартинез, Беноит Баудри, Лионел Сеинтуриер

У медијима:

  • Тајанствени живот Луца Есапеа, вансеријски поправљач грешака. Његова велика тајна? Он није човек (Тхомас Цлабурн, Регистар)

Референце

  • [1] Ј. Р. Коза (2010) Резултати конкурентности људи генерирани генетским програмирањем. Генетско програмирање и еволутивне машине 11 (3–4), стр. 251–284. Навели: .
  • [2] Ц. Лебеуф, М. Д. Стореи и А. Загалски (2018) Софтваре ботови. ИЕЕЕ Софтваре 35, стр. 18–23. Цитирао: Аутоматско поправљање и континуирана интеграција.
  • [3] М. Мартинез, Т. Дуриеук, Р. Соммерард, Ј. Ксуан и М. Монперрус (2016) Аутоматско поправљање стварних грешака на Јави: Велики експеримент на скупу података Дефецтс4ј. Емпиријски софтверски инжењеринг, стр. 1–29. Цитирано од: Конкурентност људи,.
  • [4] М. Монперрус (2017) Аутоматска поправак софтвера: библиографија. АЦМ Цомпутинг Сурвеис. Цитира: Аутоматско поправљање и континуирана интеграција,.
  • [5] А. Мургиа, Д. Јанссенс, С. Демеиер и Б. Василесцу (2016) Међу машинама: интеракција између човека и бота на друштвеним к & веб локацијама. У зборницима са Конференције ЦХИ из 2016. године проширени су сажеци о људским факторима у рачунарским системима, стр. 1272–1279. Цитирано од: Конкурентност људи.
  • [6] Е. К. Смитх, Е. Т. Барр, Ц. Ле Гоуес и И. Брун (2015) Да ли је лек гори од болести? прекомерно уклапање у аутоматизовани поправак програма. У зборнику са 10. заједничког састанка о основама софтверског инжењеринга за 2015., стр. 532–543. Спољне везе: Документ цитирао: Конкурентност људи.
  • [7] С. Урли, З. Иу, Л. Сеинтуриер и М. Монперрус (2018) Како дизајнирати програм за поправку програма? Увид у пројекат Репаирнатор. На ИЦСЕ 2018.-40. Међународној конференцији о софтверском инжењерству, праћењу софтверског инжењерства у пракси, екстерним везама: линк Цитирао: Постигнућа експедиције, будућност.
  • [8] Ц. Вассалло, Г. Сцхерманн, Ф. Зампетти, Д. Романо, П. Леитнер, А. Заидман, М. Ди Пента и С. Паницхелла (2017) Прича о неуспјех у изградњи ЦИ: Опен-соурце и перспектива финансијске организације На Међународној конференцији о одржавању и развоју софтвера, коју су цитирали: Аутоматско поправљање и континуирана интеграција.