Εφαρμογή Τεχνικών Εξόρυξης Δεδομένων σε Αποθήκες Λογισμικού με
σκοπό την Εξαγωγή Προτύπων Σχεδίασης και Εξέλιξης
ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ
ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ
Τμήμα Ηλεκτρολόγων Μηχανικών και
Μηχανικών Υπολογιστών
Εργαστήριο Επεξεργασίας Πληροφορίας και
Υπολογισμών
Διπλωματική Εργασία
Φοιτητής: Καγιάφας Νικόλαος
Αριθμός Ειδικού Μητρώου (A.E.M.): 8817
Επιβλέποντες:
Συμεωνίδης Ανδρέας,
Αναπληρωτής Καθηγητής
Διαμαντόπουλος Θεμιστοκλής,
Μεταδιδακτορικός Ερευνητής
Ομάδα Ευφυών Συστημάτων και
Τεχνολογίας Λογισμικού
Θεσσαλονίκη, 14 Απριλίου 2021
Διάρθρωση Παρουσίασης
• Εισαγωγή
• Υλοποίηση του Συστήματος – Μεθοδολογία
• Πειράματα και Αποτελέσματα
• Συμπεράσματα
• Μελλοντική Εργασία
2
Εφαρμογή τεχνικών εξόρυξης δεδομένων σε αποθήκες λογισμικού
με σκοπό την εξαγωγή προτύπων σχεδίασης και εξέλιξης
Θεσσαλονίκη, Απρίλιος 2021
Διάρθρωση Παρουσίασης
Εισαγωγή
Υλοποίηση του Συστήματος –
Μεθοδολογία
Πειράματα και
Αποτελέσματα
Συμπεράσματα
Μελλοντική
Εργασία
3
Εφαρμογή τεχνικών εξόρυξης δεδομένων σε αποθήκες λογισμικού
με σκοπό την εξαγωγή προτύπων σχεδίασης και εξέλιξης
Θεσσαλονίκη, Απρίλιος 2021
Κίνητρο – Περιγραφή του Προβλήματος
4
Εφαρμογή τεχνικών εξόρυξης δεδομένων σε αποθήκες λογισμικού
με σκοπό την εξαγωγή προτύπων σχεδίασης και εξέλιξης
Θεσσαλονίκη, Απρίλιος 2021
• Αποθήκες λογισμικού στο Διαδίκτυο, μία
πλούσια πηγή δεδομένων
• Συνεργασία μεταξύ των προγραμματιστών
• Διενέργεια αλλαγών για βελτίωση,
διόρθωση και εξέλιξη ενός έργου
λογισμικού
Εύρεση συχνών τύπων αλλαγών
Εξέταση σχεδιαστικών αρχών για την
οικοδόμηση ενός προγράμματος
Κατανόηση και επίλυση παρόμοιων
προβλημάτων
Μοτίβα
αλλαγών
Διόρθωση λαθών
Συστηματικές
τροποποιήσεις
Βελτίωση χωρίς αλλαγές
στη λειτουργικότητα
Χρήση υπαρχόντων
σχολίων
Αλλαγές στην
αρχιτεκτονική
• Δεν έχουν εξεταστεί σε βάθος
• Δυνατότητα ανίχνευσης προτύπων
σχεδίασης και εξέλιξης λογισμικού
• Τίθενται οι βάσεις για ανάπτυξη
εργαλείων προτάσεων αλλαγών στην
αρχιτεκτονική
Στόχοι της διπλωματικής
5
Εφαρμογή τεχνικών εξόρυξης δεδομένων σε αποθήκες λογισμικού
με σκοπό την εξαγωγή προτύπων σχεδίασης και εξέλιξης
Θεσσαλονίκη, Απρίλιος 2021
Εύρεση συχνών
σχεδιαστικών προτύπων
και προτύπων εξέλιξης
Παρακολούθηση της
εξέλιξης των σχέσεων
μεταξύ των κλάσεων
Υλοποίηση εργαλείου
εξαγωγής των
σχέσεων ανάμεσα
στις διάφορες κλάσεις
ενός προγράμματος
Επιλογή και άντληση
του κατάλληλου
συνόλου δεδομένων
Ανάλυση των εξαγόμενων
προτύπων
Συλλογή στοιχείων σχετικά
με τη σημασιολογία και
τον στόχο τους
Ενίσχυση της δυνατότητας κατανόησης
του προγράμματος στο οποίο
χρησιμοποιούνται (program
comprehension)
Χρησιμοποιούν σήμερα οι προγραμματιστές
πρότυπα, συνειδητά ή μη;
Αν ναι, υπάρχουν και πρότυπα που δεν είναι μέχρι
σήμερα γνωστά;
Διάρθρωση Παρουσίασης
Εισαγωγή
Υλοποίηση του Συστήματος
– Μεθοδολογία
Πειράματα και
Αποτελέσματα
Συμπεράσματα
Μελλοντική
Εργασία
6
Εφαρμογή τεχνικών εξόρυξης δεδομένων σε αποθήκες λογισμικού
με σκοπό την εξαγωγή προτύπων σχεδίασης και εξέλιξης
Θεσσαλονίκη, Απρίλιος 2021
Αρχιτεκτονική του Συστήματος
7
Εφαρμογή τεχνικών εξόρυξης δεδομένων σε αποθήκες λογισμικού
με σκοπό την εξαγωγή προτύπων σχεδίασης και εξέλιξης
Θεσσαλονίκη, Απρίλιος 2021
Επιλογή και άντληση των κατάλληλων δεδομένων
8
Εφαρμογή τεχνικών εξόρυξης δεδομένων σε αποθήκες λογισμικού
με σκοπό την εξαγωγή προτύπων σχεδίασης και εξέλιξης
Θεσσαλονίκη, Απρίλιος 2021
Δημοφιλέστερη πλατφόρμα φιλοξενίας κώδικα με παραπάνω
από 56M χρήστες και 100M αποθετήρια
3000 πιο δημοφιλή
έργα λογισμικού
Καλά σχεδιασμένη δομή, σωστές
τεχνικές, αποτελεσματικότητα
Γραμμένα κατά κύριο
λόγο στην Java
GitHub, GitLab, Assembla, SourceForge
επιλογή εκείνων
με 15 έως 80
commits Επεξεργασία και
αρχειοθέτηση των
αλλαγών κάθε έργου
Το εργαλείο εξαγωγής σχέσεων
9
Εφαρμογή τεχνικών εξόρυξης δεδομένων σε αποθήκες λογισμικού
με σκοπό την εξαγωγή προτύπων σχεδίασης και εξέλιξης
Θεσσαλονίκη, Απρίλιος 2021
Abstract Syntax Tree
Επίπεδο αφαιρετικότητας κλάσεων
(Abstraction level of classes): Normal,
Abstract, Interface, Unknown
• Εξαγωγή σχέσεων ανάμεσα στις ενδογενείς κλάσεις ενός
προγράμματος
• Δυνατότητα επιλογής να συμπεριληφθούν και εκείνες
ανάμεσα στις ενδογενείς και τις εξωγενείς κλάσεις
(προέρχονται από εξωτερικές βιβλιοθήκες)
Κατευθυνόμενοι
γράφοι με ετικέτες σε
κόμβους και ακμές…??
Γραφική απεικόνιση των εξαγόμενων σχέσεων
10
Εφαρμογή τεχνικών εξόρυξης δεδομένων σε αποθήκες λογισμικού
με σκοπό την εξαγωγή προτύπων σχεδίασης και εξέλιξης
Θεσσαλονίκη, Απρίλιος 2021
• Χρήση του εργαλείου Graphviz
• Ενδεικτική απεικόνιση των σχέσεων
μεταξύ των ενδογενών κλάσεων του
προγράμματος kikoso/android-
stackblur
• Εξαγωγή στοιχείων σχετικά με την
αρχιτεκτονική του
Παρακολούθηση της εξέλιξης των σχέσεων - 1
11
Εφαρμογή τεχνικών εξόρυξης δεδομένων σε αποθήκες λογισμικού
με σκοπό την εξαγωγή προτύπων σχεδίασης και εξέλιξης
Θεσσαλονίκη, Απρίλιος 2021
Στιγμιότυπο του
προγράμματος πριν το
commit i
Στιγμιότυπο του
προγράμματος μετά το
commit i
commit i
Σχέσεις πριν το
commit i
Σχέσεις μετά το
commit i
Σχέσεις που δεν
υπάρχουν μετά
Σχέσεις που δεν
υπάρχουν πριν
Αφαιρούμενες (-) Προστιθέμενες (+)
• Λαμβάνονται υπ’ όψιν μόνο τα αρχεία
των commits του κυρίου βρόχου (main
branch)
• Αλλαγή ενός ή περισσότερων αρχείων
Java σε ένα commit
• Χρήση του εργαλείου pydriller
Παρακολούθηση της εξέλιξης των σχέσεων - 2
12
Εφαρμογή τεχνικών εξόρυξης δεδομένων σε αποθήκες λογισμικού
με σκοπό την εξαγωγή προτύπων σχεδίασης και εξέλιξης
Θεσσαλονίκη, Απρίλιος 2021
Τύποι τροποποιήσεων
• Delete: Διαγραφή του εν λόγω
αρχείου από το πρόγραμμα
• Modify: Διαφοροποίηση
ορισμένων τμημάτων του κώδικα
• Rename: Αλλαγή της θέσης ή/και
του ονόματος του συγκεκριμένου
αρχείου ή/και ορισμένων τμημάτων
του κώδικα σε αυτό
• Add: Προσθήκη νέου αρχείου στο
πρόγραμμα
Στη διαφορά των σχέσεων δε
λαμβάνονται υπ’ όψιν εκείνες που
προέρχονται από Add ή Delete
Δεν μας ενδιαφέρουν σχέσεις που δεν περνούν από το στάδιο της εξέλιξης
Σημαντικές μόνο για αλλαγή της μορφής του προγράμματος ανά commit
Εξόρυξη δεδομένων με τη βοήθεια του gSpan - 1
13
Εφαρμογή τεχνικών εξόρυξης δεδομένων σε αποθήκες λογισμικού
με σκοπό την εξαγωγή προτύπων σχεδίασης και εξέλιξης
Θεσσαλονίκη, Απρίλιος 2021
• gSpan (graph-based Substructure pattern mining)
• D: ένα σύνολο γράφων
• support(g): ο αριθμός των γράφων του D,
στους οποίους ο g εμφανίζεται ως υπογράφος
• minSup: ένα κάτω όριο συχνότητας που
επιλέγεται από τον χρήστη στην είσοδο
• Ανίχνευση μόνο των συχνών υπογράφων που είναι
συνδεδεμένοι
• Δεν υπάρχει πρόβλημα, όταν ένας γράφος του D
είναι μη συνδεδεμένος
• Μείωση του χρόνου εκτέλεσης σε σχέση με
προγενέστερους αλγορίθμους ακόμα και κατά μία
τάξη μεγέθους
• Σε ποιες τεχνικές όμως στηρίζει την καινοτομία του,
δεδομένης της δυσκολίας του προβλήματος;
Πρόβλημα
Εύρεση όλων των υπογράφων
g, έτσι ώστε support(g) ≥
minSup
Όσο το minSup ↓, τόσο ο
χρόνος εκτέλεσης ↑
• Κάθε γράφος αντιστοιχεί σε έναν κωδικό DFS
(Depth-First Search)
• Λεξικογραφική ταξινόμηση όλων των
παραπάνω κωδικών
• Με βάση αυτήν τη σειρά, κατασκευάζεται ένα
δέντρο αναζήτησης
Εξόρυξη δεδομένων με τη βοήθεια του gSpan - 2
14
Εφαρμογή τεχνικών εξόρυξης δεδομένων σε αποθήκες λογισμικού
με σκοπό την εξαγωγή προτύπων σχεδίασης και εξέλιξης
Θεσσαλονίκη, Απρίλιος 2021
Ds το σύνολο όλων των γράφων που
περιέχουν τον s ως υπογράφο
Αναδρομική κλήση για εύρεση
όλων των συχνών υπογράφων
Μείωση μεγέθους του
συνόλου γράφων
S το σύνολο των
αποτελεσμάτων
D το σύνολο όλων
των γράφων
Αρχικά βήματα του
αλγορίθμου
Διάρθρωση Παρουσίασης
Εισαγωγή
Υλοποίηση του Συστήματος –
Μεθοδολογία
Πειράματα και
Αποτελέσματα
Συμπεράσματα
Μελλοντική
Εργασία
15
Εφαρμογή τεχνικών εξόρυξης δεδομένων σε αποθήκες λογισμικού
με σκοπό την εξαγωγή προτύπων σχεδίασης και εξέλιξης
Θεσσαλονίκη, Απρίλιος 2021
Εύρεση συχνών σχεδιαστικών προτύπων
16
Εφαρμογή τεχνικών εξόρυξης δεδομένων σε αποθήκες λογισμικού
με σκοπό την εξαγωγή προτύπων σχεδίασης και εξέλιξης
Θεσσαλονίκη, Απρίλιος 2021
Σύνολο δεδομένων
576 έργα
λογισμικού
576 γράφοι 576 ομάδες σχέσεων μεταξύ
ενδογενών κλάσεων
• Εφαρμογή του gSpan για διάφορα επίπεδα υποστήριξης
• Για χαμηλές τιμές υποστήριξης ο αλγόριθμος δεσμεύει αρκετή
μνήμη και καθυστερεί
• Ανάγκη διαμόρφωσης του συνόλου δεδομένων → προγράμματα
με 100 έως και 400 σχέσεις
• Προκύπτουν κυρίως πρότυπα με χαρακτηρισμούς κλάσεων
“Normal”
• Θεώρηση ότι οι χαρακτηρισμοί Abstract και Interface ταυτίζονται
• Προκύπτουν πρότυπα με Abstracted ( Abstract or Interface)
χαρακτηρισμούς
…
Ανάλυση των εξαγόμενων σχεδιαστικών προτύπων - 1
17
Εφαρμογή τεχνικών εξόρυξης δεδομένων σε αποθήκες λογισμικού
με σκοπό την εξαγωγή προτύπων σχεδίασης και εξέλιξης
Θεσσαλονίκη, Απρίλιος 2021
• Δενδροειδές σχεδιαστικό πρότυπο, 162
από 576 έργα λογισμικού
• Κεντρική κλάση (Α) → επίτευξη στόχων του
προγράμματος
• Χρήση αντικειμένων δύο άλλων κλάσεων
(Β και D) → πιο ειδικοί στόχοι
• Οι B και D επικαλούνται δύο ακόμη με τη
σειρά τους (C και E)
Παράδειγμα
Διαχείριση πληροφοριών για την πρόσβαση υπαλλήλων
εταιρίας σε έγγραφα
Πληροφορίες για
τους υπαλλήλους
Αφαίρεση δικαιωμάτων
πρόσβασης με κάποια κριτήρια
Ανάλυση των εξαγόμενων σχεδιαστικών προτύπων - 2
18
Εφαρμογή τεχνικών εξόρυξης δεδομένων σε αποθήκες λογισμικού
με σκοπό την εξαγωγή προτύπων σχεδίασης και εξέλιξης
Θεσσαλονίκη, Απρίλιος 2021
Παράδειγμα
• Εφαρμογή σε πρόγραμμα γραφικής επεξεργασίας
• Υλοποίηση κλάσης για την απεικόνιση αντικειμένων
ή κειμένου
• Δημιουργία αντικειμένων όπως πλαίσιο κειμένου,
γραμμές ή σχήματα
• Κλάση ευθείας γραμμής κληρονομεί στοιχεία από
μία αφηρημένη κλάση → γραμμή
Ομοιότητα με γνωστό πρότυπο
• Δημιουργικό πρότυπο Factory Method
• Κλάση D → Creator
• Κλάση C → ConcreteCreator
• Κλάση E → ConcreteProduct
• Κλάση F → Product
25 από 105 προγράμματα με 100-400 σχέσεις
Ανάλυση των εξαγόμενων σχεδιαστικών προτύπων - 3
19
Εφαρμογή τεχνικών εξόρυξης δεδομένων σε αποθήκες λογισμικού
με σκοπό την εξαγωγή προτύπων σχεδίασης και εξέλιξης
Θεσσαλονίκη, Απρίλιος 2021
Ομοιότητα με γνωστό πρότυπο
• Δομικό πρότυπο Façade
• 35 από 105 έργα λογισμικού με αριθμό
σχέσεων από 100 έως και 400
• Κλάση Α ένας δίαυλος επικοινωνίας με όλες τις
υπόλοιπες κλάσεις (B, C, D, E, F)
• B, C, D, E, F → ένα υποσύστημα που
επικοινωνεί με τον υπόλοιπο κόσμο μέσω της Α
• Ο υπόλοιπος κόσμος δεν χρειάζεται
πληροφορίες για το υποσύστημα, τον
ενδιαφέρουν μόνο τα αποτελέσματα
• Διαχωρισμός συστήματος σε υποσυστήματα →
μείωση της πολυπλοκότητας
Εύρεση συχνών προτύπων εξέλιξης σχέσεων
20
Εφαρμογή τεχνικών εξόρυξης δεδομένων σε αποθήκες λογισμικού
με σκοπό την εξαγωγή προτύπων σχεδίασης και εξέλιξης
Θεσσαλονίκη, Απρίλιος 2021
Σύνολο δεδομένων
2693 commits με αλλαγές
σχέσεων
2693 γράφοι 2693 ομάδες προσθαφαιρούμενων
σχέσεων
• Εφαρμογή του αλγορίθμου gSpan για διάφορα επίπεδα
υποστήριξης
• Ανάγκη για εντοπισμό μεγαλύτερων προτύπων → μείωση
του επιπέδου υποστήριξης
• Προσαρμογή του συνόλου δεδομένων
• Φιλτράρισμα ως προς τον αριθμό των διαφοροποιημένων
σχέσεων
• Έλλειψη προτύπων εξέλιξης με Abstracted (Abstract ή
Interface) χαρακτηρισμούς
• Η θεώρηση Abstract = Interface δεν προσφέρει ιδιαίτερη
βοήθεια
Ανάλυση των εξαγόμενων προτύπων εξέλιξης
21
Εφαρμογή τεχνικών εξόρυξης δεδομένων σε αποθήκες λογισμικού
με σκοπό την εξαγωγή προτύπων σχεδίασης και εξέλιξης
Θεσσαλονίκη, Απρίλιος 2021
• Κινήσεις από τους προγραμματιστές για
δημιουργία κάποιων από τα πρότυπα που
αναλύθηκαν προηγουμένως
• Στόχος ο σχηματισμός κάποιων δομών ή
η απαλλαγή από αυτές
• Διεύρυνση δυνατοτήτων μίας κλάσης ή
περιορισμός τους
188 commits από 2693
43 από 683 commits με
αριθμό διαφοροποιημένων
σχέσεων 8-40
14 από 683 commits με
αριθμό διαφοροποιημένων
σχέσεων 8-40
Δενδροειδής
σχεδιαστική
δομή
Χρήση
λανθασμένου
αντικειμένου,
διαγραφή, χρήση
του σωστού
Διάρθρωση Παρουσίασης
Εισαγωγή
Υλοποίηση του Συστήματος –
Μεθοδολογία
Πειράματα και
Αποτελέσματα
Συμπεράσματα
Μελλοντική
Εργασία
22
Εφαρμογή τεχνικών εξόρυξης δεδομένων σε αποθήκες λογισμικού
με σκοπό την εξαγωγή προτύπων σχεδίασης και εξέλιξης
Θεσσαλονίκη, Απρίλιος 2021
Συμπεράσματα
23
Εφαρμογή τεχνικών εξόρυξης δεδομένων σε αποθήκες λογισμικού
με σκοπό την εξαγωγή προτύπων σχεδίασης και εξέλιξης
Θεσσαλονίκη, Απρίλιος 2021
• Εντοπισμός συχνών σχεδιαστικών λύσεων και μοτίβων εξέλιξης πηγαίου κώδικα
• Ανακάλυψη μοτίβων σχεδίασης που δεν ήταν μέχρι σήμερα γνωστά
• Ύπαρξη προτύπων σχεδίασης που χρησιμοποιούν οι προγραμματιστές, χωρίς να το συνειδητοποιούν
• Προκύπτουν χρήσιμα πρότυπα, τόσο στον τομέα της σχεδίασης όσο και της εξέλιξης
• Η χρηστικότητά τους είναι εμφανής από τον πολύ συχνό βαθμό εμφάνισής τους
• Η ανάλυση των προτύπων που εντοπίζονται διευκολύνει την κατανόηση του προγράμματος στο οποίο
συναντώνται (program comprehension)
Διάρθρωση Παρουσίασης
Εισαγωγή
Υλοποίηση του Συστήματος –
Μεθοδολογία
Πειράματα και
Αποτελέσματα
Συμπεράσματα
Μελλοντική
Εργασία
24
Εφαρμογή τεχνικών εξόρυξης δεδομένων σε αποθήκες λογισμικού
με σκοπό την εξαγωγή προτύπων σχεδίασης και εξέλιξης
Θεσσαλονίκη, Απρίλιος 2021
Μελλοντική εργασία
25
Εφαρμογή τεχνικών εξόρυξης δεδομένων σε αποθήκες λογισμικού
με σκοπό την εξαγωγή προτύπων σχεδίασης και εξέλιξης
Θεσσαλονίκη, Απρίλιος 2021
• Εκπαίδευση του συστήματος, ώστε να προτείνει μόνο του αλλαγές στις σχέσεις κλάσεων που δίνονται στην είσοδό του
• Εκμετάλλευση περισσότερων σημασιολογικών στοιχείων
• Προσθήκη δεδομένων σχετιζόμενων με τη συντακτική δομή μίας κλάσης
• Ενσωμάτωση της γνώσης και της εμπειρίας προγραμματιστών (human-like way of thinking)
• Χρήση των προτύπων για την κατανόηση ενός προγράμματος που δίνεται στην είσοδο
• Ανακάλυψη περισσότερων μοτίβων εξέλιξης με χαρακτηρισμούς πέρα από τον Normal
• Επέκταση του συστήματος και σε άλλες αντικειμενοστραφείς γλώσσες πέραν της Java
Βασικός στόχος της περιοχής η αυτοματοποιημένη δημιουργία σχεδιαστικών προτάσεων