S6: Semantika pagrįsta kodų paieška
Mūsų darbas su kodų paieška yra sukurtas taip, kad leistų programuotojams pasinaudoti didelėmis prieinamų atvirų šaltinių kodų saugyklomis. Tradiciniai kodų paieškos varikliai, tokie kaip Google kodų paieška ar Krugle, siūlo prieigą prie tokių saugyklų, bet iš tikrųjų nepalengvina programuotojų darbo naudojant kodą. Jie paima kodą ir gražina šimtus potencialių galimų kodų. Programuotojai tada turi peržiūrėti kiekvieną iš šių gražintų failų. Tada jie turi patikrinti, ar kodas gali būti tinkamas. Jeigu taip, jie turi jį detaliai perskaityti, kad nustatyti, ar jis yra tiksliai toks, kokio jiems reikėjo arba bent jau uždaryti jį. Galiausiai, jie turi pritaikyti kodą, kad jis atiktų jų konkrečius reikalavimus dėl pavadinimo, formatavimo, klaidų tvarkymo ir t.t.
Mes jaučiame, kad geresnis tikslas, jog programuotojai galėtų pateikti labiau precižišką informaciją, apie tai, ko jie nori ir kad sistema atliktų sunkų gražintų kodų fragmentų tikrinimo darbą, modifikuojant kodą taip, kaip reikia programuotojui ir transformuojant kodą, kad jis tiktų į tikslo rėmus. Mūsų paieškos priekyje programuotojas turi apibrėžti semantiką, ko jis nori. Į tai reikia įtraukti raktinius žodžius, tokius kaip, neformalus aprašymas, signatūra, testo atvejai ir sutartys (per JML) dėl funkcinių specifikacijų, apsaugos apribojimai (naudojant Java apsaugos modelį) ir sriegimo apribojimai ( nepilnai įvykdyti). Papildomai, vartotojas gali pateikti kontekstą, kuriame kodas tiks. Pradžios (front end) tikslai padaryti, kad būtų lengva pateikti šias specifikacijas.
Sistema dirba naudodama raktinius žodžius, kad pasiektų vieną iš prieinamų kodų paieškos variklių (arba vietinis kodų paieškos variklis yra prieinamas per Brown), kad gautų galimus failus. Kiekviena šių failų klasė ar metodas (priklausomai nuo to, ko ieško vartotojas) yra laikoma potencialiu sprendimu. Tada šie sprendimai yra transformuojami, naudojant apie 30 transformacijų rinkinį, kad padaryti kodą tiksliai tokį, kaip nurodė programuotojas. Transformacijų diapazonas nuo paprastų (pvz.: pakeisti metodo pavadinimą, kad atitiktų signatūrą) iki sudėtingų (pvz.: rasti metode eilutę, kuri skaičiuoja gražinto tipo vertę ir gražinti atgal po vieną, kol lieka tik trys kintamieji, vertingi parametrų tipui). Visi sprendimai kurie gali būti transformuojami, kad tiktų signatūrai, yra testuojami pagal duotus testo atvejus, apsaugos apribojimus ir JML taisykles. Papildomos transformacijos gali būti atliekamos, remiantis testo atvejų rezultatais. Sprendimai, kurie išlaiko testo atvejus, tada yra formatuojami, atsižvelgiant į vartotojo specifinį stilių, rūšiuojami pagal dydį, kompleksiją ar testų rezultatus, ir pristatomi atgal vartotojui.
Sistema gali būti išbandoma (dažniausiai-- kartais serveris neveikia) čia https://conifer.cs.brown.edu/s6
Tolesniame darbe pagal originalą S6 mes išplėtėme sistemą, kad rasti vartotojų sąsajas su pateiktu vartotojo sąsajos eskizu ir rasti testo atvejų pateiktus kodus, kuriuos reikia testuoti.
Straipsniai
Semantics-Based Code Search, ICSE 2009, May 2009.
Specifying What to Search For, SUITE 2009, May 2009.
Seeking the User Interface, ASE 2014.
Creating Test Cases Using Code Search unpublished.
Hunter: Next-Generator Code Reuse for Java by Yuepeng Want, Yu Feng, Ruben Martins, Arati Kaushik, Isil DIllig and Steven Reiss, FSE 2016.
Seeking the User Interface by Steven Reiss, Yun Miao and Qi Xin, Automated Software Engineering Journal, 2017.
Images
Front end:
Front end showing results:
Diagram of the intern>ls:
Original article: http://cs.brown.edu/~spr/research/s6.html
Eldorado.gg offers many WoW Cataclysm Gold For Sale.