Predictive modeling of code quality: exploring feature significance through machine learning analysis of ”GitHub” repositories
Lapienis, Paulius |
Šiuolaikinės kodo kokybės sistemos grįstos statinėmis kodo kokybės metrikomis. Šios metrikos senos, o jų nauda ginčijama, todėl reikalingi nauji būdai analizuoti kodą. Darbe išnagrinėjamos ir pritaikomos populiarios statinės kodo kokybės metrikos. Metrikos palyginamos su grafais grįstomis metodikomis. Šis palyginimas vyksta kodo bazės lygmenyje, su naujai sukurtu ir pristatytu duomenų rinkiniu. Duomenų rinkinys susideda iš septynių skirtingų, statinių, kodo kokybės metrikų, penkių skirtingų, iš kodo sukurtų grafų, ir vienos išorinės kodo kokybės metrikos, svertinių "GitHub" problemų. Šie duomenys saugomi kiekviename versijavimo sistemos taške. Darbe pritaikomos dvi skirtingos mašininio mokymosi architektūros, statinių kodo kokybės metrikų analizei, ir trys grafų mašininio mokymosi architektūros. Iš viso atlikta septyniolika skirtingų eksperimentų, iš kurių atlikta kodo charakterizavimo, ir modelių architektūrų analizė ir palyginimas. Gafais grystos metodikos buvo nežymiai geresnės kodo kokybės spėjime, nei statinėmis kodo metrikomis grįstos metodikos, tačiau turėjo didelį pranašumą interpretuojamumo aspekte.
Current day code quality systems are based on static code quality metrics. These metrics are old and, their utility is questionable. Because of that, new ways of performing code analysis are required. In this thesis, popular static code analysis metrics are analyzed, applied and compared with graph based methodologies. This comparison is made on a codebase level, with a new dataset presented in the thesis. The dataset consists of seven different, static code quality metrics, five different graphs featurized from the source code, and one external code quality metric, in this case weighted "GitHub" issues. This type of featurization was performed on each distinct version control system commit. In the thesis, two different machine learning methods are applied to static, code quality metric analysis, and three graph based neural networks are applied to five different methods of featurizatoin, which in total, equates to seventeen different experiments, from which the comparison of code featurization techniques, and machine learning architectures is performed. Graph based methodologies are identified as having a slight edge in predicting code quality, but were much more interpretable.