Η αναγνωσιμότητα του κώδικα είναι σημαντική, καθώς ένα μεγάλο κομμάτι χρόνου στη διάρκεια ζωής ενός έργου λογισμικού αφιερώνεται στην ανάγνωση και κατανόηση κώδικα. Υπάρχουν αρκετά μοντέλα που στοχεύουν στην εκτίμηση του πόσο εύκολα κάποιος άνθρωπος μπορεί να διαβάσει και να κατανοήσει ένα κομμάτι πηγαίου κώδικα. Στην παρούσα διπλωματική εργασία εξετάζουμε ποια μοντέλα και μετρικές είναι ευαίσθητα σε μικρές αλλαγές αναγνωσιμότητας (ένα commit). Βρήκαμε τα commits που βελτιώνουν την αναγνωσιμότητα από αποθετήρια λογισμικού ανοιχτού κώδικα, και επιλέξαμε κάποια ακόμα τυχαία commits. Για κάθε αρχείο που τροποποιούσαν, υπολογίσαμε την τιμή από μετρικές και μοντέλα αναγνωσιμότητας πριν και μετά το commit. Έπειτα, μετρήσαμε τη διαφορά σε κάθε μετρική πριν και μετά το commit, και επίσης τη διαφορά ανάμεσα σε commit αναγνωσιμότητας και μη. Τέλος, κατασκευάσαμε ένα νέο μοντέλο που είναι ευαίσθητο σε τέτοιες μικρές μεταβολές. Τα μοντέλα μας είναι Μηχανές Διανυσμάτων Υποστήριξης (SVR) που εκτελούν παλινδρόμηση και έχουν γραμμικό, RBF, ή πολυωνυμικό πυρήνα. Χρησιμοποιήσαμε cross-validation στην εκπαίδευση, και για την επιλογή των χαρακτηριστικών εισόδου εφαρμόσαμε Sequential Backward Selection. Βρήκαμε ότι οι περισσότερες μετρικές δεν έχουν στατιστικά σημαντικές μεταβολές μετά από commits αναγνωσιμότητας και οι υπόλοιπες εμφανίζουν πολύ μικρές μεταβολές. Συγκρίνοντας τις μεταβολές μεταξύ commits αναγνωσιμότητας και μη, οι διαφορές είναι μεγαλύτερες: σχεδόν όλες οι μετρικές έχουν παρατηρήσιμες και τουλάχιστον μικρές ή πολύ μικρές μεταβολές. Το SVR μοντέλο αναγνωσιμότητας κώδικα που εκπαιδεύσαμε λαμβάνει ως είσοδο 9 χαρακτηριστικά και έχει περίπου ίσες ή ελαφρά μεγαλύτερες μεταβολές μετά από commit αναγνωσιμότητας, σε σύγκριση με τα υπάρχοντα μοντέλα.
ΣΧΕΔΙΑΣΗ ΚΑΙ ΑΝΑΠΤΥΞΗ ΜΗΧΑΝΙΣΜΟΥ ΑΥΤΟΜΑΤΟΠΟΙΗΣΗΣ ΤΗΣ ΑΝΑΠΤΥΞΗΣ ΓΡΑΦΙΚΩΝ ΕΝΤΟΛ...
Αξιολόγησvη μοντέλων αναγνωσvιμότητας κώδικα σvε μικρές μεταβολές και κατασvκευή νέου μοντέλου
1. 1
Αξιολόγηση μοντέλων αναγνωσιμότητας κώδικα σε μικρές μεταβολές και κατασκευή νέου μοντέλου
Ιούλιος 2022
Αξιολόγηση μοντέλων
αναγνωσιμότητας κώδικα
σε μικρές μεταβολές και
κατασκευή νέου μοντέλου
Διπλωματική Εργασία
Εκπόνηση:
Ανέστης Βαρσαμίδης
ΑΕΜ 9112
Επίβλεψη:
Καθηγητής Ανδρέας Συμεωνίδης
Υποψήφιος διδάκτωρ
Θωμάς Καρανικιώτης
2. 2
Αξιολόγηση μοντέλων αναγνωσιμότητας κώδικα σε μικρές μεταβολές και κατασκευή νέου μοντέλου
Ιούλιος 2022
Μοντέλα αναγνωσιμότητας κώδικα
Είναι συνάρτηση διαφόρων μετρικών,
όπως αριθμός γραμμών, μέσο μήκος
γραμμών, μέσο μήκος identifiers,
DFT της στοίχισης του κώδικα, κα.
Τα μοντέλα που θα αξιολογήσουμε:
● Buse&Weimer
● Posnett
● Dorn (προσέγγιση)
● Scalabrino
● Καρανικιώτης (ISSEL)
Μοντέλο
αναγνωσιμότητας
Αρχείο
κώδικα
Σκορ
3. 3
Αξιολόγηση μοντέλων αναγνωσιμότητας κώδικα σε μικρές μεταβολές και κατασκευή νέου μοντέλου
Ιούλιος 2022
Στόχος της διπλωματικής
Να εξετάσουμε εάν τα σκορ αναγνωσιμότητας κώδικα βελτιώνονται μετά
από commit που υποστηρίζουν ότι βελτιώνουν την αναγνωσιμότητα
Να βρούμε ποιες μετρικές μεταβάλλονται σημαντικά στα
commits αναγνωσιμότητας,
και άρα θα μπορούσαν να χρησιμοποιηθούν σε ένα νέο μοντέλο;
Να φτιάξουμε ένα μοντέλο αναγνωσιμότητας με αυτές τις μετρικές
5. 5
Αξιολόγηση μοντέλων αναγνωσιμότητας κώδικα σε μικρές μεταβολές και κατασκευή νέου μοντέλου
Ιούλιος 2022
Επιλογή repositories: από τα δημοφιλέστερα του GitHub σε Java
Γιατί Java? Όλα τα μοντέλα υποστηρίζουν κώδικες Java
Επιλογή readability commits:
- Αρχικά αναζήτηση στα μηνύματα των commit με λέξεις-κλειδιά, πχ
readable, readability, easier to read, comprehensible, understandable
- Έπειτα, έλεγχος των μηνυμάτων για επαλήθευση ότι το commit έχει σκοπό
τη βελτίωση της αναγνωσιμότητας. Περίπου τα μισά ήταν ψευδώς θετικά
Επιλογή non-readability commits, για σύγκριση: τυχαία
6. 6
Αξιολόγηση μοντέλων αναγνωσιμότητας κώδικα σε μικρές μεταβολές και κατασκευή νέου μοντέλου
Ιούλιος 2022
“Υλοποίηση” των μοντέλων
● Μοντέλα Buse-Weimer, Scalabrino, Issel: Χρήση έτοιμων εκτελέσιμων,
εκπαιδευμένων μοντέλων
○ στο Buse-Weimer, σαν είσοδος δινόταν snippets 8 γραμμών
● Μοντέλο Posnett: Χρήση του τύπου λογιστικής παλινδρόμησης που
περιέχει στο paper: logistic(8.87 − 0.033 V + 0.40 Lines −1.5 Entropy)
● Dorn: προσπάθεια ανακατασκευής μοντέλου από τα δεδομένα και το paper
○ κατώφλι για Long lines? Επιλέξαμε Q3 +1.5 IQR του μήκους των μη κενών γραμμών από
τα αρχεία Java του dataset. = 113 χαρακτήρες
○ Σταθερά +c ? Για ελάχιστο MSE μεταξύ αναγν. από ερωτηματολόγια, και του σκορ.
c=1.4
○ Τελικά, σκορ = logistic(-0.0388 * Dorn DFT Spaces - 0.0349 * long lines - 0.0114 *
lines_per_identifier + 0.004 * keywords + 1.4)
7. 7
Αξιολόγηση μοντέλων αναγνωσιμότητας κώδικα σε μικρές μεταβολές και κατασκευή νέου μοντέλου
Ιούλιος 2022
Τα ερωτήματα που μελετάμε
Από το metric generation καταλήγουμε με 2 τιμές για κάθε μετρική (ή μοντέλο)
για κάθε αρχείο Java που τροποποιήθηκε σε κάποιο commit: την μετρική πριν το
commit και μετά
Q1a: σε ποιες μετρικές ή μοντέλα παρατηρείται αύξηση της μέσης τιμής μετά
από readability commits
Δηλαδή για κάθε μετρική συγκρίνουμε τα 2 σύνολα: {η μετρική για κάθε αρχείο
πριν το commit} {η μετρική για κάθε αρχείο μετά το commit}
Q1b: το ίδιο για τα non-readability commits
8. 8
Αξιολόγηση μοντέλων αναγνωσιμότητας κώδικα σε μικρές μεταβολές και κατασκευή νέου μοντέλου
Ιούλιος 2022
Τα ερωτήματα που μελετάμε (2)
Q2: ποιες μετρικές ή μοντέλα μεταβάλλονται στα readability commits
διαφορετικά από ότι στα non-readability
Δηλαδή για κάθε μετρική συγκρίνουμε τα 2 σύνολα: {οι διαφορές μετά-πριν για
κάθε αρχείο σε readability commits} {οι διαφορές για κάθε αρχείο σε non-
readability commits}
Q3: μπορεί να κατασκευαστεί ένα μοντέλο αναγνωσιμότητας
ώστε το σκορ να βελτιώνεται μετά από readability commits;
9. 9
Αξιολόγηση μοντέλων αναγνωσιμότητας κώδικα σε μικρές μεταβολές και κατασκευή νέου μοντέλου
Ιούλιος 2022
Πώς εξετάζουμε τα ερωτήματα
Cohen’s delta
για interval δεδομένα
d = (μ1 - μ2) / σ
t-test για διαφορά μέσων τιμών
Τ = d √N >? Tthreshold
Cliff’s Delta
για ordinal δεδομένα
Πόσο συχνά οι τιμές του ενός συνόλου
είναι μεγαλύτερες από του δεύτερου
Mann–Whitney U statistic
U = (d+1)*mn / 2 >? Uthreshold
Effect size |d|
Very small 0.01
Small 0.20
Medium 0.50
Large 0.80
10. 10
Αξιολόγηση μοντέλων αναγνωσιμότητας κώδικα σε μικρές μεταβολές και κατασκευή νέου μοντέλου
Ιούλιος 2022
Κριτήρια
Για το t-test και το Mann-Whitney U, το κατώφλια υπολογίζονται με βάση την
μηδενική υπόθεση, ότι δεν υπάρχει διαφορά στις δύο κατανομές, και ότι είναι
κανονικές. Επιλέγουμε κριτήριο p-value < 0.05
Για το Cohen’s d:
- στο Q1, όλες οι μετρικές είχαν λιγότερο από μικρό |d| < 0.1
Αναμενόμενο, αφού μεσολαβεί μόνο ένα commit. Βάζουμε όριο |d| > 0.01
- στο Q2 βάζουμε όριο |d|>0.14, δηλαδή σχεδόν μικρό effect size
11. 11
Αξιολόγηση μοντέλων αναγνωσιμότητας κώδικα σε μικρές μεταβολές και κατασκευή νέου μοντέλου
Ιούλιος 2022
Ομαδοποίηση ανά commit
Τα ερωτήματα εξετάζονται 2 φορές:
όταν τα Cliff’s, Cohen’s d κλπ υπολογίζονται για μία μετρική στα διάφορα
αρχεία,
και όταν, πριν υπολογίσουμε τα Cliff’s, Cohen’s d κλπ, ομαδοποιούμε τα
δεδομένα ανά commit. Δηλαδή, λέμε ότι πριν το commit x, η μετρική Α είναι ίση
με το μέσο όρο των τιμών της Α στα αρχεία που μεταβάλλονται στο commit x.
Αυτό τον τρόπο θα τον ονομάζουμε per-commit
12. 12
Αξιολόγηση μοντέλων αναγνωσιμότητας κώδικα σε μικρές μεταβολές και κατασκευή νέου μοντέλου
Ιούλιος 2022
Κατασκευή μοντέλου και επιλογή χαρακτηριστικών εισόδου
Ακολουθιακή
οπισθοδρομική επιλογή
13. 13
Αξιολόγηση μοντέλων αναγνωσιμότητας κώδικα σε μικρές μεταβολές και κατασκευή νέου μοντέλου
Ιούλιος 2022
Αποτελέσματα:
Q1a
πριν vs μετά
σε επίπεδο αρχείου
14. 14
Αξιολόγηση μοντέλων αναγνωσιμότητας κώδικα σε μικρές μεταβολές και κατασκευή νέου μοντέλου
Ιούλιος 2022
Αποτελέσματα:
Q1a
πριν vs μετά
σε επίπεδο commit
16. 16
Αξιολόγηση μοντέλων αναγνωσιμότητας κώδικα σε μικρές μεταβολές και κατασκευή νέου μοντέλου
Ιούλιος 2022
Αποτελέσματα: Q2 readability vs non-read. commits
σε επίπεδο αρχείου
17. 17
Αξιολόγηση μοντέλων αναγνωσιμότητας κώδικα σε μικρές μεταβολές και κατασκευή νέου μοντέλου
Ιούλιος 2022
Αποτελέσματα: Q2 readability vs non-read. commits
σε επίπεδο commit
18. 18
Αξιολόγηση μοντέλων αναγνωσιμότητας κώδικα σε μικρές μεταβολές και κατασκευή νέου μοντέλου
Ιούλιος 2022
Μετρική (σε επίπεδο αρχείου) Cohen Cliff t-test p-
value
mann-whitn p-
value
BW Max Identifiers Length -0.25118 -0.30673 1.50E-15 7.10E-14
BW Avg blank lines 0.19745 -0.71919 3.44E-10 1.05E-09
Dorn Visual X Numbers -0.19099 -0.88854 1.25E-09 5.87E-03
NA (Number of Attributes) -0.19437 -0.83025 1.49E-09 5.31E-14
Dorn DFT Operators -0.17844 -0.45594 1.38E-08 1.79E-16
NLA (Number of Local Attributes) -0.18101 -0.94814 1.66E-08 2.42E-11
TNLA (Total Number of Local Attributes) -0.17606 -0.94689 4.00E-08 1.63E-13
BW Avg Assignment -0.17256 -0.92510 4.03E-08 1.63E-04
NLE (Nesting Level Else-If) -0.17345 -0.98602 6.16E-08 3.99E-13
TNA (Total Number of Attributes) -0.17147 -0.82821 9.47E-08 3.67E-15
Dorn DFT Conditionals -0.16216 -0.44446 2.48E-07 5.82E-16
New Semantic Text Coherence Standard -0.16161 -0.45523 2.72E-07 2.56E-17
Posnett volume -0.15455 -0.46492 8.75E-07 1.57E-29
Dorn score 0.14697 -0.91512 2.90E-06 3.05E-10
NS (Number of Setters) -0.14851 -0.99301 3.70E-06 1.79E-08
NL (Nesting Level) -0.14682 -0.98818 4.58E-06 4.26E-11
Dorn DFT Numbers -0.14345 -0.40272 4.98E-06 1.98E-14
Dorn Visual Y Numbers -0.14235 -0.42903 5.88E-06 2.95E-13
Dorn DFT Spaces -0.14078 -0.46292 7.44E-06 4.58E-16
Dorn Visual X Identifiers -0.14073 -0.85257 7.47E-06 3.88E-05
Dorn Visual X Operators -0.14040 -0.84311 7.85E-06 4.30E-05
Dorn Visual X Keywords -0.14034 -0.84780 7.92E-06 3.36E-06
19. 19
Αξιολόγηση μοντέλων αναγνωσιμότητας κώδικα σε μικρές μεταβολές και κατασκευή νέου μοντέλου
Ιούλιος 2022
Αρχικό σύνολο features μοντέλων
Μετρικές που μεταβάλλονται μετά από readability commits και:
είτε μεταβάλλονται αντίθετα μετά από non-readability commits, είτε καθόλου
BW Avg Assignment BW Avg loops CC (Clone Coverage) NL (Nesting Level)
BW Avg blank lines BW Avg
parenthesis
CLC (Clone Line
Coverage)
NLA (Number of Local
Attributes)
BW Avg commas BW Avg spaces CLLC (Clone Logical
Line Coverage)
NLE (Nesting Level
Else-If )
BW Avg conditionals BW Max keywords karanikiotis_r_cmplx NS (Number of Setters)
BW Avg indentation
length
Dorn Visual X
Numbers
NA (Number of
Attributes)
TNA (Total Number of
Attributes)
20. 20
Αξιολόγηση μοντέλων αναγνωσιμότητας κώδικα σε μικρές μεταβολές και κατασκευή νέου μοντέλου
Ιούλιος 2022
Παράμετροι υποψήφιων μοντέλων
● Γραμμικό πυρήνα με τις προεπιλεγμένες υπερπαραμέτρους
● Γραμμικό πυρήνα με παράμετρο κανονικοποποίησης C = 0,2 ή C = 3.
(προεπιλογή: C = 1). Και στις δύο περιπτώσεις, χειρότερη απόδοση από C = 1
● Πολυωνυμικό πυρήνα, με συντελεστή γάμμα = 1/(nfeatures ⋅ Var( X ))
(“scale”, η προεπιλογή), ή γάμμα = 1/nfeatures (“auto”).
● Πυρήνα radial basis function (rbf), με συντελεστή γάμμα “scale” ή “auto”.
21. 21
Αξιολόγηση μοντέλων αναγνωσιμότητας κώδικα σε μικρές μεταβολές και κατασκευή νέου μοντέλου
Ιούλιος 2022
Επιλογή features του μοντέλου
RBF πυρήνας Γραμμικός πυρήνας
Μέσο τετραγωνικό σφάλμα vs Αριθμός χαρακτηριστικών εισόδου