Με την ραγδαία βελτίωση της τεχνολογίας, τα έργα λογισμικού αποκτούν ολοένα και σημαντικότερο ρόλο στην ζωή των ανθρώπων. Ως αποτέλεσμα, αυξάνεται συνεχώς το μέγεθος και η πολυπλοκότητά τους. Μεγάλο μέρος της του χρόνου των προγραμματιστών δαπανάται, κατά τα στάδια του ελέγχου ορθότητας και συντήρησης ενός έργου λογισμικού, για τον εντοπισμό και την διόρθωση σφαλμάτων του πηγαίου κώδικα. Ο εντοπισμός σφαλμάτων συγκεκριμένων κατηγοριών, μπορεί να αυτοματοποιηθεί με την χρήση κάποιου εργαλείου στατικής ανάλυσης. Ωστόσο, οι προγραμματιστές χρειάζονται αρκετό χρόνο για την κατανόηση και επίλυση των εντοιχιζόμενων σφαλμάτων και πολλές φορές καταλήγουν να τα αγνοούν για μεγάλα χρονικά διαστήματα. ΄Ετσι, έχει δημιουργηθεί η ανάγκη για κάποιο σύστημα αυτοματοποιημένης διόρθωσης σφαλμάτων. Παρόλο που αποτελεί ένα νέο πεδίο για τον τομέα της τεχνολογίας λογισμικού και της μηχανικής μάθησης, τα τελευταία χρόνια έχουν γίνει αρκετές ερευνητικές προσπάθειες για την δημιουργία τέτοιων συστημάτων. Ο στόχος της παρούσας διπλωματικής εργασίας είναι η χρήση της εξόρυξης δεδομένων από ανοιχτά αποθετήρια κώδικα για την ανάπτυξη ενός εργαλείου αυτοματοποιημένης διόρθωσης σφαλμάτων. Τα σφάλματα που αφορούν το παραπάνω σύστημα προέρχονται αποκλειστικά από κανόνες παραβιάσεων κώδικα του εργαλείου στατικής ανάλυσης PMD. Τα δεδομένα εξήχθησαν από αποθετήρια στο Github. Ειδικότερα, έγιναν ερωτήματα στο API του Github για την εύρεση commits, τα οποία περιέχουν στο μήνυμά τους, λέξεις κλειδιά που σχετίζονται με συγκεκριμένους κανόνες παραβιάσεων του PMD. Στην συνέχεια, με την χρήση του PMD, εξάγεται ο κώδικας γύρω από τις επιδιορθωμένες παραβιάσεις μαζί με τον κανόνα τους. Σε αυτά τα τμήματα κώδικα, πριν και μετά το commit, εξάγονται οι διαφορές τους με την χρήση του εργαλείου Gumtree. Το Gumtree εξάγει τις διαφορές τους σε επίπεδο δέντρων, εν προκειμένω αναπαραστάσεων κώδικα SrcML. Το Gumtree παράγει ως έξοδο ένα αρχείο με την λίστα των κόμβων του δέντρου που παρέμειναν ίδιοι και την λίστα των actions, που εάν εφαρμοστούν με την σειρά στο δέντρο πριν την αλλαγή, θα παράξουν το δέντρο μετά την αλλαγή. Μετά γίνεται λεξικογραφική ανάλυση αυτών των αρχείων, για την παραγωγή αντικειμένων κώδικα, που αντιπροσωπεύουν την λίστα των actions. ΄Επειτα, από αυτά τα αντικείμενα, παίρνοντας όλους τους κόμβους των actions με την σειρά, εξάγουμε ακολουθίες από τους τύπους των κόμβων. Αυτές χρησιμοποιούνται στην συνέχεια για την ομαδοποίηση των αλλαγών, με τις μεταξύ τους αποστάσεις να υπολογίζονται βάσει του μήκους της μέγιστης κοινής υπακολουθίας τους. Η ομαδοποίηση γίνεται με τον αλγόριθμο DBSCAN. Από κάθε παραγόμενη ομάδα εξάγουμε ένα πρότυπο διόρθωσης, για τον συχνότερο κανόνα των διορθώσεων της ομάδος. Τέλος, για την αυτοματοποιημένη διόρθωση παραβιάσεων του PMD, εξάγονται actions από κάποια ομάδα που έχει το ίδιο κανόνα με την παραβίαση και εφαρμόζονται σειρά σε όλα τα πιθανά σημεία της SrcML αναπαράστασής του.