Successfully reported this slideshow.
Your SlideShare is downloading. ×

Analyzing code bugs based on method call graphs

Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad

Check these out next

1 of 29 Ad

Analyzing code bugs based on method call graphs

Download to read offline

The increasing size and complexity of modern software projects often leads to the appearance of runtime errors (crashes), for instance due to coding inaccuracies or unforeseen use cases. Since errors affect software usability, quickly dealing with them has become an important maintenance task tied to the success of software projects. At the same time, processes for parsing user feedback, for example by dedicated teams, to understand errors or other bags and initiate maintenance operations can prove time consuming. To mitigate associated costs, an emerging trend is to automate (parts of) error understanding with machine learning systems, for example that perform auto matic tagging. In this thesis, we focus on understanding errors through extracted latent represen tations; these can be inputted in machine learning systems to predict error qualities, such as recommending which tags errors should obtain. To achieve this, existing ap proaches in the broader scope of automated bug understanding make use of natural language processing techniques, such as word embeddings, to understand feedback texts. However, in the case of errors, we propose that available stack traces leading up to crashing code segments also capture useful coding semantics in the form of paths within function call graphs. Thus, we investigate whether graph embeddings—extracted from error stack traces—can be used to obtain a better understanding of errors. To test our hypothesis, we developed a system that extracts latent error represen tations of software projects that combine textual and stack trace embeddings. To verify that these improve error understanding compared to using textual features only, we experimented on three popular software GitHub projects, where we extracted error rep resenations and used them to predict error tags (e.g. high priority) with neural network predictors. We found that, given a robust selection of predictor and enough example errors to train from, our approach improves text-based tagging by a significant margin across popular recommendation system measures.

The increasing size and complexity of modern software projects often leads to the appearance of runtime errors (crashes), for instance due to coding inaccuracies or unforeseen use cases. Since errors affect software usability, quickly dealing with them has become an important maintenance task tied to the success of software projects. At the same time, processes for parsing user feedback, for example by dedicated teams, to understand errors or other bags and initiate maintenance operations can prove time consuming. To mitigate associated costs, an emerging trend is to automate (parts of) error understanding with machine learning systems, for example that perform auto matic tagging. In this thesis, we focus on understanding errors through extracted latent represen tations; these can be inputted in machine learning systems to predict error qualities, such as recommending which tags errors should obtain. To achieve this, existing ap proaches in the broader scope of automated bug understanding make use of natural language processing techniques, such as word embeddings, to understand feedback texts. However, in the case of errors, we propose that available stack traces leading up to crashing code segments also capture useful coding semantics in the form of paths within function call graphs. Thus, we investigate whether graph embeddings—extracted from error stack traces—can be used to obtain a better understanding of errors. To test our hypothesis, we developed a system that extracts latent error represen tations of software projects that combine textual and stack trace embeddings. To verify that these improve error understanding compared to using textual features only, we experimented on three popular software GitHub projects, where we extracted error rep resenations and used them to predict error tags (e.g. high priority) with neural network predictors. We found that, given a robust selection of predictor and enough example errors to train from, our approach improves text-based tagging by a significant margin across popular recommendation system measures.

Advertisement
Advertisement

More Related Content

Slideshows for you (14)

Similar to Analyzing code bugs based on method call graphs (20)

Advertisement

More from ISSEL (20)

Recently uploaded (20)

Advertisement

