Successfully reported this slideshow.
Your SlideShare is downloading. ×

Idioms Extraction from Code Repositories

Idioms Extraction from Code Repositories

Download to read offline

In the context of this thesis, we worked on mining idioms from repositories. With the term idiom, we mean a small fragment of code that recurs in repositories and has a specific semantic purpose. Idioms are characterized by their readability and reusability to perform a specific task. Experienced developers aspire to write idiomatic code, which leads to better performance and easier maintenance applications. The importance of idioms is being realized as integrated development environments such as Eclipse and IntelliJ have specific tools that offer idioms to users. Our research to address the problem of the automatic idioms extraction is focused on clustering snippets of code from high level software projects. These projects were extracted from the version control system, GitHub based on their popularity. For the representation of the snippets, Abstract Syntax Trees have been used that retain both the structural information of the code and the semantic information with variables and methods names. The comparison of the source code fragments was performed with the pq-grams algorithm which is a method of measuring the distance of trees. Then the most representative code snippets of the resulting clusters were converted to a generalized format retaining the semantic content of the code. The results from the above procedure were evaluated based on a test set and were very encouraging.

In the context of this thesis, we worked on mining idioms from repositories. With the term idiom, we mean a small fragment of code that recurs in repositories and has a specific semantic purpose. Idioms are characterized by their readability and reusability to perform a specific task. Experienced developers aspire to write idiomatic code, which leads to better performance and easier maintenance applications. The importance of idioms is being realized as integrated development environments such as Eclipse and IntelliJ have specific tools that offer idioms to users. Our research to address the problem of the automatic idioms extraction is focused on clustering snippets of code from high level software projects. These projects were extracted from the version control system, GitHub based on their popularity. For the representation of the snippets, Abstract Syntax Trees have been used that retain both the structural information of the code and the semantic information with variables and methods names. The comparison of the source code fragments was performed with the pq-grams algorithm which is a method of measuring the distance of trees. Then the most representative code snippets of the resulting clusters were converted to a generalized format retaining the semantic content of the code. The results from the above procedure were evaluated based on a test set and were very encouraging.

More Related Content

More from ISSEL

Related Books

Free with a 30 day trial from Scribd

See all

