Successfully reported this slideshow.
Your SlideShare is downloading. ×

Αξιολόγησvη μοντέλων αναγνωσvιμότητας κώδικα σvε μικρές μεταβολές και κατασvκευή νέου μοντέλου

Ad

1
Αξιολόγηση μοντέλων αναγνωσιμότητας κώδικα σε μικρές μεταβολές και κατασκευή νέου μοντέλου
Ιούλιος 2022
Αξιολόγηση μοντέ...

Ad

2
Αξιολόγηση μοντέλων αναγνωσιμότητας κώδικα σε μικρές μεταβολές και κατασκευή νέου μοντέλου
Ιούλιος 2022
Μοντέλα αναγνωσι...

Ad

3
Αξιολόγηση μοντέλων αναγνωσιμότητας κώδικα σε μικρές μεταβολές και κατασκευή νέου μοντέλου
Ιούλιος 2022
Στόχος της διπλω...

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Check these out next

1 of 22 Ad
1 of 22 Ad

Αξιολόγησvη μοντέλων αναγνωσvιμότητας κώδικα σvε μικρές μεταβολές και κατασvκευή νέου μοντέλου

Download to read offline

Η αναγνωσιμότητα του κώδικα είναι σημαντική, καθώς ένα μεγάλο κομμάτι χρόνου στη διάρκεια ζωής ενός έργου λογισμικού αφιερώνεται στην ανάγνωση και κατανόηση κώδικα. Υπάρχουν αρκετά μοντέλα που στοχεύουν στην εκτίμηση του πόσο εύκολα κάποιος άνθρωπος μπορεί να διαβάσει και να κατανοήσει ένα κομμάτι πηγαίου κώδικα. Στην παρούσα διπλωματική εργασία εξετάζουμε ποια μοντέλα και μετρικές είναι ευαίσθητα σε μικρές αλλαγές αναγνωσιμότητας (ένα commit). Βρήκαμε τα commits που βελτιώνουν την αναγνωσιμότητα από αποθετήρια λογισμικού ανοιχτού κώδικα, και επιλέξαμε κάποια ακόμα τυχαία commits. Για κάθε αρχείο που τροποποιούσαν, υπολογίσαμε την τιμή από μετρικές και μοντέλα αναγνωσιμότητας πριν και μετά το commit. Έπειτα, μετρήσαμε τη διαφορά σε κάθε μετρική πριν και μετά το commit, και επίσης τη διαφορά ανάμεσα σε commit αναγνωσιμότητας και μη. Τέλος, κατασκευάσαμε ένα νέο μοντέλο που είναι ευαίσθητο σε τέτοιες μικρές μεταβολές. Τα μοντέλα μας είναι Μηχανές Διανυσμάτων Υποστήριξης (SVR) που εκτελούν παλινδρόμηση και έχουν γραμμικό, RBF, ή πολυωνυμικό πυρήνα. Χρησιμοποιήσαμε cross-validation στην εκπαίδευση, και για την επιλογή των χαρακτηριστικών εισόδου εφαρμόσαμε Sequential Backward Selection. Βρήκαμε ότι οι περισσότερες μετρικές δεν έχουν στατιστικά σημαντικές μεταβολές μετά από commits αναγνωσιμότητας και οι υπόλοιπες εμφανίζουν πολύ μικρές μεταβολές. Συγκρίνοντας τις μεταβολές μεταξύ commits αναγνωσιμότητας και μη, οι διαφορές είναι μεγαλύτερες: σχεδόν όλες οι μετρικές έχουν παρατηρήσιμες και τουλάχιστον μικρές ή πολύ μικρές μεταβολές. Το SVR μοντέλο αναγνωσιμότητας κώδικα που εκπαιδεύσαμε λαμβάνει ως είσοδο 9 χαρακτηριστικά και έχει περίπου ίσες ή ελαφρά μεγαλύτερες μεταβολές μετά από commit αναγνωσιμότητας, σε σύγκριση με τα υπάρχοντα μοντέλα.

