Repairnator yordamida avtomatik dasturlarni tuzatish bo'yicha inson raqobatbardosh yamalar

Repairnator - bu bot. Ochiq kodli dasturiy ta'minotni uzluksiz integratsiyalash jarayonida aniqlangan dasturiy xatolarni doimiy ravishda kuzatib boradi va ularni avtomatik ravishda tuzatishga harakat qiladi. Agar u yaroqli yamoqni sintez qila olsa, Repairnator yamani insonning soxta shaxsi ostida niqoblangan ishlab chiqaruvchilarga taklif qiladi. Bugungi kunga kelib, Repairnator kompaniyasi tomonidan ishlab chiquvchilar tomonidan qabul qilingan va doimiy ravishda kodlar bazasida birlashtirilgan 5 ta yamalar ishlab chiqarildi. Bu dasturlarni avtomatik ta'mirlash bo'yicha dasturiy ta'minot muhandislik tadqiqotlarida insonning raqobatdoshligi uchun muhim bosqich. Ushbu postda biz ushbu tadqiqot haqida KTH Qirollik Texnologiya Instituti, Inria, Lill va Valensiya universitetlarida olib borilgan tadqiqotlar haqida hikoya qilamiz.

Dasturni tuzatish bo'yicha tadqiqotlar algoritmlar odamlarni dasturiy xatolarni tuzatish uchun o'rnini bosishi mumkin degan fikrga asoslanadi [4]. Xatolarni tuzatish - bu dastlabki kodni kiritadigan, o'chiradigan yoki o'zgartiradigan yamoq. Masalan, quyidagi patchda ishlab chiquvchi if bayonotining holatini o'zgartirdi:

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

Dasturni tuzatish boti - bu manba kodi yamalarini sintez qilishga urinadigan sun'iy agent. U xatolarni tahlil qiladi va dasturiy ta'minotga texnik xizmat ko'rsatish bilan shug'ullanadigan inson ishlab chiqaruvchilari kabi yamalar ishlab chiqaradi. Dasturni tiklash botining bu g'oyasi buziladi, chunki bugungi kunda odamlar xatolarni tuzatish uchun javobgardir. Boshqacha qilib aytganda, biz insonni ishlab chiquvchilarni zerikarli vazifalarni bajarish uchun almashtirishga mo'ljallangan (qisman) bot haqida gapiramiz.

Bot odatda odamlar bajaradigan vazifaga erishishga harakat qilganda, u insonning raqobatbardosh vazifasi deb nomlanadi [1]. Dasturni ta'mirlash tadqiqotlarining empirik baholari [3] shuni ko'rsatadiki, joriy dasturlarni tuzatish tizimlari haqiqiy dasturlardagi xatolar uchun yamalarni sintez qilishga qodir. Biroq, bu barcha yamalar o'tmishdagi xatolar uchun, o'tmishdagi odamlar tomonidan ishlab chiqilgan xatolar uchun, odatda yillar oldin sintez qilingan. Garchi bu dasturni ta'mirlashning texnik maqsadga muvofiqligini ko'rsatsa-da, bu dasturni tuzatish inson raqobatdoshligini ko'rsatmaydi.

Insonning raqobatbardoshligi

Dasturni tuzatish insonning raqobatbardoshligini namoyish qilish uchun, dasturni tuzatish boti inson bajarishdan oldin yuqori sifatli yamoqni topishi kerak. Shu nuqtai nazardan, yamoq o'z vaqtida va sifatning ikkita shartini qondirsa, inson tomonidan raqobatdosh deb hisoblanadi. Vaqtlilik bu tizim ishlab chiqaruvchisi oldida yamoqni topishi kerakligini anglatadi. Boshqacha qilib aytganda, prototip tizimi yamalarni kunlar emas, balki daqiqalar kattaligiga ko'ra ishlab chiqishi kerak. Shuningdek, bot tomonidan ishlab chiqarilgan yamoq inson tomonidan yozilgan patch bilan solishtirganda etarlicha to'g'ri, o'xshash sifatga ega - to'g'ri va o'qilishi kerak. E'tibor bering, bot nuqtai nazaridan to'g'ri ko'rinadigan yamalar mavjud, ammo ular noto'g'ri (bu adabiyotda juda mos keladigan yamalar deb nomlanadi) [6, 3]. Ushbu yamalar, shubhasiz, inson tomonidan raqobatbardosh emas, chunki odamlar ularni hech qachon o'zlarining kod bazalarida qabul qilishmaydi.