Idioms Extraction from Code Repositories

  1. 1. Εξαγωγή Ιδιωμάτων από Αποθετήρια Κώδικα Αριστοτέλειο Πανεπιστήμιο Θεσσαλονίκης Τμήμα Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Τομέας Ηλεκτρονικής και Υπολογιστών Ομάδα Ευφυών Συστημάτων και Τεχνολογίας Λογισμικού Επίβλεψη: Αν. Καθηγητής, Ανδρέας Συμεωνίδης Υποψήφιος Διδάκτωρ, Θωμάς Καρανικιώτης Εκπόνηση: Αργύρης Παπουδάκης ΑΕΜ: 8600 Θεσσαλονίκη, Νοέμβριος 2020
  2. 2. Δομή Παρουσίασης 1. Εισαγωγή 2. Μεθοδολογία Συστήματος 3. Αξιολόγηση Αποτελεσμάτων 4. Συμπεράσματα και Μελλοντικές Επεκτάσεις 5. Ερωτήσεις Νοέμβριος 2020 Εξαγωγή Ιδιωμάτων από Αποθετήρια Κώδικα 2
  3. 3. Ιδιώματα • Τμήματα κώδικα (snippets) που έχουν ένα συγκεκριμένο σημασιολογικό σκοπό και επαναλαμβάνονται σε έργα λογισμικού υψηλού επιπέδου. • Τα ιδιώματα φαίνονται ‘’φυσικά’’ σε έναν έμπειρο προγραμματιστή. Idiomatic Non-Idiomatic Νοέμβριος 2020 Εξαγωγή Ιδιωμάτων από Αποθετήρια Κώδικα 3
  4. 4. Σημασία Ιδιωμάτων • Προσφέρουν αναγνωσιμότητα και μεγαλύτερη δυνατότητα επαναχρησιμοποίησης συμβάλλοντας στην ανάπτυξη λογισμικού υψηλού επιπέδου • Μερικά από τα πλέον δημοφιλή IDE έχουν εργαλεία που παρέχουν την δυνατότητα εισαγωγής ιδιωμάτων:  Live Templates built-in της JetBrain  Bing Code plug-in του Visual Studio  SnipMatch plug-in του Eclipse Νοέμβριος 2020 Εξαγωγή Ιδιωμάτων από Αποθετήρια Κώδικα 4
  5. 5. Σκοπός της διπλωματικής εργασίας Τα εργαλεία αυτά περιέχουν ιδιώματα τα οποία: • έχουν εισαχθεί χειροκίνητα (SnipMatch, Live Templates) • η εύρεση τους έχει πραγματοποιηθεί με αναζήτηση στο διαδίκτυο (Bing Code) Ανάγκη για αυτόματη εξαγωγή ιδιωμάτων από αποθετήρια κώδικα Νοέμβριος 2020 Εξαγωγή Ιδιωμάτων από Αποθετήρια Κώδικα 5
  6. 6. Μεθοδολογία Βασική ιδέα υλοποίησης: 1. Εστιάσαμε σε τμήματα κώδικα που αποτελούν εντολές ελέγχου ροής (If, For, Try, While, Do και Switch) 2. Ομαδοποίηση των snippets 3. Επιλογή των βέλτιστων ομάδων και εύρεση του πιο αντιπροσωπευτικού σημείου για κάθε μία από αυτές (centroid) 4. Μετατροπή του centroid σε μια γενικευμένη μορφή με στόχο την ευκολότερη χρησιμοποίηση των ιδιωμάτων Νοέμβριος 2020 Εξαγωγή Ιδιωμάτων από Αποθετήρια Κώδικα 6
  7. 7. Αρχιτεκτονική Συστήματος Νοέμβριος 2020 Εξαγωγή Ιδιωμάτων από Αποθετήρια Κώδικα 7
  8. 8. Δημιουργία Συνόλου Δεδομένων Επιλέγονται τα 1500 δημοφιλέστερα repositories σε γλώσσα προγραμματισμού Java: • Αναπαράσταση των αρχείων Java ως Αφηρημένα Συντακτικά Δέντρα (ASTs) • Εύρεση των snippets που περιέχουν εντολές ελέγχου ροής • Δημιουργία συνόλου δεδομένων με εγγραφές που περιέχουν snippets τόσο σε μορφή κώδικα όσο και σε μορφή δέντρου AST Νοέμβριος 2020 Εξαγωγή Ιδιωμάτων από Αποθετήρια Κώδικα 8
  9. 9. Προεπεξεργασία Δεδομένων • Επιλέγουμε να διατηρήσουμε μόνο τα snippets με αριθμό γραμμών μικρότερο ή ίσο του 7 • Διαχωρίζουμε τα τμήματα κώδικα σε έξι υποομάδες με βάση τον τύπο της εντολής ελέγχου ροής • Αρχική ομαδοποίηση (preclustering) των snippets με βάση τη πολυπλοκότητα Νοέμβριος 2020 Εξαγωγή Ιδιωμάτων από Αποθετήρια Κώδικα 9 Υποσύνολα Δεδομένων Αριθμός Εγγραφών If 1.034.259 For 252.587 Try 246.632 While 55.438 Switch 10.482 Do 3.482
  10. 10. Προεπεξεργασία Δεδομένων Ο αρχικός διαχωρισμός πραγματοποιείται με βάση τις μετρικές: 1. Cyclomatic Complexity, αριθμός ανεξάρτητων μονοπατιών του snippet 2. Συνολικός αριθμός μεταβλητών και μεθόδων του snippet Νοέμβριος 2020 Εξαγωγή Ιδιωμάτων από Αποθετήρια Κώδικα 10 Υποσύνολα Δεδομένων Αριθμός Υποομάδων Μέσος Αριθμός Εγγραφών If 19 51.287 For 10 25.258 Try 11 22.421
  11. 11. Σχήμα Ομοιότητας • Δημιουργία πινάκων ομοιότητας για κάθε μία από τις υποομάδες • Η σύγκριση των snippets πραγματοποιείται με βάση την απόσταση των AST • Τα Αφηρημένα Συντακτικά Δέντρα χρειάζεται να μετατραπούν σε ordered labelled trees Νοέμβριος 2020 Εξαγωγή Ιδιωμάτων από Αποθετήρια Κώδικα 11 <IfStatement> <SimpleName>resultSetFinished</SimpleName> <Block> <ReturnStatement> <BooleanLiteral>false</BooleanLiteral> </ReturnStatement> </Block> </IfStatement>
  12. 12. Αλγόριθμος pq-grams • Χρησιμοποιείται για την μέτρηση της απόστασης δύο δέντρων • Βασίζεται σε δύο παραμέτρους p, q • Για κάθε ένα από τα δέντρα σχηματίζεται ένα extended tree:  p-1 null κόμβοι εισάγονται στη ρίζα του δέντρου ως πρόγονοι  q-1 null κόμβοι εισάγονται ως παιδιά, πριν το πρώτο και μετά το τελευταίο παιδί, κάθε ενδιάμεσου κόμβου (non-leaf node)  q παιδιά εισάγονται σε κάθε φύλλο του δέντρου Νοέμβριος 2020 Εξαγωγή Ιδιωμάτων από Αποθετήρια Κώδικα 12
  13. 13. Αλγόριθμος pq-grams • Για κάθε extended tree υπολογίζονται τα pq-grams trees • Ως pq-gram ορίζεται το δέντρο που περιέχει ένα κόμβο με p-1 προγόνους και q παιδιά • Παραδείγματα υποδέντρων 2,3-grams trees του T1 2,3 • Όλα τα pq-grams ενός δέντρου αποτελούν το προφίλ του δέντρου και συμβολίζεται με Pp,q Τ Νοέμβριος 2020 Εξαγωγή Ιδιωμάτων από Αποθετήρια Κώδικα 13
  14. 14. Αλγόριθμος pq-grams • Τα κοινά pq-grams trees που περιέχονται στα προφίλ των δέντρων καθορίζουν την μεταξύ τους απόσταση σύμφωνα με την παρακάτω σχέση: 𝑑𝑝,𝑞 𝑇1, 𝑇2 = 1 − 2 𝑃𝑝,𝑞 𝑇1 ∩ 𝑃𝑝,𝑞 𝑇2 𝑃𝑝,𝑞 𝑇1 ∪ 𝑃𝑝,𝑞 𝑇2 𝑃𝑝,𝑞 (𝑇1) ∩ 𝑃𝑝,𝑞 (𝑇2) : αριθμός κοινών pq-grams δέντρων που έχουν τα T1, T2 𝑃𝑝,𝑞 (𝑇1) ∪ 𝑃𝑝,𝑞 (𝑇2) : το άθροισμα των pq-grams που έχουν τα T1, T2 • Αντίστοιχα η ομοιότητα μεταξύ δύο δέντρων δίνεται από τη σχέση: 𝑠𝑖𝑚𝑝,𝑞 𝑇1, 𝑇2 = 2 𝑃𝑝,𝑞 𝑇1 ∩ 𝑃𝑝,𝑞 𝑇2 𝑃𝑝,𝑞 𝑇1 ∪ 𝑃𝑝,𝑞 𝑇2 Νοέμβριος 2020 Εξαγωγή Ιδιωμάτων από Αποθετήρια Κώδικα 14
  15. 15. Φιλτράρισμα Εγγραφών Με βάση τους πίνακες ομοιότητας που υπολογίστηκαν πραγματοποιείται αφαίρεση των διπλοεγγραφών: • Snippets με ομοιότητα μονάδα που ανήκουν στο ίδιο repository • Snippets με ομοιότητα μονάδα που ανήκουν σε διαφορετικά repository αλλα προέρχονται από το ίδιο java package το οποίο μπορεί να χρησιμοποιείται από πολλά αποθετήρια κώδικα Η διαδικασία του φιλτραρίσματος συμβάλει σημαντικά ώστε οι ομάδες που θα προκύψουν στη συνέχεια να περιέχουν snippets που θα προέρχονται από μεγάλο αριθμό διαφορετικών προγραμματιστών. Νοέμβριος 2020 Εξαγωγή Ιδιωμάτων από Αποθετήρια Κώδικα 15
  16. 16. Ομαδοποίηση • Συγχωνευτική Ιεραρχική ομαδοποίηση για κάθε έναν από τους πίνακες ομοιότητας • Υπολογισμός απόστασης ομάδων με τη μέθοδο Average Linkage 𝑑 𝑟, 𝑠 = 1 𝑛𝑟𝑛𝑠 𝑖=1 𝑛𝑟 𝑗=1 𝑛𝑠 (𝑑(𝑟𝑖 , 𝑠𝑗)) • Επιλογή βέλτιστου αριθμού ομάδων με τη χρήση της μετρικής average silhouette  η μέση απόσταση του σημείου από τα υπόλοιπα σημεία της ομάδας a 𝑖 = 1 𝐶𝑖 −1 𝑗∈𝐶𝑖 𝑗≠𝑖 𝑑(𝑖, 𝑗)  η μέση απόσταση του σημείου από το αμέσως επόμενο όμοιο cluster 𝑏 𝑖 = min 𝑘≠𝑖 1 𝐶𝑘 𝑗∈𝐶𝑘 𝑑(𝑖, 𝑗) 𝑠 𝑖 = 𝑏 𝑖 − 𝑎(𝑖) m𝑎𝑥 𝑎 𝑖 , 𝑏(𝑖) • Βέλτιστη τιμή αριθμού ομάδων 𝑘𝑜𝑝𝑡𝑖𝑚𝑎𝑙 = 𝑘 ∶ m𝑎𝑥 ( 𝑠(𝑘)) Νοέμβριος 2020 Εξαγωγή Ιδιωμάτων από Αποθετήρια Κώδικα 16
  17. 17. Επιλογή Ομάδων Η επιλογή των βέλτιστων ομάδων πραγματοποιείται με τη χρήση τριών παραμέτρων: • Μέγεθος ομάδων • Συνοχή που παρουσιάζουν οι ομάδες 𝑐𝑜ℎ𝑒𝑠𝑖𝑜𝑛 = 1 − 1 𝐶 − 1 𝑥∈𝐶 𝑑(𝑥, 𝑐𝑒𝑛𝑡𝑟𝑜𝑖𝑑) • Αριθμός διαφορετικών repositories Νοέμβριος 2020 Εξαγωγή Ιδιωμάτων από Αποθετήρια Κώδικα 17 Cluster Type Size Threshold Cohesion Threshold Repositories Threshold If 80 0.7 8 For 100 0.7 40 Try 100 0.7 30 While 50 0.7 30 Do 25 0.7 5 Switch 80 0.7 10
  18. 18. Γενικευμένη Μορφή Ιδιωμάτων • Τα ιδιώματα χρειάζεται να περιέχουν ένα πλήθος μεταδεδομένων • Για κάθε ένα από τα tokens του centroid υπολογίζεται η συχνότητα με την οποία εμφανίζεται στα snippets του clusters • Επιλέγουμε να διατηρήσουμε μόνο αυτά με συχνότητα μεγαλύτερη από 0.5 Νοέμβριος 2020 Εξαγωγή Ιδιωμάτων από Αποθετήρια Κώδικα 18
  19. 19. Παραδείγματα Ιδιωμάτων Νοέμβριος 2020 Εξαγωγή Ιδιωμάτων από Αποθετήρια Κώδικα 19 Centroids Idioms abstract form while ((line=reader.readLine()) != null) { result.add(line); } while ((line=$(object1).readLine()) != null) { $(object2).$(method1)(line); } try { out.close(); } catch (IOException e) { e.printStackTrace(); } try { $(object1).$(method1)(); } catch ($(exception) e) { e.printStackTrace(); } if (value == null) { throw new IllegalArgumentException("Cannot generate variable name for an Object return type with null value"); } if ($(object1) == null) { throw new $(exception1)($(string1)) }
  20. 20. Αξιολόγηση Ομάδων Οι ομάδες που χρησιμοποιήθηκαν για την εξαγωγή των ιδιωμάτων παρουσιάζουν τα εξής χαρακτηριστικά: • Έχουν κατά μέσο όρο 297 snippets • Μέση τιμή συνοχής 0.81 • Μέσο αριθμό διαφορετικών repositories 59 Νοέμβριος 2020 Εξαγωγή Ιδιωμάτων από Αποθετήρια Κώδικα 20
  21. 21. Αξιολόγηση Ιδιωμάτων • Για τον έλεγχο της χρησιμότητας των ιδιωμάτων χρησιμοποιήθηκαν 500 αποθετήρια κώδικα (test set) • Συγκρίνουμε τη γενικευμένη μορφή των ιδιωμάτων του συστήματος με τα snippets που περιέχονται στο σύνολο αξιολόγησης • Με βάση τη σύγκριση αυτή υπολογίζουμε δύο βασικά στατιστικά:  Σε πόσα repositories χρησιμοποιείται το κάθε ιδίωμα  Πόσα ιδιώματα χρησιμοποιεί το κάθε αποθετήριο κώδικα Νοέμβριος 2020 Εξαγωγή Ιδιωμάτων από Αποθετήρια Κώδικα 21
  22. 22. Αξιολόγηση Ιδιωμάτων • Τα ιδιώματα χρησιμοποιούνται κατά μέσο όρο σε 27 διαφορετικά repositories του test set • Μόνο δύο από τα ιδιώματα δεν βρέθηκαν να χρησιμοποιούνται σε κανένα αποθετήριο κώδικα Νοέμβριος 2020 Εξαγωγή Ιδιωμάτων από Αποθετήρια Κώδικα 22
  23. 23. Αξιολόγηση Ιδιωμάτων • Το 81% από τα repositories χρησιμοποιούν τουλάχιστον ένα από τα ιδιώματα του συστήματος • Κατά μέσο όρο χρησιμοποιούν 4 ιδιώματα Νοέμβριος 2020 Εξαγωγή Ιδιωμάτων από Αποθετήρια Κώδικα 23
  24. 24. Συμπεράσματα Αναπτύξαμε ένα σύστημα αυτόματης εξαγωγής ιδιωμάτων για το οποίο ισχύει ότι: • Αξιοποιεί τόσο τη δομική όσο και τη σημασιολογική πληροφορία των snippets • Δημιουργεί ομάδες από τις οποίες προκύπτουν ενδιαφέροντα τμήματα κώδικα με σαφές σημασιολογικό περιεχόμενο • Μετατρέπει τα ιδιώματα σε μια γενικευμένη μορφή ώστε το κάθε snippet να προσαρμόζεται στις ανάγκες του προγραμματιστή • Τα ιδιώματα που εξαγάγαμε χρησιμοποιούνται σε ικανοποιητικό βαθμό από τα repositories του test set Νοέμβριος 2020 Εξαγωγή Ιδιωμάτων από Αποθετήρια Κώδικα 24
  25. 25. Μελλοντική Εργασία • Επέκταση μεθοδολογίας ώστε να περιλαμβάνει και τμήματα κώδικα που δεν αποτελούν εντολές ελέγχου ροής • Παραλληλοποίηση των συγκρίσεων με τη χρήση GPU • Προσθήκη περιγραφής για κάθε ιδίωμα, ώστε να είναι ευκολότερη η εισαγωγή τους σε ένα σύστημα προτάσεων • Εφαρμογή της μεθοδολογίας σε γλώσσες προγραμματισμού λιγότερο δομημένες έτσι ώστε να συγκριθούν τα τελικά αποτελέσματα Νοέμβριος 2020 Εξαγωγή Ιδιωμάτων από Αποθετήρια Κώδικα 25
  26. 26. Ευχαριστίες Θα ήθελα να ευχαριστήσω θερμά τους: • κ. Ανδρέα Συμεωνίδη • κ. Θωμά Καρανικιώτη Νοέμβριος 2020 Εξαγωγή Ιδιωμάτων από Αποθετήρια Κώδικα 26
  27. 27. Σας ευχαριστώ για την προσοχή σας Ερωτήσεις; Νοέμβριος 2020 Εξαγωγή Ιδιωμάτων από Αποθετήρια Κώδικα 27

×