Η αναγνωσιμότητα του κώδικα είναι σημαντική, καθώς ένα μεγάλο κομμάτι χρόνου στη διάρκεια ζωής ενός έργου λογισμικού αφιερώνεται στην ανάγνωση και κατανόηση κώδικα. Υπάρχουν αρκετά μοντέλα που στοχεύουν στην εκτίμηση του πόσο εύκολα κάποιος άνθρωπος μπορεί να διαβάσει και να κατανοήσει ένα κομμάτι πηγαίου κώδικα. Στην παρούσα διπλωματική εργασία εξετάζουμε ποια μοντέλα και μετρικές είναι ευαίσθητα σε μικρές αλλαγές αναγνωσιμότητας (ένα commit). Βρήκαμε τα commits που βελτιώνουν την αναγνωσιμότητα από αποθετήρια λογισμικού ανοιχτού κώδικα, και επιλέξαμε κάποια ακόμα τυχαία commits. Για κάθε αρχείο που τροποποιούσαν, υπολογίσαμε την τιμή από μετρικές και μοντέλα αναγνωσιμότητας πριν και μετά το commit. Έπειτα, μετρήσαμε τη διαφορά σε κάθε μετρική πριν και μετά το commit, και επίσης τη διαφορά ανάμεσα σε commit αναγνωσιμότητας και μη. Τέλος, κατασκευάσαμε ένα νέο μοντέλο που είναι ευαίσθητο σε τέτοιες μικρές μεταβολές. Τα μοντέλα μας είναι Μηχανές Διανυσμάτων Υποστήριξης (SVR) που εκτελούν παλινδρόμηση και έχουν γραμμικό, RBF, ή πολυωνυμικό πυρήνα. Χρησιμοποιήσαμε cross-validation στην εκπαίδευση, και για την επιλογή των χαρακτηριστικών εισόδου εφαρμόσαμε Sequential Backward Selection. Βρήκαμε ότι οι περισσότερες μετρικές δεν έχουν στατιστικά σημαντικές μεταβολές μετά από commits αναγνωσιμότητας και οι υπόλοιπες εμφανίζουν πολύ μικρές μεταβολές. Συγκρίνοντας τις μεταβολές μεταξύ commits αναγνωσιμότητας και μη, οι διαφορές είναι μεγαλύτερες: σχεδόν όλες οι μετρικές έχουν παρατηρήσιμες και τουλάχιστον μικρές ή πολύ μικρές μεταβολές. Το SVR μοντέλο αναγνωσιμότητας κώδικα που εκπαιδεύσαμε λαμβάνει ως είσοδο 9 χαρακτηριστικά και έχει περίπου ίσες ή ελαφρά μεγαλύτερες μεταβολές μετά από commit αναγνωσιμότητας, σε σύγκριση με τα υπάρχοντα μοντέλα.

Advertisement
Advertisement

More Related Content

More from ISSEL

Advertisement

