Στις ημέρες μας, η έννοια του λογισμικού έχει επικρατήσει σε όλες τις πτυχές της ανθρώπινης καθημερινότητας προσφέροντας σημαντικές λύσεις σε ένα εύρος διαφορετικών προβλημάτων. Η ανάγκη για παραγωγή αξιόπιστου και λειτουργικού λογισμικού σε μικρά χρονικά διαστήματα το οποίο θα παρουσιάζει ευελιξία σε πιθανές αλλαγές, είναι διαρκώς αυξανόμενη. Τα τελευταία χρόνια παρατηρείται σημαντική ερευνητική δραστηριότητα στο πεδίο της βελτιστοποίησης των διαδικασιών της ανάπτυξης λογισμικού ενώ η τεράστια διαθεσιμότητα ανοικτών έργων λογισμικού σε αποθετήρια όπως το GitHub, καθιστά εύκολη την πρόσβαση σε μεγάλους όγκους δεδομένων κώδικα. Η αξιοποίηση της πληροφορίας αυτής μπορεί να αποτελέσει το εφαλτήριο για την δημιουργία χρήσιμων εργαλείων τα οποία μπορούν να επιταχύνουν σημαντικά τη διαδικασία ανάπτυξης λογισμικού ενώ συγχρόνως θα βελτιώσουν την επικοινωνία και την συνεργασία μεταξύ των ομάδων ανάπτυξης. Η παρούσα διπλωματική εργασία παρουσιάζει ένα ολοκληρωμένο σύστημα αυτοματοποιημένης μορφοποίησης αρχείων πηγαίου κώδικα με χρήση τεχνικών μηχανικής μάθησης. Βασικός στόχος του συστήματος είναι ο εντοπισμός και η διόρθωση σφαλμάτων μορφοποίησης τα οποία αποκλίνουν από τα πρότυπα που έχει θέσει η ομάδα ανάπτυξης, διασφαλίζοντας την αναγνωσιμότητά του και συνεπώς την ευκολότερη συντήρησή του. Το σύστημα αξιοποιεί μοντέλα βαθιών νευρωνικών δικτύων τύπου LSTM σε συνδυασμό με στατιστικά μοντέλα γλώσσας N-gram για τον εντοπισμό σφαλμάτων μορφοποίησης, ενώ προτείνεται ένα συγκεκριμένος μηχανισμός διόρθωσης των σφαλμάτων αυτών. Επιπλέον, προτείνεται ένας μηχανισμός αξιολόγησης της μορφοποίησης αρχείων κώδικα με στόχο την ποσοτικοποίηση της αφαιρετικής αυτής έννοιας. Το σύστημα που σχεδιάστηκε στα πλαίσια της διπλωματική εργασίας, αξιολογείται σε 8000 αρχεία κώδικα σε γλώσσα Java τα οποία προέρχονται από το διαγωνισμό CodRep 2019. Μέσω της παρατήρησης των τελικών αποτελεσμάτων, συμπεραίνουμε πως το σύστημα αποδίδει αποτελεσματικά τόσο στο εντοπισμό όσο και στην διόρθωση των σφαλμάτων μορφοποίησης.
Εντοπισμός θέσης επισημασμένου αντικειμένου σε εσωτερικό χώρο με χρήση πολλαπ...
ΔΗΜΙΟΥΡΓΙΑ ΣΥΣΤΗΜΑΤΟΣ ΓΙΑ ΤΗΝ ΠΑΡΟΧΗ ΠΡΟΤΑΣΕΩΝ ΒΕΛΤΙΩΣΗΣ ΤΗΣ ΜΟΡΦΟΠΟΙΗΣΗΣ ΠΗΓΑΙΟΥ ΚΩΔΙΚΑ
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