Shunday qilib, yamoq insonning raqobatbardosh bo'lishi uchun 1) bot yamoqni inson ishlab chiquvchisidan tezroq sintez qilishi kerak; 2) yamoqni inson ishlab chiqaruvchisi yaxshi ko'rib chiqishi va kod bazasiga doimiy ravishda qo'shilishi kerak.

Yana bir jihatni ko'rib chiqish kerak. Inson muhandislari botlardan tushgan hissalarni boshqa odamlarning hissalari kabi oson qabul qilmasliklari aniq ko'rsatildi, garchi ular qat'iy bir xil bo'lsa ham [5]. Sababi shundaki, odamlar mashinalarga nisbatan afzal ko'rgan narsalarga moyil bo'ladilar va agar ularning hissasi insonning tengdoshlaridan kelib chiqsa, xatolarga nisbatan toqatlidir. Dasturni tuzatish kontekstida, agar ular yamoq botdan kelib chiqqanligini bilsalar, ishlab chiqaruvchilar patchning sifatini yuqori darajaga ko'tarishlari mumkinligini anglatadi. Bu bizning dasturni tuzatish kontekstida insonning raqobatbardoshligini isbotlashga intilishimizga xalaqit beradi.

Ushbu muammoni bartaraf etish uchun biz loyihaning boshida barcha Repairnator yamoqlari soxta inson identifikatsiyasi ostida taklif qilinishini belgilab qo'ydik. Biz Lit Esape deb nomlangan GitHub foydalanuvchisini yaratdik, u bizning laboratoriyamizda dastur muhandisi sifatida taqdim etilgan. Luc profil rasmiga ega va GitHub-ga ochiq manbalarni qo'shishni istagan yosh dasturchiga o'xshaydi. Endi Lyuk Esape singari yamoqni taklif qilayotgan Repairnatorni tasavvur qiling: uni ko'rib chiqadigan dasturchi inson hissasini ko'rib chiqmoqda deb o'ylaydi. Ushbu kamuflyaj insonning raqobatbardoshligi haqidagi ilmiy farazimizni sinash uchun talab qilinadi. Endi, axloq uchun, Lyukning haqiqiy kimligi uning har bir iltimosida oshkor bo'ldi.

Avtomatik ta'mirlash va doimiy integratsiya

Uzluksiz integratsiya, aka CI, server kodni tuzadi va dasturiy ta'minot loyihasining versiyasini boshqarish tizimida (masalan, Git) qilingan har bir majburiyat uchun barcha sinovlarni o'tkazadi degan fikr. CI tilida aytganda, har bir majburiyat uchun tuzilish mavjud. Qurilishda ishlatilgan dastlabki kod surati (masalan, Git majburiyatiga havola), kompilyatsiya natijalari va testlarni bajarish natijalari (masalan, muvaffaqiyatsizliklar yoki muvaffaqiyatlar) va bajarilishni kuzatish qaydlari. Agar kompilyatsiya bajarilmasa yoki hech bo'lmaganda bitta sinov ishi bajarilmasa, yig'ilish muvaffaqiyatsiz bo'ladi. Qurilishlarning har 4tasidan bittasi muvaffaqiyatsiz ekanligi va qurilish qobiliyatsizligining eng ko'p uchraydigan sababi bu sinov muvaffaqiyatsiz ekanligi isbotlangan [8].

Repairnator-ning asosiy g'oyasi - bu buzilishlarni tuzatuvchi yamalarni avtomatik ravishda yaratish, keyin ularni inson ishlab chiquvchilariga ko'rsatish, nihoyat, ushbu ishlab chiquvchilar ularni kodlar bazasiga munosib hissa sifatida qabul qilish-qilmasligini ko'rish. Agar bu ro'y bersa, bu dasturni tuzatishda insonning raqobatdoshligini tasdiqlaydi.

