Derin Öğrenme Teknikleriyle Yazılım Kod Kalitesi Analiz ve İyileştirme Öneri Sistemi Geliştirilmesi
Citation
BÜYÜK, Oğuzhan Oktay, Derin Öğrenme Teknikleriyle Yazılım Kod Kalitesi Analiz ve İyileştirme Öneri Sistemi Geliştirilmesi, Fatih Sultan Mehmet Vakıf Üniversitesi Lisansüstü Eğitim Enstitüsü Bilgisayar Mühendisliği Anabilim Dalı, Yayımlanmamış Yüksek Lisans Tezi, İstanbul 2021.Abstract
Bu tez çalışmasının amacı, kaynak koddaki değişimleri ve sebeplerini gösteren bir veriseti oluşturarak bu değişiklikleri türlerine göre analiz eden ve iyileştirme gereken noktaları öğrenebilen bir derin öğrenme sistem tasarımının yapılmasıdır. Açık-kaynak projelerindeki artış, kaynak kodların dağıtık paylaşımı, topluluk tarafından geliştirilmesi ve gelişmenin git versiyon kontrol sistemi teknolojisiyle takip edilebilmesi büyük bir verinin ortaya çıkmasına yardımcı olmuştur. Projelerdeki gelişim kaynak kodlarının farklı evreden geçmesiyle olur. Başlangıç halindeki kodun gelişim türü bir hata çözümü(bugfix), performans iyileştirmesi, yeni bir özelliğin eklenmesi veya birden fazla gelişim özelliğini içeren şekillerde olabilir. Literatürdeki güncel yaklaşımlar kaynak kodu temsil ederken metot olarak odaklanmaktadır. Metot yaklaşımıyla vektörleştirme ve tahminleme yapılan çalışmalar ve kod klonlanması tespiti üzerinedir. Yapılan bu çalışmalarda sınıf bütünlüğü yerine daha alt parçalar üzerine yoğunlaşıldığından sınıf kavramında büyük bir boşluk oluşmaktadır.
Sınıf bazında temsil edilen kaynak kod bir bütünlüğü temsil edeceğinden indeksleme kullanılarak soyut alt sözdizimi ağaçlarıyla bir bütünlük elde edilerek yeni bir model yapısı ortaya konmuştur. Derin öğrenme ağı olarak yinelemeli sinir ağından uzun kısa süreli hafıza ve kapalı yinelemeli üniteler kullanılmıştır. Gerçekleştirilen çalışma, bu zamana kadar olmayan kaynak kodla etiketli olarak üretilen bir veriseti ortaya çıkarmıştır. Veriseti için ek bir program yazılmıştır. Bu program git geçmişini kullanılarak bir açık-kaynak projesi olarak seçilmiş olan ElasticSearch'den kaynak kodları ve kaynak kodların zaman içerisinde gelişimlerini ve etiketlerini elde ederek düzenler. 2300 kaynak koddan oluşan verisetinde etiketleme tamamen açık-kaynak projesi olan ElasticSearch'teki kodun ilk halinden gelişerek ilerlemesindeki süreçte geliştiriciler tarafından atanan etiketler göz önüne alınarak oluşturulmuştur. Sonuçlar elde edilmesi için derin öğrenme ağında eğitim-doğrulama-test olarak sırasıyla %60, %20 ve %20 olarak bölünmüş ve sistemde test sonuçları 10 kere tekrar edilerek ortalaması alınmıştır. Uygulanan sistem %84,7 doğruluk oranı sağlamıştır. Sistemdeki sınıf yapısı, tamamen soyut alt sözdizimi ağaç yapısıyla indekslenerek temsil edilebilmiş ve vektörleştirme gerçekleştirmesiyle kaynak kodda ne tür bir geliştirme yapıldığı derin öğrenme ağıyla tespit edilmesine olanak tanımıştır. The aim of this thesis is to create dataset storing the changes by type, analyzing the change types on source code and providing source code enhancement by designing and implementing a learnable deep learning system. Increment on open-source projects, distributed sharing, development by community, and tracking improvement with git version control system of source codes have backed up to reveal huge data. Progress on projects occurs with passing many different stages in time. Progress type of source code at initial state can be bugfix, performance enhancement, feature or more than one improvement. Recent studies in literature have focused on representing source code in terms of methods. The studies are about vectorization and predicting of methods' name and clone detection of methods. These studies make a big gap concentrating on subparts rather than integrity of class. Other gap is lack of dataset that comprises of improvement or refactoring of source code.
Represented source code declaring the aggregateness as class reveals a new model that obtaines integrity using index-based abstract subsyntax trees. Recurrent neural network having variations of long-short term memory and gated recurrent unit is used. Implemented study finds out dataset that is labeled with the corresponding source code and has not been generated up to now. An additional program has been designed for dataset. Program using git history prepares dataset in which ElasticSearch as open-source project is selected to use representing the source codes and retrieves progress of them and their related labels in time. 2300 source codes have been used in this study. Labeling is purely assigned by getting developer's declarations in git commits of open source project of ElasticSearch. For the purpose of obtaining the result, the deep learning network is divided into train-validation-test with the values of 60%, 20% and 20%, respectively and test results retrying 10 times of the process have been averaged. Implemented system provides average accuracy rate of 84.7%. Class structure definitively is represented as indexed abstract subsyntax trees and generating vectorized of trees makes possible correctly learning of what kind of development type in the source code practised.