Successfully reported this slideshow.
Your SlideShare is downloading. ×

Abstract - Mining Source Code Change Patterns from Open-Source Repositories

Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad

Check these out next

1 of 26 Ad

Abstract - Mining Source Code Change Patterns from Open-Source Repositories

Download to read offline

Nowadays, there is a rapid growth of open-source version control systems and repositories. A large number of new software projects are implemented, developed and maintained through these systems. Τhis way, software engineers can collaborate directly with each other, organize effectively and maintain an up-to-date history of the project’s evolution. Therefore, the volume of information stored is significant and its harnessing can lead to the development of smart and efficient systems. Within the context of this diploma thesis a machine learning system is developed, which stores, processes and groups source code changes that have taken place during the development stage, with the goal of extracting source code changes patterns. These patterns can act as recommendations for new projects, in order to optimize code development and/or fix potential bugs found repeatedly in project repositories. The proposed methodology was applied on the GitHub code hosting platform. GitHub tracks changes of source code files contained in a repository. These changes are represented as Abstract Syntax Trees (ASTs), so that the calculation of a similarity metric for the algorithmic structure can be achieved. Additionally, their semantic similarity is calculated and thus final clustering of source code changes is possible. Clusters that meet specific criteria, contain patterns of source code changes that can be used to provide recommendations for new software projects.

Nowadays, there is a rapid growth of open-source version control systems and repositories. A large number of new software projects are implemented, developed and maintained through these systems. Τhis way, software engineers can collaborate directly with each other, organize effectively and maintain an up-to-date history of the project’s evolution. Therefore, the volume of information stored is significant and its harnessing can lead to the development of smart and efficient systems. Within the context of this diploma thesis a machine learning system is developed, which stores, processes and groups source code changes that have taken place during the development stage, with the goal of extracting source code changes patterns. These patterns can act as recommendations for new projects, in order to optimize code development and/or fix potential bugs found repeatedly in project repositories. The proposed methodology was applied on the GitHub code hosting platform. GitHub tracks changes of source code files contained in a repository. These changes are represented as Abstract Syntax Trees (ASTs), so that the calculation of a similarity metric for the algorithmic structure can be achieved. Additionally, their semantic similarity is calculated and thus final clustering of source code changes is possible. Clusters that meet specific criteria, contain patterns of source code changes that can be used to provide recommendations for new software projects.

Advertisement
Advertisement

More Related Content

Similar to Abstract - Mining Source Code Change Patterns from Open-Source Repositories (20)

More from ISSEL (20)

Advertisement

Recently uploaded (20)

