Sara Ersson

Kodklonsdetektering för att säkerställa ekvivalens

Sammanfattning

För att stödja flera olika programmingsspråk har det blivit alltmer vanligt att erbjuda applikationsprogrammeringsgränssnitt (API:er) på olika programmeringsspråk. Detta resulterar dock i utmaningen att säkerställa att API:erna är ekvivalenta angående deras gränssnitt. För att uppnå detta har kodklonsdetekteringstekniker blivit anpassade, för att matcha liknande funktionsdeklarationer i API:erna. Först undersöktes existerande kodklonsverktyg. Eftersom de inte presterade bra, användes ett trädbaserat syntaktiskt tillvägagångssätt, där alla header-filer kompilerades med Clang. De abstrakta syntaxträden, som erhölls under kompileringen, traverserades sedan för att lokalisera funktionsdeklarationsnoderna, och för att lagra funktionsnamnen och parametervariabelnamnen. När funktionsnamnen matchades, användes ett textbaserat tillvägagångssätt, som omvandlade funktionsnamnen enligt en uppsättning implementerade regler.

En strikt regel jämför omvandlingar av hela funktionsnamn på ett exakt sätt, medan en lös regel bara jämför omvandlingar av delar of funktionsnamn, och matchar den resterande delen med vadsomhelst. Ett exempel på en strikt regel är en ord-separerande konventionsregel, som konverterar funktionsnamnen till små bokstäver, och tar bort understreck, för att bortse från språkspecifika konventioner för att separera ord i funktionsnamnen. Ett exempel på en lös regel är en som bara överväger det första ordet i funktionsnamnen. Reglerna var applicerade båda själva och i olika kombinationer, där den striktaste regeln applicerades först, följt av den näst strikaste, och så vidare.

De bäst-matchande reglerna visade sig vara de som är striktast, och som inte påverkas av ordningen på funktionerna, i vilken de matchas. Dessa regler visade sig vara väldigt robusta mot API-evolution. Regler som är mindre strikta och stabila, och inte robusta mot API-evolution kan fortfarande användas, men helst som ett komplement till de striktare och mer stabila reglerna, när de flesta av funktionerna redan har blivit matchade.

Verktyget har blivit evaluerat på de två API:erna i Kings mjukvaruutvecklarkit, och täckte 94% av de tillgängliga funktionsmatchningarna.