Nowadays, the concept of software has prevailed in all aspects of human daily life, offering significant solutions to a wide variety of issues. The need for producing reliable and functional software within short timeframes that can adapt to possible changes is constantly increasing. In recent years, there has been significant research activity in the field of software development process optimization, while the vast availability of open-source software projects in repositories such as GitHub makes accessing large volumes of code data easy. Leveraging this information can serve as a catalyst for creating useful tools that can greatly accelerate the software development process while improving communication and collaboration among development teams. This thesis presents an integrated system for automated source code formatting using machine learning techniques. The primary goal of the system is to detect and correct formatting errors that deviate from the standards set by the development team, ensuring its readability and thus facilitating easier maintenance. The system utilizes LSTM deep neural network models in combination with N-gram statistical language models for detecting formatting errors, while a specific mechanism for correcting these errors is proposed. Additionally, an evaluation mechanism for code formatting is proposed, aiming to quantify this abstract concept. The system designed within the scope of this thesis is evaluated on 8000 Java code files obtained from the CodRep 2019 competition. Through the observation of the final results, we conclude that the system performs effectively in both detecting and correcting formatting errors.
Εντοπισμός θέσης επισημασμένου αντικειμένου σε εσωτερικό χώρο με χρήση πολλαπ...
TOWARDS AN AUTOMATED SOURCE CODE FORMATTING SYSTEM
1. Διπλωματική Εργασία
Δημιουργία Συστήματος για την Παροχή Προτάσεων Βελτίωσης της
Μορφοποίησης Πηγαίου Κώδικα
Θωμάς Κανούτας
ΑΕΜ: 8826
Επιβλέποντες
Ανδρέας Συμεωνίδης, Καθηγητής ΑΠΘ
Θωμάς Καρανικιώτης, Υποψήφιος Διδάκτωρ ΑΠΘ
Αριστοτέλειο Πανεπιστήμιο Θεσσαλονίκης
Τμήμα Ηλεκτρολόγων Μηχανικών & Μηχανικών Υπολογιστών
Εργαστήριο Επεξεργασίας Πληροφορίας & Τεχνολογίας Λογισμικού (ISSEL)
2. Περιεχόμενα
Δημιουργία Συστήματος για την Παροχή Προτάσεων Βελτίωσης της Μορφοποίησης Πηγαίου Κώδικα
Θωμάς Κανούτας
Κίνητρο - Ορισμός
Προβλήματος
1 2 3 4
Παρουσίαση Πειραμάτων
Παρουσίαση Μεθοδολογίας -
Αντιμετώπιση Προβλήματος
Τελικά Αποτελέσματα -
Παρουσίαση Αποτελεσμάτων
Εισαγωγή Μεθοδολογικό
Πλαίσιο
Πειράματα Αποτελέσματα -
Συμπεράσματα
2
3. 1.
Αυτοματοποίηση και επιτάχυνση της διαδικασίας ανάπτυξης
λογισμικού
Κίνητρο
2.
Εύκολη πρόσβαση και αξιοποίηση δεδομένων πηγαίου
κώδικα (π.χ.GitHub)
3.
Δημιουργία Συστήματος για την Παροχή Προτάσεων Βελτίωσης της Μορφοποίησης Πηγαίου Κώδικα
Θωμάς Κανούτας
3
Μείωση χρόνου συντήρησης μέσω βελτίωσης της
αναγνωσιμότητας των αρχείων κώδικα του έργου
λογισμικού
4.
80% του συνολικού χρόνου ζωής ενός έργου λογισμικού
αφιερώνεται στη συντήρηση του
4. Δημιουργία Συστήματος για την Παροχή Προτάσεων Βελτίωσης της Μορφοποίησης Πηγαίου Κώδικα
Θωμάς Κανούτας
4
• Υλοποίηση αυτοματοποιημένου συστήματος εντοπισμού και διόρθωσης
σφαλμάτων μορφοποίησης
Ορισμός Προβλήματος
• Δημιουργία ενός μηχανισμού αξιολόγησης της μορφοποίησης ενός αρχείου
πηγαίου κώδικα
Βελτίωση
Μορφοποίησης
Ταχύτερη
Κατανόηση
Ταχύτερη &
Ποιοτικότερη
Συντήρηση
Βελτίωση
Αναγνωσιμότητας
5. Δημιουργία Συστήματος για την Παροχή Προτάσεων Βελτίωσης της Μορφοποίησης Πηγαίου Κώδικα
Θωμάς Κανούτας
Step 2
Εντοπισμός
σφαλμάτων με
χρήση δικτύου
LSTM
Step 1
Προεπεξεργασία
αρχείου πηγαίου
κώδικα
Step 3 Step 4
Διόρθωση
σφαλμάτων
μορφοποίησης
Step 5
Παροχή
προτάσεων
διόρθωσης με
καλύτερη
αξιολόγηση
μορφοποίησης
Μεθοδολογικό πλαίσιο
5
Αξιολόγηση
μορφοποίησης σε
επίπεδο αρχείου
και token.
6. Δημιουργία Συστήματος για την Παροχή Προτάσεων Βελτίωσης της Μορφοποίησης Πηγαίου Κώδικα
Θωμάς Κανούτας
Dataset
Tokenization Vectorization
TokenScore
FileScore
LSTM
10-gram
ErrorDetection
ErrorPositions
DataPreprocessing ErrorFixing
FixedFile
Αρχιτεκτονική Συστήματος
6
7. Δημιουργία Συστήματος για την Παροχή Προτάσεων Βελτίωσης της Μορφοποίησης Πηγαίου Κώδικα
Θωμάς Κανούτας
7
Προεπεξεργασία Δεδομένων
float y = 1.5
<lit> <space> <word> <space> <equal> <number> <semicolon>
2 1 5 1 8 10 6
Δύο βασικά στάδια προεπεξεργασίας ενός αρχείου κώδικα που παρέχεται ως είσοδος:
• Tokenization: μετατροπή και διάσπαση του αρχείου κώδικα σε επιμέρους, διακριτές οντότητες (tokens)
• Vectorization: αντιστοιχία κάθε οντότητας(token) με ένα ακέραιο αριθμό
;
8. Υποσύστημα Αξιολόγησης Μορφοποίησης
Αξιοποίηση της έννοιας της διασταυρούμενης εντροπίας (cross-entropy) ως μέτρο του βαθμού "έκπληξης"
του μοντέλου N-gram (όταν του παρέχεται ως είσοδος μια αλληλουχία οντοτήτων (tokens) t0,t1,…, tM)
Υλοποίηση στηρίχθηκε στα στατιστικά μοντέλα γλώσσας N-gram τα οποία έχουν την ικανότητα να
αναθέτουν υψηλότερες πιθανότητες εμφάνισης σε αλληλουχίες οντοτήτων (tokens) που συναντώνται
συχνότερα στο σύνολο εκπαίδευσης τους
Δημιουργία Συστήματος για την Παροχή Προτάσεων Βελτίωσης της Μορφοποίησης Πηγαίου Κώδικα
Θωμάς Κανούτας
1.
Ποσοτικοποίηση της αφαιρετικής έννοιας της μορφοποίησης πηγαίου κώδικα
2.
3.
8
9. Υποσύστημα Αξιολόγησης της
Μορφοποίησης (2)
Δημιουργία Συστήματος για την Παροχή Προτάσεων Βελτίωσης της Μορφοποίησης Πηγαίου Κώδικα
Θωμάς Κανούτας
4.
Το υποσύστημα αξιολόγησης ενεργεί σε δύο διαφορετικά επίπεδα λειτουργίας:
• αξιολόγηση αρχείου πηγαίου κώδικα συνολικά (source code level)
• αξιολόγηση του κάθε token που απαρτίζει το αρχείο πηγαίου κώδικα (token level)
5.
• Διάσπαση του αρχείου πηγαίου κώδικα σε διαδοχικά επιμέρους παράθυρα μήκους 20 tokens
• Υπολογισμός της διασταυρούμενης εντροπίας για κάθε παράθυρο
• Για κάθε token, εντοπίζεται το σύνολο των παραθύρων στα οποία ανήκει
• Ο βαθμός αξιολόγησης του εκάστοτε token υπολογίζεται ως έξης:
9
Aξιολόγηση σε επίπεδο token:
10. Υποσύστημα Εντοπισμού Σφαλμάτων
Μορφοποίησης
Δημιουργία Συστήματος για την Παροχή Προτάσεων Βελτίωσης της Μορφοποίησης Πηγαίου Κώδικα
Θωμάς Κανούτας
Tokenization Vectorization
DataPreprocessing LSTM
[1,4,6,10,35...]
ErrorProbability
Modification
10-gram
DetectedError
Positions
Παροχή αρχείου
πηγαίου κώδικα ως
είσοδος
Προεπεξεργασία
Αρχείου Πηγαίου
Κώδικα
Αναπαράσταση
αρχείου πηγαίου
κώδικα ως αλληλουχία
ακεραιών αριθμών
Διάσπαση αλληλουχίας σε παράθυρα
20-tokens τα οποία τροφοδούνται
διαδοχικά στο δίκτυο LSTM
Τροποποίηση των
πιθανοτήτων σφάλματος
του δικτύου LSTM με βάση
την αξιολόγηση του
εκάστοτε token η οποία
προέκυψε από το
υποσύστημα αξιολόγησης
Ως έξοδοι παρέχονται οι M
θέσεις των token με τις
υψηλότερες πιθανότητες
εμφάνισης σφάλματος
10
11. Υποσύστημα Διόρθωσης Σφαλμάτων
Μορφοποίησης
Δημιουργία Συστήματος για την Παροχή Προτάσεων Βελτίωσης της Μορφοποίησης Πηγαίου Κώδικα
Θωμάς Κανούτας
1.
Λαμβάνει δύο εισόδους:
• Τις θέσεις των Μ tokens με την υψηλότερη πιθανότητα εμφάνισης σφαλμάτων μορφοποίησης σύμφωνα με το υποσύστημα
εντοπισμού
• Το σύνολο των tokens που αποτελούν τις πιθανότερες αντικαταστάσεις ή προσθήκες για το εκάστοτε πιθανό σφάλμα
μορφοποίησης
2.
Πραγματοποιεί τρεις διαφορετικές προσεγγίσεις διόρθωσης του σφάλματος μορφοποίησης:
3.
• Έλεγχος συντακτικής ορθότητας των νέων διορθωμένων αρχείων κώδικα
• Ως έξοδοι του συστήματος παρέχονται τα αρχεία κώδικα με καλύτερο σκορ αξιολόγησης σε σχέση με το αρχικό
1
• Ολική διαγραφή του token που αντιστοιχεί στη θέση σφάλματος
• Αντικατάσταση του token που αντιστοιχεί στη θέση σφάλματος
• Προσθήκη νέου token πριν το token της πιθανής θέσης σφάλματος
12. 1.
Εκπαίδευση των μοντέλων του συστήματος με χρήση
8.500 αρχείων Java από 10.000 αποθετήρια του GitHub
με συγκεκριμένα, ευρέως διαδεδομένα πρότυπα
μορφοποίησης
Πειράματα & Αποτελέσματα
2.
3.
Δημιουργία Συστήματος για την Παροχή Προτάσεων Βελτίωσης της Μορφοποίησης Πηγαίου Κώδικα
Θωμάς Κανούτας
12
Αξιολόγηση της απόδοσης του συστήματος με βάση
8.000 αρχεία κώδικα Java από τον διαγωνισμό CodRep
2019, κάθε ένα από τα οποία περιέχει αποκλειστικά ένα
σφάλμα μορφοποίησης
• Αναλογία συνόλου εκπαίδευσης - ελέγχου για
εκπαίδευση δικτύου LSTM: 80/20
• Αναλογία συνόλου εκπαίδευσης - ελέγχου για
εκπαίδευση μοντέλου γλώσσας N-gram: 90/10
4.
• Αξιοποίηση 1.000 αρχείων εξ αυτών για την
αξιολόγηση του υποσυστήματος εντοπισμού
• Αξιοποίηση 100 αρχείων εξ αυτών για την αξιολόγηση
του υποσυστήματος διόρθωσης
15. Αξιολόγηση Υποσυστήματος Διόρθωσης (2)
Πριν
Δημιουργία Συστήματος για την Παροχή Προτάσεων Βελτίωσης της Μορφοποίησης Πηγαίου Κώδικα
Θωμάς Κανούτας
Μετά
Ολική διαγραφή token
1
16. Αξιολόγηση Υποσυστήματος Διόρθωσης (3)
Δημιουργία Συστήματος για την Παροχή Προτάσεων Βελτίωσης της Μορφοποίησης Πηγαίου Κώδικα
Θωμάς Κανούτας
Προσθήκη νέου token
Πριν Μετά
16
17. Αξιολόγηση Διόρθωσης Πολλαπλών Σφαλμάτων
Μορφοποίησης
Δημιουργία Συστήματος για την Παροχή Προτάσεων Βελτίωσης της Μορφοποίησης Πηγαίου Κώδικα
Θωμάς Κανούτας
1
1.
Αξιολόγηση του συστήματος σε περιπτώσεις αρχείων με
2 σφάλματα μορφοποίησης - 20 αρχεία
2.
Διαδοχικοί κύκλοι διόρθωσης τροφοδοτώντας το αρχείο
με την καλύτερη αξιολόγηση, του προηγουμένου κύκλου.
Μετά από 2 κύκλους, ελέγχεται αν το τελικό αρχείο
περιέχει τις επιθυμητές διορθώσεις
3.
Επιστροφή διορθωμένων αρχείων σε όλες τις
περιπτώσεις του πειράματος
18. Συμπεράσματα
Δημιουργία Συστήματος για την Παροχή Προτάσεων Βελτίωσης της Μορφοποίησης Πηγαίου Κώδικα
Θωμάς Κανούτας
1
2
3
Συνολικό σύστημα εντοπισμού και διόρθωσης σφαλμάτων
μορφοποίησης το οποίο δύναται να προσαρμοστεί σε διαφορετικά
πρότυπα χωρίς όγκο παραμετροποιήσεων
Ικανότητα τόσο των βαθιών νευρωνικών δικτύων τύπου LSTM όσο και
των μοντέλων γλώσσας Ν-gram να αποτυπώσουν τις στατιστικές
ιδιότητες αρχείων πηγαίου κώδικα
Εξαιρετική απόδοση του συνολικού συστήματος τόσο στον εντοπισμό
των σφαλμάτων μορφοποίησης όσο και στην διόρθωσή τους
18
19. Μελλοντική Εργασία
1
2
3
4
Δημιουργία Συστήματος για την Παροχή Προτάσεων Βελτίωσης της Μορφοποίησης Πηγαίου Κώδικα
Θωμάς Κανούτας
Εύρεση αυτοματοποιημένης μεθόδου αξιολόγησης του υποσυστήματος διόρθωσης σφαλμάτων
μορφοποίησης με στόχο την αξιολόγησή του σε μεγαλύτερο όγκο δεδομένων
Περαιτέρω αξιολόγηση του συστήματος σε διαφορετικές γλώσσες προγραμματισμού
Χρήση και αξιολόγηση διαφορετικών αρχιτεκτονικών βαθιών νευρωνικών δικτύων
εκτός από τα LSTM
Εκπαίδευση και αξιολόγηση του συστήματος σε διαφορετικά πρότυπα
μορφοποίησης με διαφορετικά χαρακτηριστικά
19