Ushbu sozlash - uzluksiz integratsiyada ro'y beradigan avariyalarni avtomatik ravishda tiklash - quyidagi sabablarga ko'ra ayniqsa o'rinli va o'z vaqtida. Birinchidan, tuzilishdagi xatolar test-to'plamga asoslangan dasturni ta'mirlash [4] muammosining asosiy bayonotini qondiradi, bu erda xatolar muvaffaqiyatsiz test-hodisalar sifatida belgilanadi va muvaffaqiyatsiz sinov holatlari yamoqlarni avtomatlashtirilgan sintez qilish uchun ishlatiladi [4]. Ikkinchidan, bu botlarni va odamlarni adolatli asosda taqqoslashga imkon beradi: uzluksiz integratsiya serverida muvaffaqiyatsiz sinov aniqlanganda, dastur ishlab chiqaruvchisi va bot haqida aniq ma'lumot beriladi. Ushbu sinov muvaffaqiyatsizligi to'g'risida xabarnoma inson va bot musobaqasining boshlang'ich nuqtasidir.

Repairnatorning qurishda muvaffaqiyatsizlikka e'tibor qaratishi noyob, ammo u dasturiy ta'minot uchun aqlli botlarning katta rasmiga mos keladi [2]. Masalan, Facebookda SapFix deb nomlangan vosita mavjud bo'lib, u avtomatlashtirilgan sinov yordamida topilgan xatolarni tuzatadi. Shuningdek, DARPA Cyber ​​Grand Challenge bot hujumchilari va himoyachilari xavfsizlik bo'yicha mutaxassislarga nisbatan insonga raqobatdosh bo'lishga harakat qilishadi.

Qisqa qilib aytganda ta'mirlash ustasi

2017–2018 yillarda biz avtomatlashtirilgan dasturlarni ta'mirlash uchun botni yaratdik, uni ishga tushirdik va ishladik. Ta'mirlash zavodi uzluksiz integratsiya paytida yuzaga keladigan nosozliklarni tuzatishga ixtisoslashgan. U doimiy ravishda GitHub kod xosting platformasiga yuborilgan minglab topshiriqlarni kuzatib boradi va ularning tegishli tuzilishini tahlil qiladi. Har daqiqada, inson ishlab chiqaruvchisi oldida xatolarni tuzatish uchun yangi ta'mirlash urinishlarini boshlaydi. U imkon qadar tezroq borishga mo'ljallangan, chunki u musobaqada qatnashadi: agar Repairnator inson ishlab chiqaruvchisi oldida yamoq topsa, u insonga raqobatdosh.

Endi Repairnator boti qanday ishlashi haqida qisqacha ma'lumot beramiz.

Repairnator-ning asosiy usuli bu GitHub (a) loyihalari asosida ishlab chiquvchilar tomonidan berilgan (a) va (b) rasmlarning yuqori qismidir. Repairnator-ning chiqishlari ikki baravar: (1) avtomatik ravishda ishlamay qolgan inshootlarni (g) ta'mirlash uchun yamalar ishlab chiqaradi; (2) kelgusida dasturni tuzatish bo'yicha tadqiqotlar (h) va (k) uchun qimmatli ma'lumotlarni to'playdi. Doimiy ravishda Repairnator GitHub loyihalaridagi barcha uzluksiz ishlarni kuzatib boradi ©. CI qurilishi uch bosqichli quvur liniyasiga kirish sifatida berilgan: (1) birinchi bosqich CI jurnallarini (e) yig'adi va tahlil qiladi; (2) ikkinchi bosqich CI (f) da yuz bergan nosozliklarni mahalliy ravishda qayta tiklashga qaratilgan; (3) uchinchi bosqich - so'nggi akademik tadqiqotlar natijasida olingan turli xil dasturlarni tuzatish prototiplari. Yamalar topilganida, Repairnator loyihasining a'zosi ochiq manbali ishlab chiqaruvchilarning qimmatbaho vaqtlarini isrof qilmaslik uchun tezkor sanitariya tekshiruvini o'tkazadilar. (i) Agar u yamoq buzilmaganligini ko'rsa, u uni GitHub (j) -ga talab qilib, uni loyihaning dastlabki ishlab chiquvchilariga taklif qiladi. Keyin ishlab chiquvchilar odatdagi kodlarni ko'rib chiqish va birlashtirish jarayonini kuzatadilar.