Analyzing code bugs based on method call graphs

  1. 1. Ανάλυση σφαλμάτων κώδικα με βάση τον γράφο κλήσεων συναρτήσεων ΚΩΝΣΤΑΝΤΙΝΟΣ ΒΕΡΓΟΠΟΥΛΟΣ TΜΗΜΑ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ & ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΤΟΜΕΑΣ ΗΛΕΚΤΡΟΝΙΚΗΣ & ΥΠΟΛΟΓΙΣΤΩΝ 15/11/2021
  2. 2. ΠΕΡΙΕΧΟΜΕΝΑ ΕΙΣΑΓΩΓΗ 01 02 03 04 05 ΣΥΣΤΗΜΑ ΔΕΔΟΜΕΝΑ ΠΕΙΡΑΜΑΤΑ ΣΥΜΠΕΡΑΣΜΑΤΑ
  3. 3. ΕΙΣΑΓΩΓΗ 01
  4. 4. Σφάλματα Λογισμικού (“bugs”) • Σφάλματα λογισμικού ονομάζονται σφάλματα, ελαττώματα ή λάθη που οδηγούν το λογισμικό να παράγει εσφαλμένο ή απροσδόκητο αποτέλεσμα. • Σφάλματα system crash • Συνιστώσα της βιωσιμότητας των έργων λογισμικού
  5. 5. 70 σφάλματα ανα 1000 γραμμές κώδικα 15 σφάλματα ανα 1000 γραμμές κώδικα φτάνουν στους πελάτες Στατιστικά στοιχεία σφαλμάτων 75% του χρόνου των προγραμματιστών αφιερώνεται στην επίλυση σφαλμάτων 30 φορές τον χρόνο για την συγγραφή μιας γραμμής κώδικας απαιτεί η επίλυση ενός σφάλματος $113B ετησίως ξοδεύονται για την αντιμετώπιση σφαλμάτων σε έργα λογισμικού στην Αμερική
  6. 6. Καταγραφή σφαλμάτων 3. Stack trace 2. Description 1. Title 4. labels
  7. 7. Διαδικασία επίλυσης σφαλμάτων
  8. 8. Το πρόβλημα της κατηγοριοποίησης σφαλμάτων
  9. 9. Στόχοι Η ανάπτυξη συστήματος κατηγοριοποίησης Η μελέτη : • των επιδόσεων των stack traces σε προβλήματα ανάλυσης σφαλμάτων • της σημασίας των stack traces και της αναγκαιότητας της συμπερίληψης τους στις αναφορές σφαλμάτων
  10. 10. ΣΥΣΤΗΜΑ 02
  11. 11. Περιγραφή συστήματος 1. Υποσύστημα εξόρυξης δεδομένων 2. Υποσύστημα αναπαράστασης λέξεων 3. Υποσύστημα αναπαράστασης συναρτήσεων 4. Υποσύστημα αναπαράστασης σφαλμάτων 5. Υποσύστημα κατηγοριοποίησης
  12. 12. Υποσύστημα εξόρυξης δεδομένων • Βιβλιοθήκες GitHub REST API • Σφάλμα = {τίτλος, ετικέτες, προγραμματιστής, περιγραφή, stack trace} • Για τον σωστό διαχωρισμό των πληροφορίων χρησιμοποιούνται html tags όπως <code> ή λέξεις κλειδιά όπως java.exception
  13. 13. Υποσύστημα αναπαράστασης λέξεων • Δημιουργία λεξιλογίου με βάση την συχνότητα εμφάνισης • Χρήση της τεχνική skip-gram • Νευρωνικό δίκτυο • Χρήση τεχνικής Negative Sampling • Χρήση της μετρικής AUC για αξιολόγηση
  14. 14. Υποσύστημα αναπαράστασης συναρτήσεων • Δημιουργία του συνολικού γράφου κλήσεων συναρτήσεων • Δημιουργία λεξιλογίου με βάση την συχνότητα εμφάνισης • Χρήση της τεχνική skip-gram • Νευρωνικό δίκτυο • Εκμάθηση αναπαραστάσεων μέσω τυχαίων περιπάτων • Χρήση της μετρικής AUC για αξιολόγηση
  15. 15. Υποσύστημα αναπαράστασης σφαλμάτων • flags use_words, use_stacks για την αναπαράσταση των σφαλμάτων • Χρήση του απλού μέσου όρου για την αναπαράσταση των σφαλμάτων 𝑴 = 1 𝑁 w∈Bug∩Vocab 𝐱w • Στην συνδιαστική μέθοδο το διάνυσμα σφάλματος είναι η σειριακή ένωση των μέσων όρων BUG = 𝐌words, 𝐌funcs
  16. 16. Υποσύστημα κατηγοριοποίησης σφαλμάτων • Πρόβλημα δυαδικής ταξινόμησης • Μετρικές αξιολόγησης Accuracy, Precision, Geometric Mean & AUC • Boolean flags use_words, use_stacks Μοντέλα μηχανικής • Τυχαίος ταξινομητής: Ως μέτρο σύγκρισης • Logistic Regression: Φθηνός και αποτελεσματικός αλγόριθμος ταξινόμησης • VoteNN+P: Αρχιτεκτονική 5 νευρωνικών δικτύων με ψηφοφορία & patience remaining για early stopping Εναλλακτικές αρχιτεκτονικές • DropNN+P: Με dropout επίπεδο και patience remaining για early stopping
  17. 17. ΔΕΔΟΜΕΝΑ 03
  18. 18. Έργα ανοικτού λογισμικού Περιγραφές Γράφοι Λέξεις Μέθοδοι C:geo 6244 550 12769 1417 Elastic Search 9885 3200 39065 5994 Spring Boot 14367 1711 29090 7031
  19. 19. Ετικέτες προς ταξινόμησης Έργο Σετ Εκπαίδευσης Σετ Αξιολόγησης Σετ Ελέγχου Bug C:geo 294 84 42 Google Play C:geo 120 34 20 High Prio C:geo 68 10 10 >bug Elastic search 375 107 55 T:Distributed Elastic search 243 69 34 Snap/Dist Elastic search 208 60 30 type: bug Spring boot 265 76 38 type: invalid Spring boot 535 153 76 External –project Spring boot 215 62 30
  20. 20. ΠΕΙΡΑΜΑΤΑ 04
  21. 21. Διεξαγωγή πειραμάτων Εκμάθηση αποτελεσματικών διανυσματικών αναπαραστάσεων. Διεξαγωγή πειραμάτων κατηγοριοποίησης: • Χρήση μόνο των περιγραφών • Χρήση μόνο των συναρτήσεων • Χρήση των συνδυασμό τους
  22. 22. Πειράματα εκμάθησης διανυσματικών αναπαραστάσεων λέξεων C:geo ElasticSearch SpringBoot min_occurrence 2 4 3 skip_window 4 2 2 embedding_dim 64 64 64 num_sampled 64 32 32 learning_rate 0.1 0.1 0.1 valid WordAUC 0.85 0.80 0.77 test WordAUC 0.82 0.77 0.75
  23. 23. Πειράματα εκμάθησης διανυσματικών αναπαραστάσεων συναρτήσεων C:geo ElasticSearch SpringBoot min_occurrence 2 2 2 skip_window 2 2 2 embedding_dim 8 8 8 num_sampled 32 32 32 learning_rate 0.01 0.1 0.1 valid FuncAUC 0.91 0.90 0.90 test FuncAUC 0.89 0.86 0.88
  24. 24. Κατηγοριοποίηση στο έργο C:geo
  25. 25. Κατηγοριοποίηση στο έργο Elastic Search
  26. 26. Κατηγοριοποίηση στο έργο spring boot
  27. 27. ΣΥΜΠΕΡΑΣΜΑΤΑ 05
  28. 28. Συμπεράσματα 1. Οι περιγραφές αποδεικνύονται πιο αποδοτικές σε προβλήματα ανάλυσης σφαλμάτων από τους γράφους κλήσεων συναρτήσεων 2. Ο συνδιασμός γράφων κλήσεων συναρτήσεων και περιγραφών πάντα βελτιώνει τα αποτελέσματα ~6% κατά μέσο όρο 3. Υπάρχουν στατιστικά σημαντικές διαφορές στις μέσες τιμές με confidence level 99%. 4. Είναι σημαντικό να μην παραλείπεται η επισύναψη των γράφων κλήσεων συναρτήσεων.
  29. 29. ΕΥΧΑΡΙΣΤΩ ΠΟΛΥ Ερωτήσεις;

×