Αξιολόγησvη μοντέλων αναγνωσvιμότητας κώδικα σvε μικρές μεταβολές και κατασvκευή νέου μοντέλου

  1. 1. 1 Αξιολόγηση μοντέλων αναγνωσιμότητας κώδικα σε μικρές μεταβολές και κατασκευή νέου μοντέλου Ιούλιος 2022 Αξιολόγηση μοντέλων αναγνωσιμότητας κώδικα σε μικρές μεταβολές και κατασκευή νέου μοντέλου Διπλωματική Εργασία Εκπόνηση: Ανέστης Βαρσαμίδης ΑΕΜ 9112 Επίβλεψη: Καθηγητής Ανδρέας Συμεωνίδης Υποψήφιος διδάκτωρ Θωμάς Καρανικιώτης
  2. 2. 2 Αξιολόγηση μοντέλων αναγνωσιμότητας κώδικα σε μικρές μεταβολές και κατασκευή νέου μοντέλου Ιούλιος 2022 Μοντέλα αναγνωσιμότητας κώδικα Είναι συνάρτηση διαφόρων μετρικών, όπως αριθμός γραμμών, μέσο μήκος γραμμών, μέσο μήκος identifiers, DFT της στοίχισης του κώδικα, κα. Τα μοντέλα που θα αξιολογήσουμε: ● Buse&Weimer ● Posnett ● Dorn (προσέγγιση) ● Scalabrino ● Καρανικιώτης (ISSEL) Μοντέλο αναγνωσιμότητας Αρχείο κώδικα Σκορ
  3. 3. 3 Αξιολόγηση μοντέλων αναγνωσιμότητας κώδικα σε μικρές μεταβολές και κατασκευή νέου μοντέλου Ιούλιος 2022 Στόχος της διπλωματικής Να εξετάσουμε εάν τα σκορ αναγνωσιμότητας κώδικα βελτιώνονται μετά από commit που υποστηρίζουν ότι βελτιώνουν την αναγνωσιμότητα Να βρούμε ποιες μετρικές μεταβάλλονται σημαντικά στα commits αναγνωσιμότητας, και άρα θα μπορούσαν να χρησιμοποιηθούν σε ένα νέο μοντέλο; Να φτιάξουμε ένα μοντέλο αναγνωσιμότητας με αυτές τις μετρικές
  4. 4. 4 Αξιολόγηση μοντέλων αναγνωσιμότητας κώδικα σε μικρές μεταβολές και κατασκευή νέου μοντέλου Ιούλιος 2022 Υπολογισμός των μετρικών και σκορ
  5. 5. 5 Αξιολόγηση μοντέλων αναγνωσιμότητας κώδικα σε μικρές μεταβολές και κατασκευή νέου μοντέλου Ιούλιος 2022 Επιλογή repositories: από τα δημοφιλέστερα του GitHub σε Java Γιατί Java? Όλα τα μοντέλα υποστηρίζουν κώδικες Java Επιλογή readability commits: - Αρχικά αναζήτηση στα μηνύματα των commit με λέξεις-κλειδιά, πχ readable, readability, easier to read, comprehensible, understandable - Έπειτα, έλεγχος των μηνυμάτων για επαλήθευση ότι το commit έχει σκοπό τη βελτίωση της αναγνωσιμότητας. Περίπου τα μισά ήταν ψευδώς θετικά Επιλογή non-readability commits, για σύγκριση: τυχαία
  6. 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. 7 Αξιολόγηση μοντέλων αναγνωσιμότητας κώδικα σε μικρές μεταβολές και κατασκευή νέου μοντέλου Ιούλιος 2022 Τα ερωτήματα που μελετάμε Από το metric generation καταλήγουμε με 2 τιμές για κάθε μετρική (ή μοντέλο) για κάθε αρχείο Java που τροποποιήθηκε σε κάποιο commit: την μετρική πριν το commit και μετά Q1a: σε ποιες μετρικές ή μοντέλα παρατηρείται αύξηση της μέσης τιμής μετά από readability commits Δηλαδή για κάθε μετρική συγκρίνουμε τα 2 σύνολα: {η μετρική για κάθε αρχείο πριν το commit} {η μετρική για κάθε αρχείο μετά το commit} Q1b: το ίδιο για τα non-readability commits
  8. 8. 8 Αξιολόγηση μοντέλων αναγνωσιμότητας κώδικα σε μικρές μεταβολές και κατασκευή νέου μοντέλου Ιούλιος 2022 Τα ερωτήματα που μελετάμε (2) Q2: ποιες μετρικές ή μοντέλα μεταβάλλονται στα readability commits διαφορετικά από ότι στα non-readability Δηλαδή για κάθε μετρική συγκρίνουμε τα 2 σύνολα: {οι διαφορές μετά-πριν για κάθε αρχείο σε readability commits} {οι διαφορές για κάθε αρχείο σε non- readability commits} Q3: μπορεί να κατασκευαστεί ένα μοντέλο αναγνωσιμότητας ώστε το σκορ να βελτιώνεται μετά από readability commits;
  9. 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. 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. 11 Αξιολόγηση μοντέλων αναγνωσιμότητας κώδικα σε μικρές μεταβολές και κατασκευή νέου μοντέλου Ιούλιος 2022 Ομαδοποίηση ανά commit Τα ερωτήματα εξετάζονται 2 φορές: όταν τα Cliff’s, Cohen’s d κλπ υπολογίζονται για μία μετρική στα διάφορα αρχεία, και όταν, πριν υπολογίσουμε τα Cliff’s, Cohen’s d κλπ, ομαδοποιούμε τα δεδομένα ανά commit. Δηλαδή, λέμε ότι πριν το commit x, η μετρική Α είναι ίση με το μέσο όρο των τιμών της Α στα αρχεία που μεταβάλλονται στο commit x. Αυτό τον τρόπο θα τον ονομάζουμε per-commit
  12. 12. 12 Αξιολόγηση μοντέλων αναγνωσιμότητας κώδικα σε μικρές μεταβολές και κατασκευή νέου μοντέλου Ιούλιος 2022 Κατασκευή μοντέλου και επιλογή χαρακτηριστικών εισόδου Ακολουθιακή οπισθοδρομική επιλογή
  13. 13. 13 Αξιολόγηση μοντέλων αναγνωσιμότητας κώδικα σε μικρές μεταβολές και κατασκευή νέου μοντέλου Ιούλιος 2022 Αποτελέσματα: Q1a πριν vs μετά σε επίπεδο αρχείου
  14. 14. 14 Αξιολόγηση μοντέλων αναγνωσιμότητας κώδικα σε μικρές μεταβολές και κατασκευή νέου μοντέλου Ιούλιος 2022 Αποτελέσματα: Q1a πριν vs μετά σε επίπεδο commit
  15. 15. 15 Αξιολόγηση μοντέλων αναγνωσιμότητας κώδικα σε μικρές μεταβολές και κατασκευή νέου μοντέλου Ιούλιος 2022 Μετρική (σε επίπεδο αρχείου) q1a cohen q1a cliff q1a ttest pval q1a wilcoxon pval q1b cohen q1b cliff q1b ttest pval q1b wilcoxon pval BW Avg blank lines 0.03795 0.01712 0.000003 0.014149 -0.01029 -0.55715 0.005039 0.000000 CC (Clone Coverage) -0.04800 -0.99747 0.000009 0.000000 0.00203 -0.97974 0.750903 0.000000 BW Avg Assignment -0.03325 -0.01731 0.000013 0.000000 0.00904 0.01767 0.016432 0.675391 CLLC (Cl. Log. Line Cov.) -0.04944 -0.99747 0.000020 0.000000 0.00087 -0.98043 0.933312 0.000000 Dorn Visual X Numbers -0.02632 -0.01055 0.000045 0.036398 0.01728 0.01213 0.000027 0.000537 NLE (Nesting Lvl Else-If) -0.03021 -0.99747 0.000049 0.000000 0.00813 -0.95911 0.011213 0.000000 BW Avg loops -0.02086 -0.00791 0.000154 0.000000 0.01436 0.00882 0.004245 0.000000 CLC (Clone Line Cov.) -0.04269 -0.99747 0.000217 0.000000 0.00474 -0.98043 0.383319 0.000000 NA (Number of Attributes) -0.02529 -0.97351 0.000264 0.000000 0.00570 -0.75052 0.000000 0.000000 NL (Nesting Level) -0.02957 -0.99747 0.000858 0.000000 0.00586 -0.75046 0.023617 0.000000 BW Avg conditionals -0.02414 -0.01458 0.001004 0.000011 0.00224 0.00349 0.461382 0.000001 BW Avg commas -0.01957 -0.00880 0.001965 0.023494 0.00602 -0.64362 0.012068 0.156621 TNA (Total # Attributes) -0.01938 -0.65000 0.002735 0.000000 0.00632 -0.71834 0.000000 0.000000 BW Max keywords -0.01687 -0.01357 0.004874 0.005659 -0.00124 0.01731 0.706635 0.364976 NLA (# Local Attributes) -0.01057 -0.34891 0.006834 0.000000 0.00537 -0.74814 0.000000 0.000000 NS (Number of Setters) -0.01385 -0.99747 0.010056 0.000000 0.00276 -0.88871 0.000002 0.000000 BW Avg spaces -0.02144 -0.01080 0.011362 0.000099 0.00647 -0.77531 0.012598 0.000003 BW Avg parenthesis -0.01320 -0.00655 0.017536 0.002476 0.00534 -0.55999 0.021778 0.690260 issel_r_cmplx 0.02476 -0.92892 0.019222 0.004127 0.00943 -0.75445 0.140701 0.000008 BW Avg indentation length -0.02039 -0.00958 0.021713 0.000081 0.00482 -0.75455 0.069441 0.008891 Dorn score 0.01716 0.00258 0.024127 0.000060 -0.02144 -0.58388 0.000001 0.000000 Issel score 0.02051 -0.76760 0.024438 0.017263 0.00650 -0.88910 0.213736 0.000017 Dorn Areas Identifiers 0.01175 0.00428 0.034597 0.000158 0.01341 -0.56156 0.000000 0.000000 Posnett entropy 0.01784 0.00629 0.035151 0.000041 0.01036 -0.77064 0.000575 0.000001
  16. 16. 16 Αξιολόγηση μοντέλων αναγνωσιμότητας κώδικα σε μικρές μεταβολές και κατασκευή νέου μοντέλου Ιούλιος 2022 Αποτελέσματα: Q2 readability vs non-read. commits σε επίπεδο αρχείου
  17. 17. 17 Αξιολόγηση μοντέλων αναγνωσιμότητας κώδικα σε μικρές μεταβολές και κατασκευή νέου μοντέλου Ιούλιος 2022 Αποτελέσματα: Q2 readability vs non-read. commits σε επίπεδο commit
  18. 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. 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. 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. 21 Αξιολόγηση μοντέλων αναγνωσιμότητας κώδικα σε μικρές μεταβολές και κατασκευή νέου μοντέλου Ιούλιος 2022 Επιλογή features του μοντέλου RBF πυρήνας Γραμμικός πυρήνας Μέσο τετραγωνικό σφάλμα vs Αριθμός χαρακτηριστικών εισόδου
  22. 22. 22 Αξιολόγηση μοντέλων αναγνωσιμότητας κώδικα σε μικρές μεταβολές και κατασκευή νέου μοντέλου Ιούλιος 2022

×