Θεμιστοκλής Παπαβασιλείου
Transcript of Θεμιστοκλής Παπαβασιλείου
Εξαγωγή παραδειγμάτων χρήσης βιβλιοθηκών κώδικα
από αποθήκες λογισμικούΠαπαβασιλείου Θεμιστοκλής (7375)
Υπό την επίβλεψη του Επίκουρου Καθηγητή
Ανδρέα Λ. Συμεωνίδη
Και του υποψήφιου Διδάκτορα
Θεμιστοκλή Διαμαντόπουλου
Θεσσαλονίκη, 2017
02/05/2023 2
Δομή Παρουσίασης• Ορισμός Προβλήματος• Σκοπός της διπλωματικής• State of the art• Επισκόπηση συστήματος• Aξιολόγηση συστήματος• Συμπεράσματα• Μελλοντικές επεκτάσεις• Ερωτήσεις
Εξαγωγή παραδειγμάτων χρήσης βιβλιοθηκών κώδικα από αποθήκες λογισμικού
02/05/2023 3
Ορισμός Προβλήματος• Έννοιες• Επαναχρησιμοποίηση κώδικα
• APIs• Αναζήτηση προτύπων χρήσης API
στη μορφή ακολουθιών εντολών
• Πρόβλημα• Αδυναμία εύρεσης χρήσιμων
παραδειγμάτων λόγω έλλειψης επαρκούς τεκμηρίωσης
• Εργαλεία επίλυσης προβλήματος• Μηχανές αναζήτησης κώδικα
(Code Search Engines, CSEs)• Δεν προσφέρουν επαρκή λύση
• Συστήματα προτάσεων στην Τεχνολογία Λογισμικού (Recommendation Systems in Software Engineering, RSSEs)
Εξαγωγή παραδειγμάτων χρήσης βιβλιοθηκών κώδικα από αποθήκες λογισμικού
02/05/2023 4
Σκοπός της διπλωματικής • Μελέτη της ευρύτερης περιοχής των RSSE• Παραγωγή επισκόπησης της πρόσφατης βιβλιογραφίας
• Ανάπτυξη συστήματος RSSE για αναζήτηση προτύπων χρήσης κώδικα• Εξόρυξη συχνών προτύπων χρήσης κώδικα API για συγκεκριμένες
βιβλιοθήκες
Εξαγωγή παραδειγμάτων χρήσης βιβλιοθηκών κώδικα από αποθήκες λογισμικού
02/05/2023 5
State of the art
Συστήματα στη βιβλιογραφία• MAPO (v1 2006)• PARSEWeb (2007)• APIMiner (2013)• MLUP (2015)• UP-Miner (2016)
Mερικά μειονεκτήματα• Δεν υπάρχει εγγύηση για την
ποιότητα του κώδικα που εισάγεται στα συστήματα ως προς τη μεταγλωττισιμότητα• Χρονοβόρα• Μπορεί να μη λειτουργούν
επαρκώς για λίγα/πολλά δεδομένα
Εξαγωγή παραδειγμάτων χρήσης βιβλιοθηκών κώδικα από αποθήκες λογισμικού
02/05/2023 6
Επισκόπηση συστήματος
Εξαγωγή παραδειγμάτων χρήσης βιβλιοθηκών κώδικα από αποθήκες λογισμικού
query
Code Downloader
• Είσοδος: Github Projects• Έξοδος: Project directories
Code Preprocessor
• Είσοδος: Project directories• Έξοδος: CallGraphs
Miner• Είσοδος: CallGraphs• Έξοδος: Sequences
Postprocessor• Είσοδος: Sequences• Έξοδος: Sequences
Presenter• Είσοδος: User queries• Έξοδος: Sequences
Query
`
02/05/2023 7
Επισκόπηση συστήματος
Εξαγωγή παραδειγμάτων χρήσης βιβλιοθηκών κώδικα από αποθήκες λογισμικού
query
Code Downloader
• Είσοδος: Github Projects• Έξοδος: Project directories
Code Preprocessor
• Είσοδος: Project directories• Έξοδος: CallGraphs
Miner• Είσοδος: CallGraphs• Έξοδος: Sequences
Postprocessor• Είσοδος: Sequences• Έξοδος: Sequences
Presenter• Είσοδος: User queries• Έξοδος: Sequences
Query
`
02/05/2023 8
Code Downloader
Εξαγωγή παραδειγμάτων χρήσης βιβλιοθηκών κώδικα από αποθήκες λογισμικού
Request
• Ερώτημα : “nz.ac.waikato.cms.weka” pom.xml• Φίλτρα: Maven POM, μέσω του φίλτρου γλώσσας• Παράγει μια λίστα καταθετηρίων
Temp file• Εγγραφή των ονομάτων των αποτελεσμάτων αναζήτησης σε προσωρινό αρχείο
Download
• Για κάθε αποτέλεσμα αναζήτησης κατεβάζεται το αντίστοιχο project τοπικά• Παράγονται φάκελοι με τα εν λόγω projects
02/05/2023 9
Επισκόπηση συστήματος
Εξαγωγή παραδειγμάτων χρήσης βιβλιοθηκών κώδικα από αποθήκες λογισμικού
query
Code Downloader
• Είσοδος: Github Projects• Έξοδος: Project directories
Code Preprocessor
• Είσοδος: Project directories• Έξοδος: CallGraphs
Miner• Είσοδος: CallGraphs• Έξοδος: Sequences
Postprocessor• Είσοδος: Sequences• Έξοδος: Sequences
Presenter• Είσοδος: User queries• Έξοδος: Sequences
Query
`
02/05/2023 10
Code Preprocessor (1/2)
• Χτίζεται κάθε project με τη χρήση του Maven παράγοντας ένα .jar για αυτό• Έμμεσα εξασφαλίζεται το ότι ο κώδικας είναι μεταγλωττίσιμος
• Κάθε .jar εισάγεται στον CallGraph Maker για να μετασχηματιστεί σε Call graph• Έτσι κάθε project από .jar μετατρέπεται σε αρχείο κειμένου μέσω στατικής
ανάλυσης κώδικα. Το αρχείο αυτό απαρτίζεται από γραμμές που αφορούν τις κλήσεις συναρτήσεων μέσα σε αυτό.
Εξαγωγή παραδειγμάτων χρήσης βιβλιοθηκών κώδικα από αποθήκες λογισμικού
02/05/2023 11
Code Preprocessor (2/2)
Εξαγωγή παραδειγμάτων χρήσης βιβλιοθηκών κώδικα από αποθήκες λογισμικού
02/05/2023 12
Επισκόπηση συστήματος
Εξαγωγή παραδειγμάτων χρήσης βιβλιοθηκών κώδικα από αποθήκες λογισμικού
query
Code Downloader
• Είσοδος: Github Projects• Έξοδος: Project directories
Code Preprocessor
• Είσοδος: Project directories• Έξοδος: CallGraphs
Miner• Είσοδος: CallGraphs• Έξοδος: Sequences
Postprocessor• Είσοδος: Sequences• Έξοδος: Sequences
Presenter• Είσοδος: User queries• Έξοδος: Sequences
Query
`
02/05/2023 13
Miner (1/4)
Εξαγωγή παραδειγμάτων χρήσης βιβλιοθηκών κώδικα από αποθήκες λογισμικού
Λήψη ακολουθιών απο αρχεία .txt
Επεξεργασία ακολουθιών
Εξόρυξη συχνότερων ακολουθιών
02/05/2023 14
Miner (2/4) – Επεξεργασία ακολουθιών
C:Sample weka.classifiers.meta.MultiBoostAB:setClassifierC:Sample weka.classifiers.meta.MultiBoostAB:setNumSubCmtysC:Sample weka.classifiers.meta.MultiBoostAB:buildClassifierC:Sample java.lang.String:charAtC:Sample1 weka.core.converters.CSVLoader:setSourceC:Sample2 weka.clusterers.SimpleKMeans:setSeed
Εξαγωγή παραδειγμάτων χρήσης βιβλιοθηκών κώδικα από αποθήκες λογισμικού
C:Sample : [weka.classifiers.meta.MultiBoostAB:setClassifier, weka.classifiers.meta.MultiBoostAB:setNumSubCmtys, weka.classifiers.meta.MultiBoostAB:buildClassifier]
C:Sample1 : [weka.core.converters.CSVLoader:setSource]
C:Sample2 : [weka.clusterers.SimpleKMeans:setSeed]
02/05/2023 15
Miner (3/4) – Eξόρυξη συχνότερων προτύπων• Έννοιες• Support - Συχνότητα εμφάνισης ακολουθίας• Συχνή υπακολουθία (Frequent Subsequence, FS) - Μια υπακολουθία η οποία
εμφανίζεται τουλάχιστον s φορές σε ένα σύνολο από ακολουθίες• Συχνή κλειστή υπακολουθία – Μια συχνή υπακολουθία με τον περιορισμό ότι
δεν εμφανίζεται ως μέλος άλλης συχνής υπακολουθίας με το ίδιο support
• Αλγόριθμος εξόρυξης συχνών κλειστών υπακολουθιών (BIDE)• Κατασκευάζει πρώτα τις FS• Τις ελέγχει ως προς την κλειστότητα• Επιστρέφει μόνο τις FCS
Εξαγωγή παραδειγμάτων χρήσης βιβλιοθηκών κώδικα από αποθήκες λογισμικού
02/05/2023 16
Miner (4/4) – Αλγόριθμος BIDE
Εξαγωγή παραδειγμάτων χρήσης βιβλιοθηκών κώδικα από αποθήκες λογισμικού
02/05/2023 17
Επισκόπηση συστήματος
Εξαγωγή παραδειγμάτων χρήσης βιβλιοθηκών κώδικα από αποθήκες λογισμικού
query
Code Downloader
• Είσοδος: Github Projects• Έξοδος: Project directories
Code Preprocessor
• Είσοδος: Project directories• Έξοδος: CallGraphs
Miner• Είσοδος: CallGraphs• Έξοδος: Sequences
Postprocessor• Είσοδος: Sequences• Έξοδος: Sequences
Presenter• Είσοδος: User queries• Έξοδος: Sequences
Query
`
02/05/2023 18
Postprocessor (1/4)
Εξαγωγή παραδειγμάτων χρήσης βιβλιοθηκών κώδικα από αποθήκες λογισμικού
Φιλτράρισμα περιττών
παραδειγμάτων και ομαδοποίηση ανα
πακέτο
Δημιουργία Sequence Database
Δημιουργία Token Map
02/05/2023 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
Εξαγωγή παραδειγμάτων χρήσης βιβλιοθηκών κώδικα από αποθήκες λογισμικού
02/05/2023 20
Postprocessor (3/4)• Δημιουργία Sequence Database• Τρόπος αναφοράς στις ακολουθίες
Εξαγωγή παραδειγμάτων χρήσης βιβλιοθηκών κώδικα από αποθήκες λογισμικού
Δείκτης (ID) Αποτέλεσμα Miner
1 [ (O)weka.core.Instances:<init>, (M)weka.core.Instances:attribute,
(M)weka.core.Instances:setClass ] : 30
2 [ (M)weka.classifiers.trees.RandomTree:setSeed, (M)weka.classifiers.trees.RandomTree:buildClassifier ] : 3
3 [ (O)weka.clusterers.ClusterEvaluation:<init>, (O)weka.core.Instances:<init>,
(M)weka.clusterers.ClusterEvaluation:setClusterer, (M)weka.clusterers.ClusterEvaluation:evaluateClusterer ] : 12
02/05/2023 21
Postprocessor (4/4)• Token Map• Χάρτης που περιέχει τις εμφανίσεις κάθε συνάρτησης σε ακολουθία.
Χρησιμοποιείται στην αναζήτηση αντικειμένων
Εξαγωγή παραδειγμάτων χρήσης βιβλιοθηκών κώδικα από αποθήκες λογισμικού
Αντικείμενο Σύνολο ακολουθιών που το περιέχουν
(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}
02/05/2023 22
Επισκόπηση συστήματος
Εξαγωγή παραδειγμάτων χρήσης βιβλιοθηκών κώδικα από αποθήκες λογισμικού
query
Code Downloader
• Είσοδος: Github Projects• Έξοδος: Project directories
Code Preprocessor
• Είσοδος: Project directories• Έξοδος: CallGraphs
Miner• Είσοδος: CallGraphs• Έξοδος: Sequences
Postprocessor• Είσοδος: Sequences• Έξοδος: Sequences
Presenter• Είσοδος: User queries• Έξοδος: Sequences
Query
`
02/05/2023 23
Presenter (1/3)
Γενική χρήση API• Για κάθε πακέτο παράγεται
συγκεκριμένος αριθμός παραδειγμάτων• Τα παραδείγματα πρέπει να
διαφέρουν κατά 3 εντολές μεταξύ τους για μεγαλύτερη κάλυψη σεναρίων χρήσης
Συγκεκριμένες Μέθοδοι• Χωρίζεται το ερώτημα του χρήστη στα
κενά. Λαμβάνονται οι μέθοδοι.• Για κάθε μέθοδο γίνεται αναζήτησή της
στο Token Map και με χρήση των id των ακολουθιών επιστρέφονται τα παραδείγματα που την περιέχουν από την SDB
• Ανάλογα την προτίμηση του χρήστη εμφανίζονται παραδείγματα που περιέχουν το λογικό OR ή AND των μεθόδων του ερωτήματός του
Εξαγωγή παραδειγμάτων χρήσης βιβλιοθηκών κώδικα από αποθήκες λογισμικού
02/05/2023 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
Εξαγωγή παραδειγμάτων χρήσης βιβλιοθηκών κώδικα από αποθήκες λογισμικού
02/05/2023 25
Presenter (3/3)Αποτέλεσμα Miner
[ (O)weka.core.Instances:<init>,(M)weka.core.Instances:attribute,
(M)weka.core.Instances:setClass ] : 30
[ (O)weka.clusterers.ClusterEvaluation:<init>,(O)weka.core.Instances:<init>,
(M)weka.clusterers.ClusterEvaluation:setClusterer, (M)weka.clusterers.ClusterEvaluation:evaluateClusterer ] : 12
[ (M)weka.classifiers.trees.RandomTree:setSeed, (M)weka.classifiers.trees.RandomTree:buildClassifier ] : 3
Εξαγωγή παραδειγμάτων χρήσης βιβλιοθηκών κώδικα από αποθήκες λογισμικού
02/05/2023 26
Αξιολόγηση• Δεδομένα εισόδου
Εξαγωγή παραδειγμάτων χρήσης βιβλιοθηκών κώδικα από αποθήκες λογισμικού
Όνομα βιβλιοθήκης Αριθμός project Αριθμός πακέτων Αριθμός μεθόδων API Αντικείμενο
Weka 50 82 12511 Συλλογή αλγορίθμων Μηχανικής Μάθησης, οπτικοποίησης δεδομένων, εξόρυξης δεδομένων, επεξεργασίας δεδομένων.
Encog 30 268 5625 Αλγόριθμοι μηχανικής μάθησης
Mallet 30 60 5474 Επεξεργασία φυσικής γλώσσας (Natural Language Processing)
Deeplearning4j 105 237 6323 Νευρωνικά δίκτυαStanford NLP 77 98 10521 Συλλογή αλγορίθμων
επεξεργασίας φυσικής γλώσσας.
02/05/2023 27
Αξιολόγηση• Δεδομένα εξόδου από το σύστημά μας
Εξαγωγή παραδειγμάτων χρήσης βιβλιοθηκών κώδικα από αποθήκες λογισμικού
API Αριθμός παραδειγμάτων Πλήθος αποθετηρίωνWeka 4892 50
Mallet 2003 30
Encog 1925 30
Deeplearning4j 1761 105
Stanford NLP 3864 77
02/05/2023 28
ΜετρικέςΚάλυψη (Coverage) Συνοχή (Cohesion) Ανομοιότητα (Dissimilarity)
Ποσοστό που δείχνει πόσες από τις μεθόδους του API συμμετέχουν στα παραδείγματα που παράγονται από το σύστημά μας.
Ένας αριθμός που δείχνει πόσο συχνά χρησιμοποιούνται μαζί οι μέθοδοι ενός παραδείγματος. Η τιμή 100% δείχνει πως για το συγκεκριμένο παράδειγμα όλες οι μέθοδοι του που υπάρχουν σε άλλα παραδείγματα, εμφανίζονται πάντα μαζί. Λαμβάνεται για κάθε ομάδα ο μέσος όρος.
Αποτελεί ένα μέτρο ανομοιότητας μεταξύ μιας ακολουθίας και των υπολοίπων στην ομάδα της. Υψηλές τιμές δείχνουν μεγάλη ανομοιότητα, συνεπώς μοναδικότητα παραδείγματος. Λαμβάνεται για κάθε ομάδα ο μέσος όρος.
Εξαγωγή παραδειγμάτων χρήσης βιβλιοθηκών κώδικα από αποθήκες λογισμικού
02/05/2023 29
Κάλυψη
Εξαγωγή παραδειγμάτων χρήσης βιβλιοθηκών κώδικα από αποθήκες λογισμικού
02/05/2023 30
Συνοχή ομάδων weka
Εξαγωγή παραδειγμάτων χρήσης βιβλιοθηκών κώδικα από αποθήκες λογισμικού
02/05/2023 31
Συνοχή υπολοίπων βιβλιοθηκών
Εξαγωγή παραδειγμάτων χρήσης βιβλιοθηκών κώδικα από αποθήκες λογισμικού
02/05/2023 32
Ανομοιότητα ομάδων weka
Εξαγωγή παραδειγμάτων χρήσης βιβλιοθηκών κώδικα από αποθήκες λογισμικού
02/05/2023 33
Ανομοιότητα υπόλοιπων βιβλιοθηκών
Εξαγωγή παραδειγμάτων χρήσης βιβλιοθηκών κώδικα από αποθήκες λογισμικού
02/05/2023 34
Μελέτη περίπτωσης• Σύγκριση παραδειγμάτων που παρήγαγε το σύστημά μας με αυτά
από μηχανές αναζήτησης• Google• Github*• SearchCode• ProgramCreek API Examples
• Σε περιπτώσεις εξειδικευμένης αναζήτησης προτύπου χρήσης η διαδικασία είναι χρονοβόρα
Εξαγωγή παραδειγμάτων χρήσης βιβλιοθηκών κώδικα από αποθήκες λογισμικού
02/05/2023 35
Μελέτη περίπτωσης – Παράδειγμα clustering
Παράδειγμα συστήματος[ '(O)weka.core.Instances:<init>',
(O)weka.clusterers.SimpleKMeans:<init>',
(M)weka.clusterers.SimpleKMeans:setSeed',
(M)weka.clusterers.SimpleKMeans:setPreserveInstancesOrder',
(M)weka.clusterers.SimpleKMeans:setNumClusters',
(M)weka.clusterers.SimpleKMeans:buildClusterer',
(M)weka.clusterers.SimpleKMeans:toString' ]
Εξαγωγή παραδειγμάτων χρήσης βιβλιοθηκών κώδικα από αποθήκες λογισμικού
02/05/2023 36
Μελέτη περίπτωσης – Παράδειγμα clustering
Παράδειγμα συστήματος[ '(O)weka.core.Instances:<init>',
(O)weka.clusterers.SimpleKMeans:<init>',
(M)weka.clusterers.SimpleKMeans:setSeed',
(M)weka.clusterers.SimpleKMeans:setPreserveInstancesOrder',
(M)weka.clusterers.SimpleKMeans:setNumClusters',
(M)weka.clusterers.SimpleKMeans:buildClusterer',
(M)weka.clusterers.SimpleKMeans:toString' ]
Παράδειγμα αναζήτησης στο Google
Εξαγωγή παραδειγμάτων χρήσης βιβλιοθηκών κώδικα από αποθήκες λογισμικού
02/05/2023 37
Συμπεράσματα• API Usage Mining – Ανοικτό, πολύπλευρο και δύσκολο πρόβλημα• Ακόμη και για τον μικρό αριθμό παραδειγμάτων στην παρούσα
εργασία ο αριθμός παραδειγμάτων ήταν μεγάλος. Η μεταεπεξεργασία των δεδομένων είναι αναγκαία• Η κλιμάκωση του συστήματος θα χρειαστεί ειδικές δομές
αποθήκευσης και αναζήτησης.• Tο σύστημά μας φαίνεται να παράγει διαφορετικά παραδείγματα
χωρίς να θυσιάζει συνεκτικότητα
Εξαγωγή παραδειγμάτων χρήσης βιβλιοθηκών κώδικα από αποθήκες λογισμικού
02/05/2023 38
Μελλοντική εργασία• Απλή γραφική διεπαφή• Δομή επανατροφοδότησης σχετικά με την ποιότητα των
αποτελεσμάτων• Επέκταση σε άλλες γλώσσες με προσθήκη αντίστοιχου εργαλείου
στατικής ανάλυσης κώδικα• Ομαδοποίηση με αλγορίθμους αντί για ευριστικές τεχνικές στην
μεταεπεξεργασία
Εξαγωγή παραδειγμάτων χρήσης βιβλιοθηκών κώδικα από αποθήκες λογισμικού
02/05/2023 39Εξαγωγή παραδειγμάτων χρήσης βιβλιοθηκών κώδικα από αποθήκες λογισμικού
?
?
?
?
?
??
?
?
??
??
?
?
??
?
?
?
?