Repairnator berilgan dasturiy ta'minot ekotizimida ishlashi kerak. O'tgan tadqiqot loyihalaridagi Java bilan tajribamiz tufayli, Repairnator prototipini amalga oshirish, Java dasturlash tilida yozilgan dasturiy ta'minotni, Maven toolchain yordamida yaratilgan, GitHub-da joylashgan Travis CI uzluksiz integratsiya platformasidan foydalanadigan dasturlarda tuzatishga qaratilgan. .

Ekspeditsiya yutuqlari

Biz ta'mirlashnatorni 2017 yil yanvar oyidan beri uch xil bosqichda ishlamoqdamiz. Bir oy ichida, 2017 yil yanvar oyida, prototipning dastlabki versiyasi bilan tajriba o'tkazdik. 2017 yil 1-fevraldan 2017-yilning 31-dekabriga qadar biz 14,188 loyihaning ro'yxati bilan "Repairnator" ni ishga tushirdik, biz uni "Ekspeditsiya №1" deb ataymiz. 2018 yil 1-yanvardan 2018-yil 30-iyungacha Repairnator Travis CI qurish oqimini real vaqt rejimida kuzatdi, biz uni "Ekspeditsiya №2" deb ataymiz.

Sinov tajribasining asosiy maqsadi bizning dizaynimizni va dastlabki bajarilishimizni tasdiqlash edi. Bizning prototipimiz hisoblash resurslarimizni hisobga olgan holda kuniga taxminan 30 ta ta'mirlash ishlarini bajarishga qodirligini aniqladik. Eng muhimi shundaki, ushbu tajriba tajribasi bizning asosiy texnologik taxminlarimizni tasdiqladi: ommabop ochiq manbali loyihalarning katta qismi Travis-dan foydalanadi va ularning ko'pchiligi qurilish texnologiyasi sifatida Maven-dan foydalanadi. Bu shuni anglatadiki, biz shu nuqtai nazardan insonning raqobatdosh patchini sintez qilish maqsadimizga erishish uchun etarli imkoniyatga ega bo'lamiz.

Uning natijalari [7] da batafsil berilgan # 1 ekspeditsiyasi davomida Repairnator 11.523 qurishni sinov muvaffaqiyatsizligi bilan tahlil qildi. Ulardan 3551 (30,82%) uchun Repairnator sinov qobiliyatsizligini mahalliy ravishda takrorlashga muvaffaq bo'ldi. 3551 ta ta'mirlash urinishlarining barchasida Repairnator CI-ni o'tishi mumkin bo'lgan 15 ta yamoqlarni topdi. Biroq, bizning yamalar tahlilimiz shuni ko'rsatdiki, ushbu yamalarning hech biri inson tomonidan raqobatbardosh emas, chunki ular juda kech bo'lgan (Repairnator ishlab chiqaruvchidan keyin yamoq ishlab chiqargan) yoki past sifatli (ular qurishni tasodifan muvaffaqiyatli qilgan).

2-ekspeditsiya muvaffaqiyatli hisoblanadi. Dasturni tuzatish texnologiyasi insonning raqobatdoshligi chegarasidan o'tganligini ko'rsatdi. Ta'mirlash zavodi yuqorida belgilangan insonning raqobatbardoshlik mezonlariga javob beradigan 5 ta yamoqlarni ishlab chiqardi: 1) yamalar odamlardan oldin ishlab chiqarilgan; 2) inson ishlab chiqaruvchisi yamalarni haqiqiy hissa sifatida qabul qilgan va yamalar asosiy kod bazasida birlashtirilgan.