Abstract - Mining Source Code Change Patterns from Open-Source Repositories

  1. 1. Εξαγωγή Προτύπων Αλλαγών Κώδικα από Αποθετήρια Ανοικτού Λογισμικού Αριστοτέλειο Πανεπιστήμιο Θεσσαλονίκης Τμήμα Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Τομέας Ηλεκτρονικής και Υπολογιστών Ομάδα Ευφυών Συστημάτων και Τεχνολογίας Λογισμικού (ISSEL) Επίβλεψη: Αν. Καθηγητής, Ανδρέας Συμεωνίδης Υπ. Διδάκτωρ, Θωμάς Καρανικιώτης Εκπόνηση: Οδυσσέας Κυπαρίσσης Α.Ε.Μ: 8955
  2. 2. Διάρθρωση Παρουσίασης • Εισαγωγή • Μεθοδολογία • Αξιολόγηση & Αποτελέσματα • Συμπεράσματα • Μελλοντική Εργασία • Ευχαριστίες 12/8/2021 2 Εξαγωγή Προτύπων Αλλαγών Κώδικα από Αποθετήρια Ανοικτού Λογισμικού
  3. 3. Εισαγωγή Περιγραφή Προβλήματος: • Επανειλημμένη αντιμετώπιση παρόμοιων σφαλμάτων πηγαίου κώδικα από διαφορετικές ομάδες προγραμματιστών. • Ελάχιστη προσπάθεια για ανάπτυξη επαναχρησιμοποιήσιμου λογισμικού. • Αυξανόμενη ανάγκη για γρήγορη και αποτελεσματική ανάπτυξη πηγαίου κώδικα. 12/8/2021 3 Εξαγωγή Προτύπων Αλλαγών Κώδικα από Αποθετήρια Ανοικτού Λογισμικού
  4. 4. Εισαγωγή 12/8/2021 4 Εξαγωγή Προτύπων Αλλαγών Κώδικα από Αποθετήρια Ανοικτού Λογισμικού Σκοπός Διπλωματικής: Ανάπτυξη αυτοματοποιημένου συστήματος εξόρυξης προτύπων αλλαγών από αποθετήρια ανοικτού λογισμικού. • Αξιοποίηση της διαθέσιμης πληροφορίας από την πλατφόρμα του GitHub. • Μελέτη εξέλιξης τμημάτων πηγαίου κώδικα μεγάλων έργων λογισμικού. • Εξαγωγή και πρόταση γενικευμένων προτύπων αλλαγών πηγαίου κώδικα με στόχο: o Την αποσφαλμάτωση λογισμικού. o Την μείωση του χρόνου αποσφαλμάτωσης κατά την ανάπτυξη λογισμικού. o Την επαναχρησιμοποίηση πηγαίου κώδικα.
  5. 5. Εισαγωγή Βασική Μονάδα Ανάλυσης - GitHub Commit: 12/8/2021 Εξαγωγή Προτύπων Αλλαγών Κώδικα από Αποθετήρια Ανοικτού Λογισμικού 5 Commit Message Commit SHA Code Diff
  6. 6. Μεθοδολογία 12/8/2021 6 Εξαγωγή Προτύπων Αλλαγών Κώδικα από Αποθετήρια Ανοικτού Λογισμικού
  7. 7. Μεθοδολογία Δημιουργία & Προεπεξεργασία Συνόλου Δεδομένων • 900 δημοφιλέστερα Java αποθετήρια του GitHub: o 600  Training Set o 300  Test Set • Επιλογή αποθετηρίων με < 2500 commits. • Επιλογή commits μόνο του main κλάδου. • Απόρριψη commits ⇒ message ≠: o fix, improve, change, bug, add, remove, support. • Διαχωρισμός των code changes σε 3 κατηγορίες. o Both, Only Additions, Only Deletions. 12/8/2021 Εξαγωγή Προτύπων Αλλαγών Κώδικα από Αποθετήρια Ανοικτού Λογισμικού 7 Διάσπαση Commits Πολλαπλών Αρχείων Διαγραφή Αλλαγών Κύριου Τμήματος (main) Διαγραφή Διπλοεγγραφών Ίδιου Commit 187.441 Code Changes 730.320 Code Changes - 453.257 Code Changes - 62% - 89.622 Duplicates - 12.3% 137.112 – 73.15% 35.490 – 18.93% 14.839 – 7.92%
  8. 8. Μεθοδολογία Τελικά Χαρακτηριστικά • Μετατροπή πηγαίου κώδικα σε Αφηρημένο Συντακτικό Δέντρο (AST). • Τελικά Χαρακτηριστικά του Συνόλου Δεδομένων: 12/8/2021 Εξαγωγή Προτύπων Αλλαγών Κώδικα από Αποθετήρια Ανοικτού Λογισμικού 8 Cleaned Dataset SHA Message Code Diff Method Code Before Method Code After Method Code Before AST Method Code After AST Code Additions Code Deletions Code Additions AST Code Deletions AST
  9. 9. Μεθοδολογία Εξαγωγή & Ανάλυση Χαρακτηριστικών 12/8/2021 Εξαγωγή Προτύπων Αλλαγών Κώδικα από Αποθετήρια Ανοικτού Λογισμικού 9 Χαρακτηριστικά (#) : Lines Changed Variable Statements Cyclomatic Complexity Switch Statements Unique Operators Simple Names AST Children Class Instance Creations Conditional Expressions While Statements Method Invocations For Statements If Statements Try Statements Return Statements Qualified Names Single Variable Declaration
  10. 10. Μεθοδολογία • Εφαρμογή Αλγορίθμου Μείωσης Διαστασιμότητας o Principal Component Analysis – PCA. o Μετασχηματισμός των δεδομένων από 22 διαστάσεις σε 10. o Περιλαμβάνουν το 95% της συνολικής πληροφορίας και για τις τρείς κατηγορίες. 12/8/2021 Εξαγωγή Προτύπων Αλλαγών Κώδικα από Αποθετήρια Ανοικτού Λογισμικού 10 Category Size Before Filtered Percentage Both 137.112 18.647 13,6% Only Additions 35.490 4,950 13,95% Only Deletions 14.839 1.700 11,46% Φιλτράρισμα & Μείωση Διαστασιμότητας Box Plot – Number of Lines – Both Category Feature Code Changes Category Both Only Additions & Deletions Number of lines > 16 8 Number of AST children > 14 6 Number of names > 41 20
  11. 11. Μεθοδολογία • Εφαρμογή Αλγορίθμου Ομαδοποίησης k- means ++. • Υπολογισμός του αθροίσματος τετραγωνικού σφάλματος για την επιλογή του k. 𝑺𝑺𝑬 = 𝑖=1 𝑘 𝑥∊𝐶𝑖 𝑑𝑖𝑠𝑡2(𝑚𝑖, 𝑥) 12/8/2021 Εξαγωγή Προτύπων Αλλαγών Κώδικα από Αποθετήρια Ανοικτού Λογισμικού 11 Αρχική Ομαδοποίηση Data Category Number of Clusters Both 9 Only Additions 5 Only Deletions 5
  12. 12. Μεθοδολογία Ομοιότητα αλγοριθμικής δομής των αλλαγών. • Χρήση αλγορίθμου TED (Tree Edit Distance) – pq- grams. • Βασίζεται σε δύο παραμέτρους 𝒑, 𝒒. • Για κάθε ένα AST σχηματίζεται ένα Ordered Labeled Tree. o (𝑝 − 1) null κόμβοι εισάγονται στη ρίζα. o (𝑞 − 1) null κόμβοι εισάγονται, πριν το πρώτο και μετά το τελευταίο παιδί, κάθε ενδιάμεσου κόμβου (non-leaf node). o 𝑞 παιδιά εισάγονται σε κάθε φύλλο του δέντρου. 12/8/2021 Εξαγωγή Προτύπων Αλλαγών Κώδικα από Αποθετήρια Ανοικτού Λογισμικού 12 Υπολογισμός Πινάκων Ομοιότητας Αρχικών Ομάδων
  13. 13. Μεθοδολογία 12/8/2021 Εξαγωγή Προτύπων Αλλαγών Κώδικα από Αποθετήρια Ανοικτού Λογισμικού 13 Υπολογισμός Πινάκων Ομοιότητας Αρχικών Ομάδων • Για κάθε extended tree υπολογίζονται τα pq-grams trees. • Ως pq-grams tree ορίζεται το δέντρο που περιέχει έναν κόμβο με (𝑝 − 1) προγόνους και 𝑞 παιδιά. • Όλα τα pq-grams ενός δέντρου αποτελούν το προφίλ του δέντρου 𝐏𝒑,𝒒 𝑻 . • Η απόσταση μεταξύ δύο δέντρων ορίζεται ως εξής: d𝑝,𝑞 𝑇1, 𝑇2 = 1 − 2 |𝑃𝑝,𝑞 𝑇1 ∩ 𝑃𝑝,𝑞 𝑇2 | |𝑃𝑝,𝑞 𝑇1 ∪ 𝑃𝑝,𝑞 𝑇2 |
  14. 14. Μεθοδολογία 12/8/2021 Εξαγωγή Προτύπων Αλλαγών Κώδικα από Αποθετήρια Ανοικτού Λογισμικού 14 Βήματα Επεξεργασίας Περιγραφή Βήματος Κείμενο Αλλαγής Αρχική Κατάσταση - “If (isSorted()) { sortDescending();}” 1ο Βήμα Punctuation Removal “If isSorted sortDescending” 2ο Βήμα Tokenization [“if”, “isSorted”, “sortDescending”] 3ο Βήμα Split Camel Case [“If”, “is”, “Sorted”, “sort”, “Descending”] 4ο Βήμα Removal of Stop Words [“Sorted”, “sort”, “Descending”] 5ο Βήμα Lowercase [“sorted”, ”sort” ,”descending”] Υπολογισμός Πινάκων Ομοιότητας Αρχικών Ομάδων Λεξιλογική ομοιότητα των αλλαγών. • Προεπεξεργασία κειμένου των αλλαγών πηγαίου κώδικα.
  15. 15. Μεθοδολογία 12/8/2021 Εξαγωγή Προτύπων Αλλαγών Κώδικα από Αποθετήρια Ανοικτού Λογισμικού 15 Υπολογισμός Πινάκων Ομοιότητας Αρχικών Ομάδων • Διανυσματοποίηση των code changes – Vector Space Modelling. • Χρήση του αλγορίθμου Term Frequency – Inverse Document Frequency. cos. sim 𝑐𝑐1, 𝑐𝑐2 = 𝑐𝑐1 ⋅ 𝑐𝑐2 (||𝑐𝑐1|| ∗ | 𝑐𝑐2 |) = 𝑖=1 𝑁 𝑡𝑓𝑖 𝑤𝑖, 𝑐𝑐1 ∗ 𝑡𝑓𝑖 𝑤𝑖, 𝑐𝑐2 𝑖=1 𝑁 𝑡𝑓𝑖2( 𝑤𝑖, 𝑐𝑐1) 𝑖=1 𝑁 𝑡𝑓𝑖2( 𝑤𝑖, 𝑐𝑐2) 𝑇𝐹. 𝐼𝐷𝐹 𝑤, 𝑐𝑐 = 𝑇𝐹 𝑤, 𝑐𝑐 ∗ 𝐼𝐷𝐹 𝑤 = 𝑇𝐹 𝑤, 𝑐𝑐 ∗ log( 𝑇𝐶 𝐷𝐹(𝑤) ) o 𝑻𝑭 𝒘, 𝒄𝒄 η συνάρτηση εμφάνισης του όρου w στο cc. o 𝑻𝑪 ο συνολικός αριθμός των code changes o 𝑫𝑭 𝒘 το πλήθος των code changes που περιλαμβάνουν το w. • Χρήση της μετρικής ομοιότητας cosine similarity:
  16. 16. Μεθοδολογία 12/8/2021 Εξαγωγή Προτύπων Αλλαγών Κώδικα από Αποθετήρια Ανοικτού Λογισμικού 16 Τελική Ομαδοποίηση • Χρήση αλγορίθμου Agglomerative Hierarchical Clustering. • Υπολογισμός απόστασης ομάδων με τη μέθοδο Average Linkage. 𝑑 𝑟, 𝑠 = 1 𝑛𝑟 ∙ 𝑛𝑠 𝑖 𝑛𝑟 𝑗 𝑛𝑠 𝑑(𝑟𝑖, 𝑠𝑗) • Επιλογή βέλτιστου αριθμού ομάδων με τη χρήση της μετρικής Average Silhouette. 𝑠 𝑖 = 𝑏 𝑖 − 𝑎(𝑖) max{𝑎 𝑖 , 𝑏 𝑖 } 𝒂 𝒊 = 1 𝐶𝑖 −1 𝑗∊𝐶𝑖 𝑗≠𝑖 𝑑(𝑖, 𝑗) και 𝒃 𝒊 = 𝑚𝑖𝑛 1 𝐶𝑘 𝑗∊𝐶𝑘 𝑑(𝑖, 𝑗) • Βέλτιστη τιμή αριθμού ομάδων: 𝑘𝑜𝑝𝑡 = {𝑘: max(𝑠(𝑘))}
  17. 17. Μεθοδολογία • Επιλογή βέλτιστων ομάδων με τη χρήση τριών παραμέτρων: o Μέγεθος Ομάδας o Συνοχή της Ομάδας: 𝑐𝑜ℎ𝑒𝑠𝑖𝑜𝑛 = 1 − 1 𝐶 − 1 𝑥∊𝐶 𝑑(𝑥, 𝑐𝑒𝑛𝑡𝑟𝑜𝑖𝑑) o Αριθμός διαφορετικών αποθετηρίων • Tα centroids των ομάδων αποτελούν τα τελικά πρότυπα. 𝑐𝑒𝑛𝑡𝑟𝑜𝑖𝑑 = min( 1 𝐶 − 1 ) 𝑗∊𝐶 𝑗≠𝑖 𝑑(𝑖, 𝑗) 12/8/2021 Εξαγωγή Προτύπων Αλλαγών Κώδικα από Αποθετήρια Ανοικτού Λογισμικού 17 Επιλογή Ομάδων & Εξαγωγή Προτύπων Αλλαγών Πηγαίου Κώδικα Cluster Name Size Threshold Cohesion Threshold Repositories Threshold Only additions 1 10 0,75 7 Only deletions 3 10 0,75 7 Both 1 10 0,75 7
  18. 18. Αξιολόγηση & Αποτελέσματα Κύριος Στόχος Αξιολόγησης: o Ανίχνευση και καταμέτρηση των προτύπων (centroids) στα Code Diffs του συνόλου αξιολόγησης. Σύνολο Δεδομένων Αξιολόγησης: o 300 GitHub Αποθετήρια o 114.386 Code Diffs Κριτήρια Ανίχνευσης: • 𝑆𝑒𝑞𝑢𝑒𝑛𝑐𝑒𝑀𝑎𝑡𝑐ℎ𝑒𝑟. 𝑟𝑎𝑡𝑖𝑜 𝑠𝑒𝑞𝑢𝑒𝑛𝑐𝑒1, 𝑠𝑒𝑞𝑢𝑒𝑛𝑐𝑒2 = 2.0∗𝑀 𝑇 o Τ  Συνολικός αριθμός στοιχείων των δύο ακολουθιών. o Μ  Αριθμός των Matches. o Κατώτατο όριο ομοιότητας ακολουθιών: 0.8 Πρότυπα Αλλαγών Πηγαίου Κώδικα o Συνολικά 27 Πρότυπα Αλλαγών Πηγαίου Κώδικα 12/8/2021 Εξαγωγή Προτύπων Αλλαγών Κώδικα από Αποθετήρια Ανοικτού Λογισμικού 18
  19. 19. Αξιολόγηση & Αποτελέσματα 12/8/2021 Εξαγωγή Προτύπων Αλλαγών Κώδικα από Αποθετήρια Ανοικτού Λογισμικού 19 13.1 13.54 12.75 42.50 32.77 26.50 0 10 20 30 40 50 Both Only Additions Only Deletions Average Patterns Summary Mean of Number of Different Test Repositories Mean of Number of Occurrences in Testing Code Diffs Σύνοψη Αξιολόγησης • Μέσος όρος εμφάνισης προτύπων σε διαφορετικά αποθετήρια λογισμικού. • Μέσος όρος εμφάνισης προτύπων στο σύνολο των αλλαγών του συνόλου δεδομένων αξιολόγησης.
  20. 20. Αξιολόγηση & Αποτελέσματα Both Code Changes Patterns 12/8/2021 Εξαγωγή Προτύπων Αλλαγών Κώδικα από Αποθετήρια Ανοικτού Λογισμικού 20 Code Deletions Code Additions Repositories OTCD* public String name () { public String getName() { 18 144 StringBuffer buffer = new StringBuffer (); StringBuilder buffer = new StringBuilder (); 14 51 } catch (IOException e) { } catch (Exception e) { 26 94 e.printStackTrace(); logger.error("", e); 6 10 out.close(); if (out!= null) { out.close(); } 27 46 *OTCD = Occurrences in Testing Code Diffs
  21. 21. Αξιολόγηση & Αποτελέσματα Only Additions Code Changes Patterns 12/8/2021 Εξαγωγή Προτύπων Αλλαγών Κώδικα από Αποθετήρια Ανοικτού Λογισμικού 21 Code Additions Repositories OTCD if ($Variable == null) { throw new NullPointerException("$Variable can’t be null"); } 6 14 @Override 30 68 this.$Variable = $Variable; 20 35 file.close(); 19 32
  22. 22. Αξιολόγηση & Αποτελέσματα Only Deletions Code Changes Patterns 12/8/2021 Εξαγωγή Προτύπων Αλλαγών Κώδικα από Αποθετήρια Ανοικτού Λογισμικού 22 Code Deletions Repositories OTCD System.out.println(); 20 50 e.printStackTrace(); 20 39 } catch (Exception e) { throw e; } 5 7 long time = System.currentTimeMillis(); 6 10
  23. 23. Συμπεράσματα Περιγραφή Προβλήματος o Επανειλημμένη αντιμετώπιση παρόμοιων σφαλμάτων κατά την ανάπτυξη λογισμικού. Ανάγκη Δημιουργίας Συστήματος που: o Βοηθά στη γρήγορη και αποδοτική συγγραφή επαναχρησιμοποιήσιμου πηγαίου κώδικα. Η Υλοποίηση του Συστήματος: o Οδηγεί στην εύρεση συχνών αλλαγών που χρησιμοποιούνται ευρέως στα πιο δημοφιλή αποθετήρια λογισμικού και άρα μπορούν να θεωρηθούν πρότυπα. o Βοηθά στην αποσφαλμάτωση και την βελτίωση επαναχρησιμοποιήσιμου πηγαίου κώδικα. 12/8/2021 Εξαγωγή Προτύπων Αλλαγών Κώδικα από Αποθετήρια Ανοικτού Λογισμικού 23
  24. 24. Μελλοντική Εργασία Επεκτάσεις & Μελλοντική Εργασία • Επέκταση του συνόλου δεδομένων εκπαίδευσης περιλαμβάνοντας αλλαγές πηγαίου κώδικα από πολλαπλές γλώσσες προγραμματισμού. • Χρήση βάσης δεδομένων για πιο αποτελεσματική αποθήκευση και ανάκτηση της πληροφορίας. • Χρήση της κάρτας γραφικών κατά τον υπολογισμό των πινάκων ομοιότητας. 12/8/2021 Εξαγωγή Προτύπων Αλλαγών Κώδικα από Αποθετήρια Ανοικτού Λογισμικού 24
  25. 25. Ευχαριστίες Θα ήθελα να ευχαριστήσω θερμά: • Τον κ. Ανδρέα Συμεωνίδη • Τον Θωμά Καρανικιώτη • Όλους εσάς για την προσοχή σας! 12/8/2021 Εξαγωγή Προτύπων Αλλαγών Κώδικα από Αποθετήρια Ανοικτού Λογισμικού 25
  26. 26. 12/8/2021 Εξαγωγή Προτύπων Αλλαγών Κώδικα από Αποθετήρια Ανοικτού Λογισμικού 26 Q&A

×