Πασχαλινές λαμπάδες από τη Δ΄ τάξη του σχολείου μας.pptx
Θεμιστοκλής Παπαβασιλείου
1. Εξαγωγή παραδειγμάτων
χρήσης βιβλιοθηκών κώδικα
από αποθήκες λογισμικού
Παπαβασιλείου Θεμιστοκλής (7375)
Υπό την επίβλεψη του Επίκουρου Καθηγητή
Ανδρέα Λ. Συμεωνίδη
Και του υποψήφιου Διδάκτορα
Θεμιστοκλή Διαμαντόπουλου
Θεσσαλονίκη, 2017
2. Δομή Παρουσίασης
• Ορισμός Προβλήματος
• Σκοπός της διπλωματικής
• State of the art
• Επισκόπηση συστήματος
• Aξιολόγηση συστήματος
• Συμπεράσματα
• Μελλοντικές επεκτάσεις
• Ερωτήσεις
Εξαγωγή παραδειγμάτων χρήσης βιβλιοθηκών κώδικα από αποθήκες λογισμικού 25/4/2017
3. Ορισμός Προβλήματος
• Έννοιες
• Επαναχρησιμοποίηση κώδικα
• APIs
• Αναζήτηση προτύπων χρήσης API
στη μορφή ακολουθιών εντολών
• Πρόβλημα
• Αδυναμία εύρεσης χρήσιμων
παραδειγμάτων λόγω έλλειψης
επαρκούς τεκμηρίωσης
• Εργαλεία επίλυσης
προβλήματος
• Μηχανές αναζήτησης κώδικα
(Code Search Engines, CSEs)
• Δεν προσφέρουν επαρκή λύση
• Συστήματα προτάσεων στην
Τεχνολογία Λογισμικού
(Recommendation Systems in
Software Engineering, RSSEs)
5/4/2017 Εξαγωγή παραδειγμάτων χρήσης βιβλιοθηκών κώδικα από αποθήκες λογισμικού 3
4. Σκοπός της διπλωματικής
• Μελέτη της ευρύτερης περιοχής των RSSE
• Παραγωγή επισκόπησης της πρόσφατης βιβλιογραφίας
• Ανάπτυξη συστήματος RSSE για αναζήτηση προτύπων χρήσης κώδικα
• Εξόρυξη συχνών προτύπων χρήσης κώδικα API για συγκεκριμένες
βιβλιοθήκες
Εξαγωγή παραδειγμάτων χρήσης βιβλιοθηκών κώδικα από αποθήκες λογισμικού 45/4/2017
5. State of the art
Συστήματα στη βιβλιογραφία
• MAPO (v1 2006)
• PARSEWeb (2007)
• APIMiner (2013)
• MLUP (2015)
• UP-Miner (2016)
Mερικά μειονεκτήματα
• Δεν υπάρχει εγγύηση για την
ποιότητα του κώδικα που
εισάγεται στα συστήματα ως
προς τη μεταγλωττισιμότητα
• Χρονοβόρα
• Μπορεί να μη λειτουργούν
επαρκώς για λίγα/πολλά
δεδομένα
5/4/2017 Εξαγωγή παραδειγμάτων χρήσης βιβλιοθηκών κώδικα από αποθήκες λογισμικού 5
8. Code Downloader
Εξαγωγή παραδειγμάτων χρήσης βιβλιοθηκών κώδικα από αποθήκες λογισμικού 85/4/2017
Request
• Ερώτημα : “nz.ac.waikato.cms.weka” pom.xml
• Φίλτρα: Maven POM, μέσω του φίλτρου γλώσσας
• Παράγει μια λίστα καταθετηρίων
Temp file
• Εγγραφή των ονομάτων των αποτελεσμάτων αναζήτησης σε προσωρινό αρχείο
Download
• Για κάθε αποτέλεσμα αναζήτησης κατεβάζεται το αντίστοιχο project τοπικά
• Παράγονται φάκελοι με τα εν λόγω projects
10. Code Preprocessor (1/2)
• Χτίζεται κάθε project με τη χρήση του Maven παράγοντας ένα .jar για
αυτό
• Έμμεσα εξασφαλίζεται το ότι ο κώδικας είναι μεταγλωττίσιμος
• Κάθε .jar εισάγεται στον CallGraph Maker για να μετασχηματιστεί σε
Call graph
• Έτσι κάθε project από .jar μετατρέπεται σε αρχείο κειμένου μέσω στατικής
ανάλυσης κώδικα. Το αρχείο αυτό απαρτίζεται από γραμμές που αφορούν τις
κλήσεις συναρτήσεων μέσα σε αυτό.
Εξαγωγή παραδειγμάτων χρήσης βιβλιοθηκών κώδικα από αποθήκες λογισμικού 105/4/2017
15. Miner (3/4) – Eξόρυξη συχνότερων προτύπων
• Έννοιες
• Support - Συχνότητα εμφάνισης ακολουθίας
• Συχνή υπακολουθία (Frequent Subsequence, FS) - Μια υπακολουθία η οποία
εμφανίζεται τουλάχιστον s φορές σε ένα σύνολο από ακολουθίες
• Συχνή κλειστή υπακολουθία – Μια συχνή υπακολουθία με τον περιορισμό ότι
δεν εμφανίζεται ως μέλος άλλης συχνής υπακολουθίας με το ίδιο support
• Αλγόριθμος εξόρυξης συχνών κλειστών υπακολουθιών (BIDE)
• Κατασκευάζει πρώτα τις FS
• Τις ελέγχει ως προς την κλειστότητα
• Επιστρέφει μόνο τις FCS
Εξαγωγή παραδειγμάτων χρήσης βιβλιοθηκών κώδικα από αποθήκες λογισμικού 155/4/2017
16. Miner (4/4) – Αλγόριθμος BIDE
Εξαγωγή παραδειγμάτων χρήσης βιβλιοθηκών κώδικα από αποθήκες λογισμικού 165/4/2017
18. Postprocessor (1/4)
Εξαγωγή παραδειγμάτων χρήσης βιβλιοθηκών κώδικα από αποθήκες λογισμικού 185/4/2017
Φιλτράρισμα περιττών
παραδειγμάτων και
ομαδοποίηση ανα
πακέτο
Δημιουργία Sequence
Database
Δημιουργία Token
Map
19. Postprocessor (2/4)
• Φιλτράρισμα και ομαδοποίηση
• Συγχώνευση ακολουθιών που
περιέχονται εξολοκλήρου σε
άλλες, με διατήρηση της
μεγαλύτερης
• Ομαδοποίηση με βάση την
πλειοψηφία του πακέτου που
εμφανίζεται συχνότερα σε μια
ακολουθία
• Παράδειγμα
weka.classifiers.meta.MultiBoostAB:setClassifier
weka.classifiers.meta.MultiBoostAB:setNumSubCmtys
weka.classifiers.meta.MultiBoostAB:buildClassifier
weka.core.Instances:getAttributes
Ομαδοποιείται στο weka.classifiers
5/4/2017 Εξαγωγή παραδειγμάτων χρήσης βιβλιοθηκών κώδικα από αποθήκες λογισμικού 19
21. Postprocessor (4/4)
• Token Map
• Χάρτης που περιέχει τις εμφανίσεις κάθε συνάρτησης σε ακολουθία.
Χρησιμοποιείται στην αναζήτηση αντικειμένων
Εξαγωγή παραδειγμάτων χρήσης βιβλιοθηκών κώδικα από αποθήκες λογισμικού 215/4/2017
Αντικείμενο Σύνολο ακολουθιών
που το περιέχουν
(O)weka.core.Instances:<init> {1, 3}
(M)weka.clusterers.ClusterEvaluation:evaluateClusterer {3}
(M)weka.core.ClusterEvaluation:attribute {1}
(M)weka.classifiers.trees.RandomTree:buildClassifier {2}
23. Presenter (1/3)
Γενική χρήση API
• Για κάθε πακέτο παράγεται
συγκεκριμένος αριθμός
παραδειγμάτων
• Τα παραδείγματα πρέπει να
διαφέρουν κατά 3 εντολές
μεταξύ τους για μεγαλύτερη
κάλυψη σεναρίων χρήσης
Συγκεκριμένες Μέθοδοι
• Χωρίζεται το ερώτημα του χρήστη στα
κενά. Λαμβάνονται οι μέθοδοι.
• Για κάθε μέθοδο γίνεται αναζήτησή
της στο Token Map και με χρήση των
id των ακολουθιών επιστρέφονται τα
παραδείγματα που την περιέχουν από
την SDB
• Ανάλογα την προτίμηση του χρήστη
εμφανίζονται παραδείγματα που
περιέχουν το λογικό OR ή AND των
μεθόδων του ερωτήματός του
5/4/2017 Εξαγωγή παραδειγμάτων χρήσης βιβλιοθηκών κώδικα από αποθήκες λογισμικού 23
24. Presenter (2/3)
• Αναζήτηση με συγκεκριμένες μεθόδους
• Ερώτημα: method1 method2 χωρίζεται στα διακριτά τμήματα method1, method2
Δημιουργείται ένας χάρτης της μορφής { method1 : {}, method2 : {} }
• Ο εν λόγω χάρτης εμπλουτίζεται με τιμές {method1 : {1,3} , method2 : {2}}
• Έστω ότι ο χρήστης δηλώνει στο σύστημα πως επιθυμεί να δει παραδείγματα
που περιέχουν ή το method1 ή το method2 . Τα σύνολα {1,3} , {2} ενώνονται με
την πράξη της ένωσης με αποτέλεσμα το {1,3,2}.
• Με τη βοήθεια της SDB το σύνολο {1,3,2} μετασχηματίζεται στις αντίστοιχες
ακολουθίες
• Επιστρέφονται παραδείγματα ταξινομημένα βάσει support
Εξαγωγή παραδειγμάτων χρήσης βιβλιοθηκών κώδικα από αποθήκες λογισμικού 245/4/2017
27. Αξιολόγηση
• Δεδομένα εξόδου από το σύστημά μας
Εξαγωγή παραδειγμάτων χρήσης βιβλιοθηκών κώδικα από αποθήκες λογισμικού 275/4/2017
API Αριθμός παραδειγμάτων Πλήθος αποθετηρίων
Weka 4892 50
Mallet 2003 30
Encog 1925 30
Deeplearning4j 1761 105
Stanford NLP 3864 77
28. Μετρικές
Κάλυψη (Coverage) Συνοχή (Cohesion) Ανομοιότητα (Dissimilarity)
%𝐶𝑣𝑔 =
| 𝐴𝑃𝐼 𝑜𝑐𝑐𝑢𝑟𝑒𝑛𝑐𝑒𝑠 𝑖𝑛 𝑟𝑒𝑠𝑢𝑙𝑡𝑠 |
| 𝐴𝑃𝐼 𝑖𝑡𝑒𝑚𝑠 |
%𝐶(𝑠, 𝑛) =
𝑐𝑜𝑚𝑚𝑜𝑛 𝑛
_𝑟𝑎𝑡𝑖𝑜(𝑠, 𝐺𝑖)
|𝑐𝑜𝑚𝑚𝑜𝑛 𝑛(𝑠, 𝐺𝑖)|
%𝐷 𝑠 = 1 −
𝑐𝑜𝑚𝑚𝑜𝑛_𝑟𝑎𝑡𝑖𝑜(𝑠, 𝐺𝑖)
| 𝐺𝑖|
Ποσοστό που δείχνει πόσες από τις
μεθόδους του API συμμετέχουν
στα παραδείγματα που
παράγονται από το σύστημά μας.
Ένας αριθμός που δείχνει πόσο
συχνά χρησιμοποιούνται μαζί οι
μέθοδοι ενός παραδείγματος. Η
τιμή 100% δείχνει πως για το
συγκεκριμένο παράδειγμα όλες οι
μέθοδοι του που υπάρχουν σε
άλλα παραδείγματα, εμφανίζονται
πάντα μαζί. Λαμβάνεται για κάθε
ομάδα ο μέσος όρος.
Αποτελεί ένα μέτρο ανομοιότητας
μεταξύ μιας ακολουθίας και των
υπολοίπων στην ομάδα της.
Υψηλές τιμές δείχνουν μεγάλη
ανομοιότητα, συνεπώς
μοναδικότητα παραδείγματος.
Λαμβάνεται για κάθε ομάδα ο
μέσος όρος.
Εξαγωγή παραδειγμάτων χρήσης βιβλιοθηκών κώδικα από αποθήκες λογισμικού 285/4/2017
34. Μελέτη περίπτωσης
• Σύγκριση παραδειγμάτων που παρήγαγε το σύστημά μας με αυτά
από μηχανές αναζήτησης
• Google
• Github*
• SearchCode
• ProgramCreek API Examples
• Σε περιπτώσεις εξειδικευμένης αναζήτησης προτύπου χρήσης η
διαδικασία είναι χρονοβόρα
Εξαγωγή παραδειγμάτων χρήσης βιβλιοθηκών κώδικα από αποθήκες λογισμικού 345/4/2017
35. Μελέτη περίπτωσης – Παράδειγμα clustering
Παράδειγμα συστήματος
[ '(O)weka.core.Instances:<init>',
(O)weka.clusterers.SimpleKMeans:<init>',
(M)weka.clusterers.SimpleKMeans:setSeed',
(M)weka.clusterers.SimpleKMeans:setPreser
veInstancesOrder',
(M)weka.clusterers.SimpleKMeans:setNumClu
sters',
(M)weka.clusterers.SimpleKMeans:buildClus
terer',
(M)weka.clusterers.SimpleKMeans:toString'
]
5/4/2017 Εξαγωγή παραδειγμάτων χρήσης βιβλιοθηκών κώδικα από αποθήκες λογισμικού 35
36. Μελέτη περίπτωσης – Παράδειγμα clustering
Παράδειγμα συστήματος
[ '(O)weka.core.Instances:<init>',
(O)weka.clusterers.SimpleKMeans:<init>',
(M)weka.clusterers.SimpleKMeans:setSeed',
(M)weka.clusterers.SimpleKMeans:setPreser
veInstancesOrder',
(M)weka.clusterers.SimpleKMeans:setNumClu
sters',
(M)weka.clusterers.SimpleKMeans:buildClus
terer',
(M)weka.clusterers.SimpleKMeans:toString'
]
Παράδειγμα αναζήτησης στο Google
5/4/2017 Εξαγωγή παραδειγμάτων χρήσης βιβλιοθηκών κώδικα από αποθήκες λογισμικού 36
37. Συμπεράσματα
• API Usage Mining – Ανοικτό, πολύπλευρο και δύσκολο πρόβλημα
• Ακόμη και για τον μικρό αριθμό παραδειγμάτων στην παρούσα
εργασία ο αριθμός παραδειγμάτων ήταν μεγάλος. Η
μεταεπεξεργασία των δεδομένων είναι αναγκαία
• Η κλιμάκωση του συστήματος θα χρειαστεί ειδικές δομές
αποθήκευσης και αναζήτησης.
• Tο σύστημά μας φαίνεται να παράγει διαφορετικά παραδείγματα
χωρίς να θυσιάζει συνεκτικότητα
Εξαγωγή παραδειγμάτων χρήσης βιβλιοθηκών κώδικα από αποθήκες λογισμικού 375/4/2017
38. Μελλοντική εργασία
• Απλή γραφική διεπαφή
• Δομή επανατροφοδότησης σχετικά με την ποιότητα των
αποτελεσμάτων
• Επέκταση σε άλλες γλώσσες με προσθήκη αντίστοιχου εργαλείου
στατικής ανάλυσης κώδικα
• Ομαδοποίηση με αλγορίθμους αντί για ευριστικές τεχνικές στην
μεταεπεξεργασία
Εξαγωγή παραδειγμάτων χρήσης βιβλιοθηκών κώδικα από αποθήκες λογισμικού 385/4/2017