Github-dagi inson raqobatbardosh hissalari, Repairnator roboti tomonidan sintez qilingan va inson ishlab chiqaruvchisi tomonidan qabul qilingan yamalar:

  • 12 Yanvar 2018 yil, aaime / geowebcache / pull / 1, "Yamoq uchun rahmat!"
  • 23-mart, 2018-yil, parkito / BasicDataCodeU [...] / pull / 3 "140a3e3-ni parkitoga birlashtirdi: rivojlantiring"
  • 5 aprel 2018 yil, dkarv / jdcallgraph / pull / 2 "Rahmat!"
  • 2018 yil 3 may, tutilish / ditto / pull / 151 "Salqin, Eclipse jarayonidan o'tganingiz va tuzatganingiz uchun tashakkur."
  • 25-iyun, 2018-yil, donnelldebnam / CodeU […] / pull / 151 "Rahmat !!"

Dasturni tiklash boti bilan birlashtirilgan birinchi patch 2018 yil 12-yanvar kuni inson ishlab chiqaruvchisi tomonidan qabul qilingan. Mana hikoya: 2018 yil 12-yanvar kuni soat 12: 28da aaime / geowebcache11 loyihasida qurilish boshlandi 1 https: // travis -ci.org/GeoWebCache/geowebcache/builds/328076497. Qurilish 2 daqiqada bajarilgandan so'ng muvaffaqiyatsiz tugadi, chunki ikkita sinovda xatolik yuz berdi. Qirq daqiqadan so'ng, 2018 yil 12-yanvar kuni soat 13:08 da, Repairnator o'zining doimiy monitoringi paytida muvaffaqiyatsiz qurilishni aniqladi va Repairnator-da sozlangan mavjud dasturlarni ta'mirlash tizimlarini ishga tushirdi. O'n daqiqadan keyin, soat 13:18 da, yamoq topildi.

2018 yil 12-yanvar kuni soat 13:35 da Repairnator jamoasi a'zosi Repairnator tomonidan yaratilgan patchni oldi va GitHub-da tegishli ochish so'rovining ochilishini tasdiqladi. 2018 yil 12-yanvar kuni soat 14: 10da, ishlab chiqaruvchi yamoqni qabul qildi va uni sharh bilan birlashtirdi: "G'alati, men buni allaqachon tuzatgan deb o'yladim ... ehtimol boshqa joyda qilganman. Yamoq uchun rahmat! ”. Bu Repairnator tomonidan ishlab chiqarilgan va kod ishlab chiqaruvchisi tomonidan aniq asos sifatida birlashtirilgan inson ishlab chiqaruvchisining hissasi sifatida qabul qilingan birinchi patch. Boshqacha aytganda, Repairnator birinchi marta insonga raqobatdosh edi.

Yana 6 oylik operatsiyadan so'ng, Repairnator yuqorida sanab o'tilgan inson ishlab chiqaruvchilari tomonidan birlashtirilgan 5 ta yamoqqa ega.

Umuman olganda, Repairnator loyihasi o'z vazifasini to'liq bajardi. Dasturni ta'mirlashni inson raqobatbardosh deb hisoblash mumkinligini ko'rsatdi: Repairnator 1) odamlardan oldin, 2) odamlar o'zlari tomonidan sifatli deb topilgan yamoqlarni topdilar.

Kelajak

Dasturni tuzatish insonning raqobatbardoshligini namoyish qilishdan tashqari, Repairnator loyihasi xatolar va doimiy integratsiya haqida, shuningdek dasturni tuzatish bo'yicha tadqiqotlardagi mavjud kamchiliklar to'g'risida [7] da keltirilgan.

Keling, bir narsaga, xususan intellektual mulk masalasiga to'xtalib o'tamiz. 2018 yil 3-mayda Repairnator GitHub loyihasi tutilishi / ditto uchun yaxshi yamoq ishlab chiqardi. Patchni taklif qilganidan ko'p o'tmay, ishlab chiquvchilardan biri "Biz faqat Eclipse Foundation Contributor litsenziyalash bitimini imzolagan foydalanuvchilar tomonidan yuboriladigan talablarni qabul qila olamiz" deb so'radi. Biz hayron qoldik, chunki bot jismoniy yoki ma'naviy jihatdan litsenziya shartnomasini imzolay olmaydi va bunga huquqi yo'q. Bot ulushining intellektual mulki va javobgarligi kimga tegishli: robot operatori, botni amalga oshiruvchi yoki tuzatish algoritmi dizaynerimi? Bu Repairnator loyihasi tomonidan ochilgan qiziqarli savollardan biri.

