Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Θεμιστοκλής Παπαβασιλείου

99 views

Published on

Εξαγωγή παραδειγμάτων χρήσης βιβλιοθηκών κώδικα από αποθήκες λογισμικού

Published in: Education
  • Be the first to comment

  • Be the first to like this

Θεμιστοκλής Παπαβασιλείου

  1. 1. Εξαγωγή παραδειγμάτων χρήσης βιβλιοθηκών κώδικα από αποθήκες λογισμικού Παπαβασιλείου Θεμιστοκλής (7375) Υπό την επίβλεψη του Επίκουρου Καθηγητή Ανδρέα Λ. Συμεωνίδη Και του υποψήφιου Διδάκτορα Θεμιστοκλή Διαμαντόπουλου Θεσσαλονίκη, 2017
  2. 2. Δομή Παρουσίασης • Ορισμός Προβλήματος • Σκοπός της διπλωματικής • State of the art • Επισκόπηση συστήματος • Aξιολόγηση συστήματος • Συμπεράσματα • Μελλοντικές επεκτάσεις • Ερωτήσεις Εξαγωγή παραδειγμάτων χρήσης βιβλιοθηκών κώδικα από αποθήκες λογισμικού 25/4/2017
  3. 3. Ορισμός Προβλήματος • Έννοιες • Επαναχρησιμοποίηση κώδικα • APIs • Αναζήτηση προτύπων χρήσης API στη μορφή ακολουθιών εντολών • Πρόβλημα • Αδυναμία εύρεσης χρήσιμων παραδειγμάτων λόγω έλλειψης επαρκούς τεκμηρίωσης • Εργαλεία επίλυσης προβλήματος • Μηχανές αναζήτησης κώδικα (Code Search Engines, CSEs) • Δεν προσφέρουν επαρκή λύση • Συστήματα προτάσεων στην Τεχνολογία Λογισμικού (Recommendation Systems in Software Engineering, RSSEs) 5/4/2017 Εξαγωγή παραδειγμάτων χρήσης βιβλιοθηκών κώδικα από αποθήκες λογισμικού 3
  4. 4. Σκοπός της διπλωματικής • Μελέτη της ευρύτερης περιοχής των RSSE • Παραγωγή επισκόπησης της πρόσφατης βιβλιογραφίας • Ανάπτυξη συστήματος RSSE για αναζήτηση προτύπων χρήσης κώδικα • Εξόρυξη συχνών προτύπων χρήσης κώδικα API για συγκεκριμένες βιβλιοθήκες Εξαγωγή παραδειγμάτων χρήσης βιβλιοθηκών κώδικα από αποθήκες λογισμικού 45/4/2017
  5. 5. State of the art Συστήματα στη βιβλιογραφία • MAPO (v1 2006) • PARSEWeb (2007) • APIMiner (2013) • MLUP (2015) • UP-Miner (2016) Mερικά μειονεκτήματα • Δεν υπάρχει εγγύηση για την ποιότητα του κώδικα που εισάγεται στα συστήματα ως προς τη μεταγλωττισιμότητα • Χρονοβόρα • Μπορεί να μη λειτουργούν επαρκώς για λίγα/πολλά δεδομένα 5/4/2017 Εξαγωγή παραδειγμάτων χρήσης βιβλιοθηκών κώδικα από αποθήκες λογισμικού 5
  6. 6. Επισκόπηση συστήματος Εξαγωγή παραδειγμάτων χρήσης βιβλιοθηκών κώδικα από αποθήκες λογισμικού 65/4/2017 query Code Downloader • Είσοδος: Github Projects • Έξοδος: Project directories Code Preprocessor • Είσοδος: Project directories • Έξοδος: CallGraphs Miner • Είσοδος: CallGraphs • Έξοδος: Sequences Postprocessor • Είσοδος: Sequences • Έξοδος: Sequences Presenter • Είσοδος: User queries • Έξοδος: Sequences Query `
  7. 7. Επισκόπηση συστήματος Εξαγωγή παραδειγμάτων χρήσης βιβλιοθηκών κώδικα από αποθήκες λογισμικού 75/4/2017 query Code Downloader • Είσοδος: Github Projects • Έξοδος: Project directories Code Preprocessor • Είσοδος: Project directories • Έξοδος: CallGraphs Miner • Είσοδος: CallGraphs • Έξοδος: Sequences Postprocessor • Είσοδος: Sequences • Έξοδος: Sequences Presenter • Είσοδος: User queries • Έξοδος: Sequences Query `
  8. 8. Code Downloader Εξαγωγή παραδειγμάτων χρήσης βιβλιοθηκών κώδικα από αποθήκες λογισμικού 85/4/2017 Request • Ερώτημα : “nz.ac.waikato.cms.weka” pom.xml • Φίλτρα: Maven POM, μέσω του φίλτρου γλώσσας • Παράγει μια λίστα καταθετηρίων Temp file • Εγγραφή των ονομάτων των αποτελεσμάτων αναζήτησης σε προσωρινό αρχείο Download • Για κάθε αποτέλεσμα αναζήτησης κατεβάζεται το αντίστοιχο project τοπικά • Παράγονται φάκελοι με τα εν λόγω projects
  9. 9. Επισκόπηση συστήματος Εξαγωγή παραδειγμάτων χρήσης βιβλιοθηκών κώδικα από αποθήκες λογισμικού 95/4/2017 query Code Downloader • Είσοδος: Github Projects • Έξοδος: Project directories Code Preprocessor • Είσοδος: Project directories • Έξοδος: CallGraphs Miner • Είσοδος: CallGraphs • Έξοδος: Sequences Postprocessor • Είσοδος: Sequences • Έξοδος: Sequences Presenter • Είσοδος: User queries • Έξοδος: Sequences Query `
  10. 10. Code Preprocessor (1/2) • Χτίζεται κάθε project με τη χρήση του Maven παράγοντας ένα .jar για αυτό • Έμμεσα εξασφαλίζεται το ότι ο κώδικας είναι μεταγλωττίσιμος • Κάθε .jar εισάγεται στον CallGraph Maker για να μετασχηματιστεί σε Call graph • Έτσι κάθε project από .jar μετατρέπεται σε αρχείο κειμένου μέσω στατικής ανάλυσης κώδικα. Το αρχείο αυτό απαρτίζεται από γραμμές που αφορούν τις κλήσεις συναρτήσεων μέσα σε αυτό. Εξαγωγή παραδειγμάτων χρήσης βιβλιοθηκών κώδικα από αποθήκες λογισμικού 105/4/2017
  11. 11. Code Preprocessor (2/2) Εξαγωγή παραδειγμάτων χρήσης βιβλιοθηκών κώδικα από αποθήκες λογισμικού 115/4/2017
  12. 12. Επισκόπηση συστήματος Εξαγωγή παραδειγμάτων χρήσης βιβλιοθηκών κώδικα από αποθήκες λογισμικού 125/4/2017 query Code Downloader • Είσοδος: Github Projects • Έξοδος: Project directories Code Preprocessor • Είσοδος: Project directories • Έξοδος: CallGraphs Miner • Είσοδος: CallGraphs • Έξοδος: Sequences Postprocessor • Είσοδος: Sequences • Έξοδος: Sequences Presenter • Είσοδος: User queries • Έξοδος: Sequences Query `
  13. 13. Miner (1/4) Εξαγωγή παραδειγμάτων χρήσης βιβλιοθηκών κώδικα από αποθήκες λογισμικού 135/4/2017 Λήψη ακολουθιών απο αρχεία .txt Επεξεργασία ακολουθιών Εξόρυξη συχνότερων ακολουθιών
  14. 14. Miner (2/4) – Επεξεργασία ακολουθιών C:Sample weka.classifiers.meta.MultiBoostAB:setClassifier C:Sample weka.classifiers.meta.MultiBoostAB:setNumSubCmtys C:Sample weka.classifiers.meta.MultiBoostAB:buildClassifier C:Sample java.lang.String:charAt C:Sample1 weka.core.converters.CSVLoader:setSource C:Sample2 weka.clusterers.SimpleKMeans:setSeed Εξαγωγή παραδειγμάτων χρήσης βιβλιοθηκών κώδικα από αποθήκες λογισμικού 145/4/2017 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]
  15. 15. Miner (3/4) – Eξόρυξη συχνότερων προτύπων • Έννοιες • Support - Συχνότητα εμφάνισης ακολουθίας • Συχνή υπακολουθία (Frequent Subsequence, FS) - Μια υπακολουθία η οποία εμφανίζεται τουλάχιστον s φορές σε ένα σύνολο από ακολουθίες • Συχνή κλειστή υπακολουθία – Μια συχνή υπακολουθία με τον περιορισμό ότι δεν εμφανίζεται ως μέλος άλλης συχνής υπακολουθίας με το ίδιο support • Αλγόριθμος εξόρυξης συχνών κλειστών υπακολουθιών (BIDE) • Κατασκευάζει πρώτα τις FS • Τις ελέγχει ως προς την κλειστότητα • Επιστρέφει μόνο τις FCS Εξαγωγή παραδειγμάτων χρήσης βιβλιοθηκών κώδικα από αποθήκες λογισμικού 155/4/2017
  16. 16. Miner (4/4) – Αλγόριθμος BIDE Εξαγωγή παραδειγμάτων χρήσης βιβλιοθηκών κώδικα από αποθήκες λογισμικού 165/4/2017
  17. 17. Επισκόπηση συστήματος Εξαγωγή παραδειγμάτων χρήσης βιβλιοθηκών κώδικα από αποθήκες λογισμικού 175/4/2017 query Code Downloader • Είσοδος: Github Projects • Έξοδος: Project directories Code Preprocessor • Είσοδος: Project directories • Έξοδος: CallGraphs Miner • Είσοδος: CallGraphs • Έξοδος: Sequences Postprocessor • Είσοδος: Sequences • Έξοδος: Sequences Presenter • Είσοδος: User queries • Έξοδος: Sequences Query `
  18. 18. Postprocessor (1/4) Εξαγωγή παραδειγμάτων χρήσης βιβλιοθηκών κώδικα από αποθήκες λογισμικού 185/4/2017 Φιλτράρισμα περιττών παραδειγμάτων και ομαδοποίηση ανα πακέτο Δημιουργία Sequence Database Δημιουργία Token Map
  19. 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
  20. 20. Postprocessor (3/4) • Δημιουργία Sequence Database • Τρόπος αναφοράς στις ακολουθίες Εξαγωγή παραδειγμάτων χρήσης βιβλιοθηκών κώδικα από αποθήκες λογισμικού 205/4/2017 Δείκτης (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
  21. 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}
  22. 22. Επισκόπηση συστήματος Εξαγωγή παραδειγμάτων χρήσης βιβλιοθηκών κώδικα από αποθήκες λογισμικού 225/4/2017 query Code Downloader • Είσοδος: Github Projects • Έξοδος: Project directories Code Preprocessor • Είσοδος: Project directories • Έξοδος: CallGraphs Miner • Είσοδος: CallGraphs • Έξοδος: Sequences Postprocessor • Είσοδος: Sequences • Έξοδος: Sequences Presenter • Είσοδος: User queries • Έξοδος: Sequences Query `
  23. 23. Presenter (1/3) Γενική χρήση API • Για κάθε πακέτο παράγεται συγκεκριμένος αριθμός παραδειγμάτων • Τα παραδείγματα πρέπει να διαφέρουν κατά 3 εντολές μεταξύ τους για μεγαλύτερη κάλυψη σεναρίων χρήσης Συγκεκριμένες Μέθοδοι • Χωρίζεται το ερώτημα του χρήστη στα κενά. Λαμβάνονται οι μέθοδοι. • Για κάθε μέθοδο γίνεται αναζήτησή της στο Token Map και με χρήση των id των ακολουθιών επιστρέφονται τα παραδείγματα που την περιέχουν από την SDB • Ανάλογα την προτίμηση του χρήστη εμφανίζονται παραδείγματα που περιέχουν το λογικό OR ή AND των μεθόδων του ερωτήματός του 5/4/2017 Εξαγωγή παραδειγμάτων χρήσης βιβλιοθηκών κώδικα από αποθήκες λογισμικού 23
  24. 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
  25. 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 Εξαγωγή παραδειγμάτων χρήσης βιβλιοθηκών κώδικα από αποθήκες λογισμικού 255/4/2017
  26. 26. Αξιολόγηση • Δεδομένα εισόδου Εξαγωγή παραδειγμάτων χρήσης βιβλιοθηκών κώδικα από αποθήκες λογισμικού 265/4/2017 Όνομα βιβλιοθήκης Αριθμός 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 Συλλογή αλγορίθμων επεξεργασίας φυσικής γλώσσας.
  27. 27. Αξιολόγηση • Δεδομένα εξόδου από το σύστημά μας Εξαγωγή παραδειγμάτων χρήσης βιβλιοθηκών κώδικα από αποθήκες λογισμικού 275/4/2017 API Αριθμός παραδειγμάτων Πλήθος αποθετηρίων Weka 4892 50 Mallet 2003 30 Encog 1925 30 Deeplearning4j 1761 105 Stanford NLP 3864 77
  28. 28. Μετρικές Κάλυψη (Coverage) Συνοχή (Cohesion) Ανομοιότητα (Dissimilarity) %𝐶𝑣𝑔 = | 𝐴𝑃𝐼 𝑜𝑐𝑐𝑢𝑟𝑒𝑛𝑐𝑒𝑠 𝑖𝑛 𝑟𝑒𝑠𝑢𝑙𝑡𝑠 | | 𝐴𝑃𝐼 𝑖𝑡𝑒𝑚𝑠 | %𝐶(𝑠, 𝑛) = 𝑐𝑜𝑚𝑚𝑜𝑛 𝑛 _𝑟𝑎𝑡𝑖𝑜(𝑠, 𝐺𝑖) |𝑐𝑜𝑚𝑚𝑜𝑛 𝑛(𝑠, 𝐺𝑖)| %𝐷 𝑠 = 1 − 𝑐𝑜𝑚𝑚𝑜𝑛_𝑟𝑎𝑡𝑖𝑜(𝑠, 𝐺𝑖) | 𝐺𝑖| Ποσοστό που δείχνει πόσες από τις μεθόδους του API συμμετέχουν στα παραδείγματα που παράγονται από το σύστημά μας. Ένας αριθμός που δείχνει πόσο συχνά χρησιμοποιούνται μαζί οι μέθοδοι ενός παραδείγματος. Η τιμή 100% δείχνει πως για το συγκεκριμένο παράδειγμα όλες οι μέθοδοι του που υπάρχουν σε άλλα παραδείγματα, εμφανίζονται πάντα μαζί. Λαμβάνεται για κάθε ομάδα ο μέσος όρος. Αποτελεί ένα μέτρο ανομοιότητας μεταξύ μιας ακολουθίας και των υπολοίπων στην ομάδα της. Υψηλές τιμές δείχνουν μεγάλη ανομοιότητα, συνεπώς μοναδικότητα παραδείγματος. Λαμβάνεται για κάθε ομάδα ο μέσος όρος. Εξαγωγή παραδειγμάτων χρήσης βιβλιοθηκών κώδικα από αποθήκες λογισμικού 285/4/2017
  29. 29. Κάλυψη Εξαγωγή παραδειγμάτων χρήσης βιβλιοθηκών κώδικα από αποθήκες λογισμικού 295/4/2017
  30. 30. Συνοχή ομάδων weka Εξαγωγή παραδειγμάτων χρήσης βιβλιοθηκών κώδικα από αποθήκες λογισμικού 305/4/2017
  31. 31. Συνοχή υπολοίπων βιβλιοθηκών Εξαγωγή παραδειγμάτων χρήσης βιβλιοθηκών κώδικα από αποθήκες λογισμικού 315/4/2017
  32. 32. Ανομοιότητα ομάδων weka Εξαγωγή παραδειγμάτων χρήσης βιβλιοθηκών κώδικα από αποθήκες λογισμικού 325/4/2017
  33. 33. Ανομοιότητα υπόλοιπων βιβλιοθηκών Εξαγωγή παραδειγμάτων χρήσης βιβλιοθηκών κώδικα από αποθήκες λογισμικού 335/4/2017
  34. 34. Μελέτη περίπτωσης • Σύγκριση παραδειγμάτων που παρήγαγε το σύστημά μας με αυτά από μηχανές αναζήτησης • Google • Github* • SearchCode • ProgramCreek API Examples • Σε περιπτώσεις εξειδικευμένης αναζήτησης προτύπου χρήσης η διαδικασία είναι χρονοβόρα Εξαγωγή παραδειγμάτων χρήσης βιβλιοθηκών κώδικα από αποθήκες λογισμικού 345/4/2017
  35. 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. 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. 37. Συμπεράσματα • API Usage Mining – Ανοικτό, πολύπλευρο και δύσκολο πρόβλημα • Ακόμη και για τον μικρό αριθμό παραδειγμάτων στην παρούσα εργασία ο αριθμός παραδειγμάτων ήταν μεγάλος. Η μεταεπεξεργασία των δεδομένων είναι αναγκαία • Η κλιμάκωση του συστήματος θα χρειαστεί ειδικές δομές αποθήκευσης και αναζήτησης. • Tο σύστημά μας φαίνεται να παράγει διαφορετικά παραδείγματα χωρίς να θυσιάζει συνεκτικότητα Εξαγωγή παραδειγμάτων χρήσης βιβλιοθηκών κώδικα από αποθήκες λογισμικού 375/4/2017
  38. 38. Μελλοντική εργασία • Απλή γραφική διεπαφή • Δομή επανατροφοδότησης σχετικά με την ποιότητα των αποτελεσμάτων • Επέκταση σε άλλες γλώσσες με προσθήκη αντίστοιχου εργαλείου στατικής ανάλυσης κώδικα • Ομαδοποίηση με αλγορίθμους αντί για ευριστικές τεχνικές στην μεταεπεξεργασία Εξαγωγή παραδειγμάτων χρήσης βιβλιοθηκών κώδικα από αποθήκες λογισμικού 385/4/2017
  39. 39. 5/4/2017 Εξαγωγή παραδειγμάτων χρήσης βιβλιοθηκών κώδικα από αποθήκες λογισμικού 39 ? ? ? ? ? ? ? ? ? ?? ? ? ? ? ? ? ? ? ? ?

×