Automatinė klaidų taisymo sistema pataiso 10 kartų daugiau klaidų nei jos pirmtakai

Calling All Cars: Curiosity Killed a Cat / Death Is Box Office / Dr. Nitro (Birželis 2019).

Anonim

MIT mokslininkai sukūrė mašininio mokymosi sistemą, kuri gali iššaukti remontą atviro kodo kompiuterio programoms ir sužinoti jų bendrąsias savybes, kad būtų galima atlikti naujus remontus skirtingoms programoms.

Tyrėjai ištyrė savo sistemą į programavimo klaidų rinkinį, sukauptą iš tikrųjų atvirojo kodo programų, sukurtų automatinėms klaidų taisymo sistemoms įvertinti. Kai šios ankstesnės sistemos sugebėjo ištaisyti vieną ar dvi klaidas, MIT sistema buvo suremontuota nuo 15 iki 18, priklausomai nuo to, ar ji įsitvirtino pirmame sprendime, kurį jis nustatė, ar jam leido ilgiau dirbti.

Nors automatinis klaidų taisymo įrankis būtų naudingas savo nuožiūra, elektrotechnikos ir kompiuterių mokslo profesorius Martin Rinard, kurio grupė sukūrė naują sistemą, mano, kad darbas gali turėti platesnes pasekmes.

"Vienas iš labiausiai intriguojančių šio tyrimo aspektų yra tai, kad mes nustatėme, kad iš tiesų yra universali korektiško kodo savybė, kurią galite išmokti iš vienos programos ir pritaikyti kitoms programoms", - sako Rinardas. "Jei galėsite atpažinti teisingą kodą, tai turi milžiniškų padarinių visoje programinės įrangos inžinerijoje. Tai tik pirmasis taikymas, kurio mes tikimės, bus visiškai nauja, nuostabi technika".

Praėjusios savaitės simpoziumas apie programavimo kalbų principus pristatė dokumentą, kuriame apibūdinama nauja sistema "Fan Long", elektrotechnikos ir kompiuterių mokslo magistras MIT. Jis ir Rinardas, jo patarėjas, yra bendraautoriai.

Atvirojo kodo programų vartotojai klaidų, su kuriais jie susiduria projekto svetainėse, ir prisideda prie projektų po kodo pataisymų arba "pataisų" tose pačiose svetainėse. "So Long" sugebėjo parašyti kompiuterio scenarijų, kuris automatiškai ištraukė tiek nekororcinį kodą, tiek ir 777 klaidų pataisas aštuoniose atviro kodo programose, saugomose internetinėje "GitHub" saugykloje.

Funkcionalumas

Kaip ir visose mašininio mokymo sistemose, "Long" ir "Rinard" dizaino esminis aspektas buvo "funkcijų rinkinio" pasirinkimas, kurį sistema galėtų analizuoti. Mokslininkai sutelkė į atmintyje saugomas reikšmes - bet kuriuos kintamuosius, kurie gali būti modifikuoti programos vykdymo metu arba konstantos, kurių negalima. Jie nustatė 30 pagrindinių tam tikros vertės charakteristikų: ji gali būti susijusi su operacija, pvz., Papildymu ar dauginimu, ar palyginimu, pvz., Didesnis arba lygus; tai gali būti vietinis, tai reiškia, kad tai įvyksta tik per vieną kodo bloką arba visuotinį, tai reiškia, kad jis prieinamas visai programai; tai gali būti kintamasis, parodantis galutinį skaičiavimo rezultatą; ir taip toliau.

Longas ir Rinardas parašė kompiuterinę programą, kuri įvertino visus galimus šių požymių santykius eilės eilutėje. Daugiau nei 3500 tokių santykių sudaro jų funkcija. Jų mašininio mokymosi algoritmas bandė nustatyti, kokių funkcijų derinys nuosekliai numatė pataisos sėkmę.

"Visos funkcijos, kurias mes bandome pažvelgti, yra ryšys tarp įdėtojo pleistro ir kodo, kurį bandote pataisyti", - sako Long. "Paprastai geros jungtys bus teisingos pataisos, atitinkančios naudingos arba produktyvios programos logiką. Taip pat bus blogi modeliai, kurie reiškia" loginio "arba" nereikalingos "programos logikos atjungimus, kurie greičiausiai bus sėkmingi."

Reitingas kandidatų

Ankstesniame darbe Long sukūrė algoritmą, kuris bando ištaisyti programos klaidas sistemingai modifikuojant programos kodą. Modifikuotajam kodui taikomas testų rinkinys, skirtas išprovokuoti klaidų elgesį. Šis metodas gali rasti modifikaciją, kuri perduoda bandymus, bet tai gali užtrukti ilgai. Be to, modifikuotas kodas vis tiek gali turėti klaidų, kurių neveikia bandymai.

Long ir Rinard mašinų mokymosi sistema veikia kartu su šiuo ankstesniu algoritmu, reitinguojant siūlomas modifikacijas pagal tikimybę, kad jie yra teisingi, prieš pradedant juos atlikti daug laiko reikalaujančius bandymus.

Mokslininkai išbandė savo sistemą, kurią jie vadina pranašu, iš 69 programinės klaidos, kuri buvo įtraukta į aštuonias populiarias atviro kodo programas. Iš jų 19 yra pritaikyti modifikacijų tipui, kurį naudoja Long algoritmas; kitose 50 yra sudėtingesnių problemų, susijusių su logiškais neatitikimais didesniuose kodo taškuose.

Kai "Long" ir "Rinard" sukonfigūruoja savo sistemą, kad išspręstų pirmąjį sprendimą, kuris praėjo klaidų sukeliančius bandymus, jis galėjo tinkamai ištaisyti 15 iš 19 klaidų; kai jie leido 12 valandų dirbti vienoje problemoje, jis buvo suremontuotas 18.

Žinoma, tai vis dar palieka kitas 50 klaidų bandymų rinkinyje nepaliestos. Esant tęstiniam darbui, "Long" dirba su mašina mokymosi sistema, kuri apžvelgs didesnes programos verčių manipuliacijas didesniame kodo ruože, tikintis sukurti klaidų taisymo sistemą, galinčią atlikti sudėtingesnes klaidas.

"Revoliucinis Pranašo aspektas yra tai, kaip jis naudoja praėjusius sėkmingus pataisymus, kad išmoktų naujų", sako Eranas Yahavas, Technologijos informacinių technologijų daktaras Izraelyje. "Ji remiasi įžvalga, kad, nepaisant programinės įrangos projektų skirtumų, projektuose naudojami pataisymai-pataisymai dažnai turi bendrų dalykų, į kuriuos galima pasimokyti. Naudojant mašininį mokymąsi iš" didžiojo kodo "mokytis yra pažadas keisti daugybę programavimo užduočių-kodo užbaigimo, atvirkštinė inžinerija ir kt. "

menu
menu