ftn-ai-lab / sc-2020-siit

Soft Computing - 2020 - Sotversko inženjerstvo i informacione tehnologije
MIT License
3 stars 4 forks source link

Uočavanje Long Method smell-a #25

Closed zdugi closed 3 years ago

zdugi commented 3 years ago

Tim Zdravko Dugonjić SW25-2017

Asistent Dragan Vidaković

Definicija problema Cilj projekta je da se za datu metodu odredi da li je prisutan Long Method smell. Ulaz u sistem predstavlja telo metode, a izlaz da li je smell uočen.

Motivacija Trenutna state-of-the-art rešenja na domenu prepoznavanja bad smell-ova se zasnivaju na tehnikama baziranim na pravilima. Ekspanzijom upotrebe Deep Learning metoda, metode bazirane na pravilima bivaju daleko nadmašene u pogledu dobijenih rezultat. Postoje indikacije da bi njihova primena i na ovom domenu mogla da postane nova state-of-the-art. U okviru projekta će biti demonstrirana upotreba Deep Learning pristupa za rešavanje jednog potproblema, problema segmentacije, što će poslužiti kao proof-of-concept da se u budućnosti pređe na potpunu Deep Learning arhitekturu.

Metodologija Po uzoru na rad [1], problem će biti dekomponovan na dva modula, segmenter i modul za pronalaženje sličnosti. Segmenter pomoću rekurentne neuronske mreže vrši podelu tela metode na logičke celine [2]. Ulaz u neuronsku mrežu predstavlja sekvenca karaktera, a izlaz iz mreže da li određeni karakter u sekvenci predstavlja početak novog logičkog bloka. Na osnovu izlaza iz mreže se formiraju blokovi. Prepoznati blokovi se dalje procesuiraju u okviru modula za pronalaženje sličnosti. Za potrebe prepoznavanja sličnosti koristiće se Latent Semantic Indexing (LSI). Između svaka dva bloka određuje se koeficijent sličnosti, koji se poredi sa određenim pragom i na osnovu broja blokova koji pređu zadati prag formira izlaz iz modula ‒ indikator da li je Long Method smell prisutan.

Skup podataka Treniranje segmentera vrši se nad skupom podataka koji se konstruiše konkatenacijom isečaka koda koji se izdvajaju iz StackOverflow postova. Na mestima spajanja blokova, znak za novi red se označava kao početak novog logičkog bloka. Kako ulaz u neuronsku mrežu predstavlja niz karaktera, jednu instancu će predstavljati niz od 100 karaktera; nizovi se generišu prevlačenjem prozora preko konkateniranih postova. Anotacija će se vršiti karakter po karakter, tako što će se svakom karakteru za novi red, koji predstavlja početak novog segmenta, dodeliti 1, a u suprotnom 0. Skup MLCQ biće korišćen u konačnoj evaluaciji da bi se ustanovilo u kolikoj meri je predloženo rešenje u stanju da prepozna Long Method smell.

Evaluacija Evaluacija segmentera se vrši tako što će se konkatenirani skup podeliti 80/10/10, na trening, testni i validacioni skup redom. Evaluacija finalnog rešenja, prepoznavanje smell-a, se vrši nad MLCQ skupom anoniranih podataka. Pre sprovođenja evaluacije, biće izvršena ručna procena performanse segmentera nad MLCQ skupom, kako bi se ustanovio njegov uticaj na finalnu performansu. Mera koja će se koristiti za određivanje performanse modela je F-skor.

[1] PALOMBA, Fabio. Textual analysis for code smell detection. In: 2015 IEEE/ACM 37th IEEE International Conference on Software Engineering. IEEE, 2015. p. 769-771. [2] Dormuth, Jacob, et al. "Logical Segmentation of Source Code." arXiv preprint arXiv:1907.08615 (2019).

vdragan1993 commented 3 years ago

Tema odobrena. Ostavite link ka GitHub repozitorijumu projekta. Srećan rad.

zdugi commented 3 years ago

https://github.com/zdugi/LongMethodDetector