Maskinlæring kan finde og reparere kodefejl ud fra tidligere patches

En gruppe forskere fra MIT har brugt maskinlæring til at finde den rette patch til en fejl i et program.

Hvis en rettelse virker én gang, så virker den sandsynligvis også på et lignende problem. Det er tesen bag to maskinlæringsalgoritmer, som forskere fra MIT har sat til at se på 777 fejl og rettelser i open source-projekter på Github. Det skriver MIT News.

Den første algoritme, forskerne udviklede, var i stand til at finde frem til rettelser ved systematisk at modificere koden og efterfølgende teste. Denne metode kunne finde fungerende rettelser til fejl, men tog lang tid om det.

Den anden algoritme, som forskerne efterfølgende har udviklet, tog udgangspunkt i et datasæt bestående af kildekode med fejl og rettelser hentet fra projekter på Github.

På den måde kunne de oplære algoritmen i at genkende visse fejl og efterfølgende finde den patch, der var mest effektiv, når de kombinerede de to algoritmer.

Projektet var dog begrænset til at se på en bestemt kategori af fejl, nemlig fejl omkring typer og variable i hukommelsen. Forskerne opstillede 30 forskellige parametre, som blandt andet beskrev, hvorvidt en variabel var lokal eller global, om den indgik i en ligning, eller om det var en returværdi fra en funktion eller metode.

Efter oplæring af algoritmerne blev de testet på 69 fejl i otte open source-projekter. Heraf var 19 af fejlene af den type, som algoritmerne kunne identificere og rette.

Den korte kørsel af algoritmerne var i stand til at finde og rette 15 ud af de 19 fejl. Ved kørsel i 12 timer pr. fejl, fandt algoritmerne en rettelse til 18 af fejlene.

De resterende 50 fejl involverede typisk større stykker kode, som algoritmerne ikke kunne analysere korrekt.

»Et af de mest spændende aspekter af denne forskning er, at vi har fundet frem til, at der findes universelle egenskaber ved korrekt kode, som du kan lære fra et sæt af applikationer og overføre til et andet sæt applikationer. Hvis du kan genkende korrekt kode, så har det enorm betydning for softwareudvikling,« siger datalogiprofessor Martin Rinard fra MIT til MIT News.

Følg forløbet

Kommentarer (7)

Mogens Hansen

Jeg syntes jeg lærte som førsteårsstuderende på Datalogi, at dette problem er nytteløs at løse.

Er det ikke nærmere sådan, at det er umuligt at garantere korrektheden og fuldstændigheden? Det bør vel ikke forhindre at man gør hvad man kan, for at nå et nyk nærmere.
At sige det er nytteløst lyder lidt som at sige, at vi lige så godt kunne opgive at have sikkerhedsudstyr i trafikken.

Lasse Mølgaard

Sandt nok, men beskrivelsen af programmet lyder som en variant at det eksempel jeg havde på datalogi.

"Looper dette program i det uendelige?" Ja eller nej.

Hvis "ja" - stop programmet, hvis "nej" fortsæt.

Hvorefter hele holdet fik pludselig hovedpine, når man prøver at forudsige, hvad der sker, når man fodre programmet med sig selv. :-)

Troels Henriksen

Hvorefter hele holdet fik pludselig hovedpine, når man prøver at forudsige, hvad der sker, når man fodre programmet med sig selv. :-)

Det betyder jo ikke, at der ikke findes en stor klasse af programmer, hvor metoden godt kan fungerer. Der er jo ikke noget galt med at svare "måske, men jeg kan ikke sige det med sikkerhed" hvis man som algoritme får foræret et selvrefererende problem.

Datalogien er fyldt med problemer som er umulige eller upraktiske at løse for alle tilfælde, men som i praksis har ganske gode approksimationer.

Andy Fischer

Når man ser på hvor dårlig maskinkode selv de mest avancerede compilere i dag laver, tør jeg slet tænke på hvad der sker ved introduktion af maskinlæring i programmering. Konceptet er heller ikke nyt. Tilbage i Prologs storhedstid i slutningen af 80'erne, brugte man Prolog til identificering, rettelse og optimering af registeranvendelse i maskinkode. Det blev aldrig rigtig en succes.

Ditlev Petersen

Man har (angiveligt) programmer, der kan skrive fornuftige artikler om f.eks. sport ved at studere rigtige sportsjournalisters arbejder. Det sjove opstår, når programmerne begynder at basere deres arbejde på andre programmers arbejde. Noget tilsvarende må kunne ske her. At maskinlæring lærer af maskinlæring. Det bliver næppe til noget i retning af SkyNet, snarere noget enormt introvert og navlebeskuende uden nogen former for kreativitet, indsigt eller andet godt.

Kenn Nielsen

Tænk om nogen brugte denne teknologi til at identificere sårbarheder, og hvordan disse kan udnyttes.....-For så at gemme resultatet til senere (mis)brug.

Nah...

K

Log ind eller opret en konto for at skrive kommentarer

JobfinderJob i it-branchen