S 6 : Semantikkbasert kodesøk

Original Kilde: http://cs.brown.edu/~spr/research/s6.html

Vårt arbeid med kodesøk er designet for å la programmerere dra nytte av de store lagrene av tilgjengelig åpen kildekode. Tradisjonelle kodesøkemotorer som Googles kodesøk, Koders eller Krugle gir tilgang til slike repositorier, men forenkler ikke programmererens jobb i å bruke koden. De tar nøkkelord og returnerer potensielt hundrevis av kandidatstykker av kode. Programmereren må da gå gjennom hver av disse returnerte filene. De må da se om koden kan være relevant. Hvis det er, må de lese det i detalj for å avgjøre om det er akkurat det de vil ha eller i det minste i nærheten av det. Til slutt må de tilpasse koden for å oppfylle deres spesielle krav til navngivning, formatering, feilhåndtering, etc.

Vi føler at en bedre tilnærming ville være å få programmereren å gi mer presis informasjon om hva de vil ha, og så få systemet til å gjøre det grunne arbeidet med å sjekke de returnerte kodefragmentene, å endre koden for å gjøre hva programmereren ønsker, og om forvandle koden til å passe inn i målrammen. Vår søkendefront har programmereren definere semantikken til det de ønsker. Dette inkluderer nøkkelord som en uformell beskrivelse, en signatur, testtilfeller og kontrakter (via JML) for funksjonelle spesifikasjoner, sikkerhetsbegrensninger (ved hjelp av Java-sikkerhetsmodellen) og tråderbegrensninger (ikke fullt implementert). I tillegg kan brukeren gi en kontekst inn i hvilken koden vil passe. Frontenden forsøker å gjøre disse spesifikasjonene enkle å gi.

Systemet fungerer ved å bruke søkeordene for å få tilgang til en av de tilgjengelige kodesøkemotorer (eller en lokal kode søkemotor for kode tilgjengelig på Brown), for å få kandidatfiler. Hver klasse eller metode i disse filene (avhengig av hva brukeren søker etter) regnes som en potensiell løsning. Disse løsningene blir deretter transformert ved hjelp av et sett på rundt 30 transformasjoner i et forsøk på å kartlegge koden til nøyaktig hva programmereren angav. Transformasjonene spenner fra det enkle (for eksempel å endre navnet på metoden for å matche signaturen) til komplekset (for eksempel å finne en linje i metoden som beregner en verdi av den returnerte typen og deretter gjøre en bakoverskive til de eneste frie variablene er verdier av parametertyper). Alle løsningene som kan transformeres for å matche signaturen, blir deretter testet ved hjelp av de oppgitte testene, sikkerhetsbegrensninger og JML-regler. Ytterligere transformasjoner kan påføres basert på resultatene fra test tilfellene. Løsningene som passerer testene blir formatert i henhold til brukerens spesifiserte stil, sortert etter størrelse, kompleksitet eller ytelse i testene, og presenteres tilbake til brukeren.

Systemet kan prøves ut (det meste av tiden – noen ganger er serveren nede) på http://conifer.cs.brown.edu/s6 .

I oppfølgingsarbeidet til den opprinnelige S6 har vi utvidet systemet for å finne brukergrensesnitt gitt en skisse av brukergrensesnittet og for å finne test tilfeller gitt kode som må testes.

papirer

Semantikkbasert kodesøk, ICSE 2009, mai 2009.

Angir hva du skal søke etter , SUITE 2009, mai 2009.

Søker brukergrensesnittet , ASE 2014.

Opprette testtilfeller ved hjelp av Code Search upublisert.

Hunter: Next Generator Code Gjenbruk for Java av Yuepeng Want, Yu Feng, Ruben Martins, Arati Kaushik, Isil DIllig og Steven Reiss, FSE 2016.

Søker brukergrensesnittet av Steven Reiss, Yun Miao og Qi Xin, Automated Software Engineering Journal, 2017.

Bilder

Forkant:

S6 frontend bilde

Frontend som viser resultater:

frontend med resultater

Diagram over praktikanten> ls:

intern visning

programvare

Programvaren er tilgjengelig på ftp://ftp.cs.brown.edu/u/spr/s6.tar.gz .