Στη σημερινή εποχή, η ραγδαία ανάπτυξη της τεχνολογίας, έχει οδηγήσει και στη γρήγορη ανάπτυξη έργων λογισµικού πολλών γραμμών κώδικα, τα οποία έχουν επηρεάσει πολλές πτυχές της καθημερινής µας ζωής. Η αναγνωσιμότητας του κώδικα, αποτελεί χρήσιμο ποιοτικό χαρακτηριστικό ενός έργου λογισµικού. Μάλιστα, έρευνες έχουν δείξει ότι επηρεάζει το έργο τόσο κατά το στάδιο ανάπτυξής του όσο και κατά τη διάρκεια συντήρησης του έργου. Για τον σκοπό αυτό, έχουν αναπτυχθεί διάφορα μοντέλα αναγνωσιμότητας κώδικα. Κάθε ένα από αυτά τα μοντέλα βασίζεται σε διαφορετικά χαρακτηριστικά, αναλύοντας πτυχές όπως η δομή του κώδικα, η όψη του κώδικα, αλλά και το περιεχόµενο. Στην παρούσα διπλωματική εργασία, επιχειρούμε, βασιζόμενοι στα ήδη υπάρχοντα μοντέλα αξιολόγησης αναγνωσιμότητας κώδικα, να αναλύσουμε περαιτέρω την έννοια της αναγνωσιμότητας. Αναλύθηκαν commits χρηστών από την πλατφόρμα GitHub, τα οποία είναι συνδεδεμένα µε την αναγνωσιμότητα του κώδικα, µε βάση κάποια από τα ήδη υπάρχοντα μοντέλα αξιολόγησης αναγνωσιμότητας. Αρχικός στόχος ήταν µε βάση τα δεδοµένα που προέκυψαν από αυτά τα commits των προγραμματιστών να διερευνηθεί εάν τα commits, τα οποία ισχυρίζονται τη βελτίωση της αναγνωσιμότητας πράγματι τη βελτιώνουν, καθώς και ποιες αλλαγές ή συνδυασμός αυτών είναι υπεύθυνες για τη βελτίωση ή µη της αναγνωσιμότητας. Ένας δεύτερος στόχος, ο οποίος µας απασχόλησε ήταν εάν θα µπορούσαμε µέσα από τις διαφορές των χαρακτηριστικών του κώδικα πριν και µετά το commit να καταλάβουμε ποια μοντέλα αναγνωσιμότητας είναι ικανά να κατηγοριοποιήσουν ποιες αλλαγές έχουν πραγματοποιηθεί στον κώδικα, καθώς και να προτείνουμε ένα πιο αποδοτικό μοντέλο. Και στα δύο παραπάνω ερωτήματα για την ανάπτυξη των μοντέλων χρησιμοποιήθηκαν μετρικές από διαφορετικά μοντέλα αξιολόγησης αναγνωσιμότητας κώδικα, τα οποία συγκρίθηκαν ως προς την απόδοσή τους.
Στατική Ανάλυση Κώδικα Python και Αναγνώριση Πιθανών Ευπαθειών Ασφαλείας για ...
Εφαρµογή Τεχνικών Μηχανικής Μάθησης για την Ανάλυση Αλλαγών Κώδικα µε στόχο τη Βελτίωση Αναγνωσιµότητας
1. Ευθύμιος Γρηγοράκης
Εφαρμογή Τεχνικών Μηχανικής Μάθησης για την
Ανάλυση Αλλαγών Κώδικα με στόχο τη Βελτίωση
Αναγνωσιμότητας
Τμήμα Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών
Κύκλος Σπουδών Ηλεκτρονικής και Υπολογιστών
Αριστοτέλειο Πανεπιστήμιο Θεσσαλονίκης, Πολυτεχνική Σχολή
Ομάδα Ευφυών Συστημάτων και Τεχνολογίας Λογισμικού
Εργαστήριο Επεξεργασίας Πληροφορίας και Υπολογιστών
Διπλωματική Εργασία
Εκπόνηση:
Ευθύμιος Γρηγοράκης
ΑΕΜ:
9694
Επιβλέποντες:
Ανδρέας Λ. Συμεωνίδης
Καθηγητής ΑΠΘ
Διαμαντόπουλος Θεμιστοκλής
Μεταδιδακτορικός Ερευνητής
24/1/2024 1
2. Ευθύμιος Γρηγοράκης
Περιεχόμενα
1. Εισαγωγή - Στόχοι
2. Μεθοδολογία
3. Αποτελέσματα - Αξιολόγηση
4. Συμπεράσματα
5. Μελλοντική Εργασία
24/1/2024 Εφαρμογή Τεχνικών Μηχανικής Μάθησης για την Ανάλυση Αλλαγών Κώδικα με στόχο τη Βελτίωση Αναγνωσιμότητας 2
4. Ευθύμιος Γρηγοράκης
Εισαγωγή
• Η συντήρηση ενός έργου λογισμικού αποτελεί το 66-99% του κόστους του
• Τα μισά από αυτά τα κόστη αναλώνονται στην κατανόηση του κώδικα
• Η αναγνωσιμότητα του κώδικα είναι συνδεδεμένη με το κόστος
συντήρησης
• Ένας ευανάγνωστος κώδικας χρειάζεται λιγότερο χρόνο για κατανόηση
• Η αναγνωσιμότητα του κώδικα είναι σημαντική για την ανάπτυξη και
συντήρηση
24/1/2024 Εφαρμογή Τεχνικών Μηχανικής Μάθησης για την Ανάλυση Αλλαγών Κώδικα με στόχο τη Βελτίωση Αναγνωσιμότητας 4
5. Ευθύμιος Γρηγοράκης
Στόχοι
1. Διερεύνηση αν τα commits που στοχεύουν σε βελτίωση
αναγνωσιμότητας πράγματι τη βελτιώνουν με βάση τα μοντέλα
της βιβλιογραφίας
2. Ανάπτυξη μοντέλου για την κατηγοριοποίηση commits που
στοχεύουν σε βελτίωση αναγνωσιμότητας με βάση τις αλλαγές
του κώδικα
24/1/2024 Εφαρμογή Τεχνικών Μηχανικής Μάθησης για την Ανάλυση Αλλαγών Κώδικα με στόχο τη Βελτίωση Αναγνωσιμότητας 5
7. Ευθύμιος Γρηγοράκης
Διάγραμμα Ροής Μεθοδολογίας
24/1/2024 7
Εφαρμογή Τεχνικών Μηχανικής Μάθησης για την Ανάλυση Αλλαγών Κώδικα με στόχο τη Βελτίωση Αναγνωσιμότητας
8. Ευθύμιος Γρηγοράκης
Συλλογή Δεδομένων
• Λήψη commits μέσω GitHub API
• Αναζήτηση βάσει commit message
(π.χ. “more readable”)
• Java files
• Single-file changes
• Patch file εώς 25 γραμμές
• Λήψη των αρχείων πριν και μετά τις αλλαγές
24/1/2024 Εφαρμογή Τεχνικών Μηχανικής Μάθησης για την Ανάλυση Αλλαγών Κώδικα με στόχο τη Βελτίωση Αναγνωσιμότητας 8
Παράδειγμα commit
9. Ευθύμιος Γρηγοράκης
Ανάλυση Δεδομένων(1/3)
• Μετρικές Στατικής Ανάλυσης
• Χρήση εργαλείου στατικής ανάλυσης SourceMeter Analyzer
• Εφαρμογή σε before και after files
• Εξαγωγή 11 μετρικών, όπως π.χ. cyclomatic complexity
• Μετρικές Αναγνωσιμότητας
• Χρήση εργαλείου Scalabrino
• Yπολογισμός 47 μετρικών σχετικών με αναγνωσιμότητα
• Π.χ. number of Identifiers, number of comment lines
• Υπολογισμός Readability Score για μοντέλα Scalabrino, Buse-Weimer,
Posnett, Karanikiotis
24/1/2024 Εφαρμογή Τεχνικών Μηχανικής Μάθησης για την Ανάλυση Αλλαγών Κώδικα με στόχο τη Βελτίωση Αναγνωσιμότητας 9
10. Ευθύμιος Γρηγοράκης
Ανάλυση Δεδομένων(2/3)
24/1/2024 Εφαρμογή Τεχνικών Μηχανικής Μάθησης για την Ανάλυση Αλλαγών Κώδικα με στόχο τη Βελτίωση Αναγνωσιμότητας 10
• Data Annotation
• Με βάση τα Patch files και τις αλλαγές που πραγματοποιούνται
• 17 κατηγορίες αλλαγών
11. Ευθύμιος Γρηγοράκης
Ανάλυση Δεδομένων(3/3)
• Παραδείγματα αλλαγών
24/1/2024 Εφαρμογή Τεχνικών Μηχανικής Μάθησης για την Ανάλυση Αλλαγών Κώδικα με στόχο τη Βελτίωση Αναγνωσιμότητας 11
Blank lines addition
Intermediate variable
12. Ευθύμιος Γρηγοράκης
Εφαρμογή Αλγορίθμων Μηχανικής Μάθησης
• Classification:
• Decision Tree Classifier
• Random Forest Classifier
• Linear SVM
• Stacking Generalization Model
24/1/2024 Εφαρμογή Τεχνικών Μηχανικής Μάθησης για την Ανάλυση Αλλαγών Κώδικα με στόχο τη Βελτίωση Αναγνωσιμότητας 12
Ταξινόμηση Δεδομένων
13. Ευθύμιος Γρηγοράκης
Αποτελέσματα - Αξιολόγηση
24/1/2024 13
Εφαρμογή Τεχνικών Μηχανικής Μάθησης για την Ανάλυση Αλλαγών Κώδικα με στόχο τη Βελτίωση Αναγνωσιμότητας
14. Ευθύμιος Γρηγοράκης
Διαδικασία Πειράματος 1
24/1/2024 14
Εφαρμογή Τεχνικών Μηχανικής Μάθησης για την Ανάλυση Αλλαγών Κώδικα με στόχο τη Βελτίωση Αναγνωσιμότητας
• Υπολογισμός διαφορών μεταξύ των
τιμών των μετρικών πριν και μετά το
commit
• Εκτέλεση μοντέλου με είσοδο τις
διαφορές
• Έξοδος: πρόβλεψη σε ποια κατηγορία
αλλαγών ανήκει το commit βελτίωσης
αναγνωσιμότητας
15. Ευθύμιος Γρηγοράκης
Αποτελέσματα εύρεσης κατηγορίας αλλαγών
• Στο stacking model
χρησιμοποιήθηκαν ως
base models τα μοντέλα
readability
24/1/2024 Εφαρμογή Τεχνικών Μηχανικής Μάθησης για την Ανάλυση Αλλαγών Κώδικα με στόχο τη Βελτίωση Αναγνωσιμότητας 15
16. Ευθύμιος Γρηγοράκης
Διαδικασία Πειράματος 2
24/1/2024 16
Εφαρμογή Τεχνικών Μηχανικής Μάθησης για την Ανάλυση Αλλαγών Κώδικα με στόχο τη Βελτίωση Αναγνωσιμότητας
• Υπολογισμός διαφορών
μεταξύ τιμών των μετρικών
πριν και μετά το commit
• Εκτέλεση μοντέλου με
είσοδο τις διαφορές
• Έξοδος: πρόβλεψη αν η
αναγνωσιμότητα πράγματι βελτιώθηκε
• Το ground truth καθορίζεται από τα ίδια τα μοντέλα
(αν ένα αρχείο βελτιώθηκε τότε το εκάστοτε μοντέλο
θα θεωρήσει αυξημένη αναγνωσιμότητα)
18. Ευθύμιος Γρηγοράκης
Αποτελέσματα εύρεσης commits που βελτιώνουν
την αναγνωσιμότητα
• Το κάθε Δέντρο
Απόφασης εκπαιδεύτηκε
με τις διαφορές
χαρακτηριστικών και το
readability score του
αναλογου μοντέλου
• Στο μοντέλο με Voting
Score χρησιμοποιήθηκαν
όλα τα χαρακτηριστικά
24/1/2024 Εφαρμογή Τεχνικών Μηχανικής Μάθησης για την Ανάλυση Αλλαγών Κώδικα με στόχο τη Βελτίωση Αναγνωσιμότητας 18
19. Ευθύμιος Γρηγοράκης
Παραδείγματα Μονοπατιών
24/1/2024 19
Εφαρμογή Τεχνικών Μηχανικής Μάθησης για την Ανάλυση Αλλαγών Κώδικα με στόχο τη Βελτίωση Αναγνωσιμότητας
Comment Density
>= 0
McCabe Complexity
<= -0.04
Nesting Level
> -0.19
Comment Density
> 0
Comment Lines of Code
< 0.01
Halstead Vocabulary
<= 0.04
Periods Average
>= 0
Spaces Average
> -0.06
Avg Identifiers Length
<= -0,04
Model: Karanikiotis Model: Karanikiotis Model: Buse & Weimer
Result:
Reduced Readability
Result:
Reduced Readability
Result:
Increased Readability
21. Ευθύμιος Γρηγοράκης
Συμπεράσματα
• Για την εύρεση commits που βελτιώνουν την αναγνωσιμότητα το
μοντέλο Posnett έχει τα καλύτερα αποτελέσματα.
• Το παραπάνω αποτελέι ένδειξη ότι οι αλλαγές των προγραμματιστών
συμβαδίζουν με την κατεύθυνσή των μετρικών του μοντέλου Posnett
• Για την εύρεση της κατηγορίας αλλαγών το Stacking Model έχει
καλύτερα αποτελέσματα
• Μια εφαρμογή του μοντέλου θα ήταν η αυτόματη συγγραφή σχολίων
24/1/2024 Εφαρμογή Τεχνικών Μηχανικής Μάθησης για την Ανάλυση Αλλαγών Κώδικα με στόχο τη Βελτίωση Αναγνωσιμότητας 21
23. Ευθύμιος Γρηγοράκης
Μελλοντική Εργασία
• Χρήση του Stacking Generalisation Model για την αυτόματη και την
σαφέστερη συγγραφή commit messages
• Π.χ. αντί για "Improves readability" θα γράφαμε "Improves readability by
adding comments" ή "Improves readability by removing redundant lines", κτλ.
• ∆ημιουργία συστήματος για την πρόταση αλλαγών για την βελτίωση
της αναγνωσιμότητας του κώδικα
24/1/2024 Εφαρμογή Τεχνικών Μηχανικής Μάθησης για την Ανάλυση Αλλαγών Κώδικα με στόχο τη Βελτίωση Αναγνωσιμότητας 23
24. Ευθύμιος Γρηγοράκης
Ευχαριστίες
• Θα ήθελα να ευχαριστήσω:
• Τον Καθηγητή Ανδρέα Λ. Συμεωνίδη
• Τον Μεταδιδακτορικό Ερευνητή Θεμιστοκλή Διαμαντόπουλο
• Όλους όσους παρακολουθήσατε την παρουσίαση μου
24/1/2024 Εφαρμογή Τεχνικών Μηχανικής Μάθησης για την Ανάλυση Αλλαγών Κώδικα με στόχο τη Βελτίωση Αναγνωσιμότητας 24