Biz ishonamizki, Repairnator dasturiy ta'minotni ishlab chiqishda ma'lum bir kelajakni yaratadi, bu erda botlar va odamlar dasturiy artefaktlarda muammosiz ishlaydi va hatto hamkorlik qiladi.

Repairnator hamjamiyatiga qo'shilmoqchimisiz? Repairnator haqida doimiy yangiliklarni olish uchun repairnator.subscribe@4open.science elektron pochta manziliga xat yuboring!

- Martin Monperrus, Saymon Urli, Tomas Dyurie, Matias Martines, Benoit Baudri, Lionel Seinturier

OAVda:

  • Luc Esape-ning sirli hayoti, xatolarni tuzatish bo'yicha qo'shimcha mutaxassis. Uning katta siri? U odam emas (Thomas Claburn, The Register)

Adabiyotlar

  • [1] J. R. Koza (2010) Genetik dasturlash tomonidan ishlab chiqarilgan insonning raqobatdosh natijalari. Genetik dasturlash va o'zgaruvchan mashinalar 11 (3-4), 251–284 betlar. Muallif:
  • [2] C. Lebeuf, M. D. Storey va A. Zagalsky (2018) Dasturiy ta'minot. IEEE dasturiy ta'minoti 35, 18-23 betlar. Muallif: Avtomatik ta'mirlash va uzluksiz integratsiya.
  • [3] M. Martinez, T. Durieux, R. Sommerard, J. Xuan va M. Monperrus (2016) Java-dagi haqiqiy xatolarni avtomatik ravishda tuzatish: Kamchiliklar 4j ma'lumotlar bazasida keng ko'lamli eksperiment. Empirik dasturiy ta'minot muhandisi, 1–29 betlar. Iqtibos: Insonning raqobatbardoshligi.
  • [4] M. Monperrus (2017) Dasturiy ta'minotni avtomatik ta'mirlash: bibliografiya. ACM hisoblash tadqiqotlari. Muallif: Avtomatik ta'mirlash va uzluksiz integratsiya.
  • [5] A. Murgia, D. Yanssens, S. Demeyer va B. Vasilesu (2016) Mashinalar orasida: Ijtimoiy tarmoqlar va veb-saytlarda inson-bot aloqasi. 2016 yilgi CHI konferentsiyasida Hisoblash tizimidagi inson omillari to'g'risida kengaytirilgan tezislar, 1272–1279 bet. Iqtibos: Insonning raqobatbardoshligi.
  • [6] E. K. Smit, E. T. Barr, C. Le Gues va Y. Brun (2015) Davolanish kasallikdan ham yomonmi? avtomatlashtirilgan dasturlarni ta'mirlashda ortiqcha ishlov berish. Dasturiy ta'minot muhandisligi asoslari bo'yicha 2015 yil 10-chi qo'shma yig'ilish ishlarida, 532-543-betlar. Tashqi havolalar: Hujjat: Inson raqobatdoshligi.
  • [7] S. Urli, Z. Yu, L. Seinturier va M. Monperrus (2018) Dasturni tuzatish botini qanday tuzish kerak? Repairnator loyihasi haqida tushunchalar. ICSE 2018–40 Xalqaro dasturiy ta'minot muhandisligi, dasturiy ta'minot muhandisligi bo'yicha amaliy konferentsiya, tashqi havolalar: havola: Ekspeditsiya yutuqlari, kelajak.
  • [8] C. Vassallo, G. Schermann, F. Zampetti, D. Romano, P. Leitner, A. Zaidman, M. Di Penta va S. Panichella (2017) CI qurilishidagi muvaffaqiyatsizliklar haqida ertak: Ochiq manbali va moliyaviy tashkilot istiqbollari. Dasturiy ta'minotga xizmat ko'rsatish va evolyutsiyaga bag'ishlangan xalqaro konferentsiyada: Avtomatik ta'mirlash va doimiy integratsiya.