Successfully reported this slideshow.
Your SlideShare is downloading. ×

Pantelidou Eirini: Design and development of a system for incremental static analysis of software projects

Pantelidou Eirini: Design and development of a system for incremental static analysis of software projects

Download to read offline

Nowadays software technology has made great progress. A detailed Internet research revealed that, there are open source software repositories (GitHub), which contain a plethora of software projects and most of them have a high level of complexity. As we refer to open source software products, we realize that these are projects, which are continuously changing in real-time, both in the number and content of their source code files. Therefore, the scheduled quality control of the entire project from the beginning, once a day or week is not enough, because delays the feedback of the developers. Generally, static analysis aims to detect and report to the developer code errors, bugs, security vulnerabilities and violations of programming rules. But every developer needs to know, how every change of a file affects the total quality of the software project. This purpose is served by static analysis with the production of quality metrics. The need for timely knowledge of the quality change of the software project, led to the realization of this diploma thesis, which aims to calculate the static analysis metrics only of changing code files and not the entire software project from the beginning. Thus, a system was designed, which directly isolates the changing and affected files from all files in the repository and then using a static analysis mechanism, extracts the new values of quality metrics exclusively for changing files. The results of the use of this system show that, it contributes dynamically to the continuous quality control of software projects, as it provides immediate and targeted information about the changes. Also, enables to time and resource savings and helps in the quality optimization of the products, as it prevents the developer from the wasteful building of software project on non-quality code parts.

Nowadays software technology has made great progress. A detailed Internet research revealed that, there are open source software repositories (GitHub), which contain a plethora of software projects and most of them have a high level of complexity. As we refer to open source software products, we realize that these are projects, which are continuously changing in real-time, both in the number and content of their source code files. Therefore, the scheduled quality control of the entire project from the beginning, once a day or week is not enough, because delays the feedback of the developers. Generally, static analysis aims to detect and report to the developer code errors, bugs, security vulnerabilities and violations of programming rules. But every developer needs to know, how every change of a file affects the total quality of the software project. This purpose is served by static analysis with the production of quality metrics. The need for timely knowledge of the quality change of the software project, led to the realization of this diploma thesis, which aims to calculate the static analysis metrics only of changing code files and not the entire software project from the beginning. Thus, a system was designed, which directly isolates the changing and affected files from all files in the repository and then using a static analysis mechanism, extracts the new values of quality metrics exclusively for changing files. The results of the use of this system show that, it contributes dynamically to the continuous quality control of software projects, as it provides immediate and targeted information about the changes. Also, enables to time and resource savings and helps in the quality optimization of the products, as it prevents the developer from the wasteful building of software project on non-quality code parts.

More Related Content

Slideshows for you

Related Books

Free with a 30 day trial from Scribd

See all

Related Audiobooks

Free with a 30 day trial from Scribd

See all

Pantelidou Eirini: Design and development of a system for incremental static analysis of software projects

  1. 1. Σχεδίαση και ανάπτυξη συστήματος σταδιακής (incremental) στατικής ανάλυσης έργων λογισμικού Διπλωματική εργασία της Παντελίδου Ειρήνης Α.Ε.Μ. 8753 ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ ΤΜΗΜΑ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ & ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΤΟΜΕΑΣ ΗΛΕΚΤΡΟΝΙΚΗΣ ΚΑΙ ΥΠΟΛΟΓΙΣΤΩΝ Υπό την επίβλεψη του Αναπληρωτή Καθηγητή κ. Ανδρέα Συμεωνίδη Και του υποψήφιου διδάκτορα κ. Μιχάλη Παπαμιχαήλ Σεπτέμβριος 2020
  2. 2. Η τεχνολογία λογισμικού σήμερα… • Πληθώρα αποθηκών ανοιχτού λογισμικού • GitHub Repositories με commits > 20.000 • Υψηλός ρυθμός μεταβολής έργων λογισμικού Πλήθος αρχείων Κώδικα αρχείων Elastic/elasticsearch 54.924 commits Spring-projects/spring-boot 28.930 commits apache/flink commits 23.686
  3. 3. Κίνητρα… • Ανάγκη έγκαιρης ανατροφοδότησης προγραμματιστών • Εργαλείο σταδιακής στατικής ανάλυσης κώδικα: Δομικά σφάλματα Στατική Ανάλυση Ανατροφοδότηση Αρκεί η στατική ανάλυση ολόκληρου του έργου από την αρχή μία φορά την ημέρα/εβδομάδα? Πολυπλοκότητα Συνοχή Συσχέτιση Σχολιασμός Κληρονομικότητα Μέγεθος Τι γίνεται με τα ποιοτικά χαρακτηριστικά κώδικα?
  4. 4. Σκοπός της διπλωματικής εργασίας Static Analysis Metrics SourceMeter All repository files # Commit A.java B.java C.java D.java E.java Static Analysis Metrics SourceMeter A.java B.java C.java Πλήρης στατική ανάλυση Σταδιακή στατική ανάλυση
  5. 5. Εργαλεία στατικής ανάλυσης κώδικα • PMD Ανίχνευση κακών πρακτικών εγγραφής κώδικα • Complexity-report Υπολογισμός πολυπλοκότητας κώδικα • SonarQube Ανίχνευση σφαλμάτων, αδυναμιών ασφάλειας και διπλοτυπίες κώδικα • Συνδυασμός όλων:
  6. 6. Dataset Κριτήρια επιλογής των GitHub αποθετηρίων: • Αρχεία πηγαίου κώδικα (κυρίως) σε Java • Πλήθος commits μεταξύ 100 και 15.000 Project Commits LOC json-iterator/java 460 13269 stleary/JSON-java 789 17694 json-path/JsonPath 881 17931 TheAlgorithms/java 1047 19585 structurizr/java 1072 22187 exercism/java 2216 24643 apache/dubbo 4360 184639 mongodb/mongo-java-driver 7221 160559 google/ExoPlayer 7969 200610 tronprotocol/java-tron 14254 276286 Συνολικό πλήθος εξεταζόμενων γραμμών κώδικα: 937.403 (LOC)
  7. 7. Το σύστημα που υλοποιήθηκε Υποσυστήματα: • Downloader • Code Change Manager • Code Analyzer
  8. 8. Το υποσύστημα του Downloader • Είναι υπεύθυνο για: • Τη λήψη και αποθήκευση των πληροφοριών περιγραφής κάθε commit • Τη λήψη ολόκληρου του project για κάθε commit στη μορφή με την οποία βρίσκεται εκείνη τη στιγμή και την αποθήκευση του σε τοπικό αποθετήριο στον υπολογιστή
  9. 9. Τρόπος λειτουργίας του Downloader Για κάθε commit: • Αποστολή αιτήματος στη βάση δεδομένων του GitHub • Λήψη και αποθήκευση των εξατομικευμένων πληροφοριών του σε .json αρχείο Όνομα & διαδρομή των μεταβαλλόμενων αρχείων κώδικα στο αποθετήριο Κώδικας αλλαγών (diff) κάθε μεταβαλλόμενου αρχείου • Λήψη και αποθήκευση ολόκληρου του έργου λογισμικού σε τοπικό αποθετήριο Local Repository # Commit
  10. 10. Το υποσύστημα του Code Change Manager • Είναι υπεύθυνο για: • Την εύρεση και απομόνωση των μεταβαλλόμενων αρχείων κώδικα κάθε commit στο αποθετήριο • Την εύρεση και απομόνωση των άμεσα συσχετιζόμενων αρχείων με κάθε μεταβαλλόμενο αρχείο κώδικα
  11. 11. Files Selector Για κάθε commit: Ανάκτηση των πληροφοριών μεταβολής από το αρχείο εξατομικευμένων πληροφοριών του (.json) 1) Προσθήκη νέου αρχείου κώδικα Είδος αλλαγής 2) Τροποποίηση ήδη υπάρχοντος αρχείου κώδικα 3) Διαγραφή ήδη υπάρχοντος αρχείου κώδικα Όνομα μεταβαλλόμενου αρχείου Διαδρομή μεταβαλλόμενου αρχείου στο τοπικό αποθετήριο Ονόματα και διαδρομές των άμεσα συσχετιζόμενων αρχείων  Δηλώσεις import στον κώδικα αλλαγών (patch/diff)
  12. 12. Files Transporter Διαδρομή των αρχείων στον νέο φάκελο ανάλογη με Διαδρομή των αρχείων στο τοπικό αποθετήριο Αποφυγή: • Προβλήματος συνύπαρξης αρχείων ίδιου ονόματος αλλά διαφορετικού περιεχομένου στον ίδιο φάκελο • Λανθασμένων αποτελεσμάτων κατά τη διαδικασία ανάλυσης
  13. 13. Περίπτωση ύπαρξης πληθώρας άμεσα συσχετιζόμενων αρχείων κώδικα Αποφυγή μεταφοράς τους σε νέο φάκελο Γιατί? • Χρονοβόρα διαδικασία εύρεσης • Ελάχιστο κέρδος χρόνου ανάλυσης • Πιθανή παράλειψη κάποιου τρίτου αρχείου με το οποίο μπορεί να υπάρχει κάποια μικρή μακρινή σχέση συσχέτισης Άρα: Πλήρης στατική ανάλυση του έργου λογισμικού
  14. 14. Το υποσύστημα του Code Analyzer • Είναι υπεύθυνο για: • Την παραγωγή των μετρικών στατικής ανάλυσης για τα μεταβαλλόμενα αρχεία κάθε commit
  15. 15. Τρόπος λειτουργίας του Code Analyzer • Στατική ανάλυση του νέου φακέλου με όλα τα μεταβαλλόμενα αρχεία κώδικα • Παραγωγή και αποθήκευση των μετρικών στατικής ανάλυσης σε .csv αρχεία αποτελεσμάτων • Συγκέντρωση των ανανεωμένων μετρικών στατικής ανάλυσης των μεταβαλλόμενων αρχείων σε κοινό .csv αρχείο αποτελεσμάτων με αυτές των υπόλοιπων αρχείων του αποθετηρίου Commit #1 Commit #2 Commit #2
  16. 16. Πειράματα 1. Ορθότητα υπολογισμού μετρικών στατικής ανάλυσης 2. Πλήθος γραμμών κώδικα (LOC) αρχείων συμμετοχής 3. Μέγεθος αρχείων συμμετοχής στο δίσκο 4. Χρόνος στατικής ανάλυσης μικρών και μεγάλων αποθετηρίων 5. Χρόνος σταδιακής στατικής ανάλυσης κάθε commit
  17. 17. Πείραμα 1: Ορθότητα υπολογισμού μετρικών στατικής ανάλυσης Δείγμα: Αποθετήρια με μικρό και μεγάλο πλήθος αρχείων και commits • Επιτυχία σωστού υπολογισμού μετρικής CBO: Για μικρό project: 99.55% Για μεγάλο project: 98.017% • Επιτυχία σωστού υπολογισμού λοιπών μετρικών: 100%
  18. 18. Πείραμα 2: Πλήθος γραμμών κώδικα (LOC) των αρχείων συμμετοχής Δείγμα:
  19. 19. Πείραμα 3: Μέγεθος αρχείων συμμετοχής στο δίσκο Δείγμα: Αποθετήρια μεγάλου μεγέθους (σε ΜΒ) Εξοικονόμηση χώρου στον υπολογιστή: 98.65% 99.31% 99.36% 99.48%
  20. 20. Πείραμα 4α: Χρόνος στατικής ανάλυσης αποθετηρίων με μικρό πλήθος commits Αποθετήρια: 460 ≤ commits ≤ 2216 13269 ≤ LOC ≤ 24643 • Μείωση χρόνου σε ποσοστό 67% - 75%
  21. 21. Πείραμα 4β: Χρόνος στατικής ανάλυσης αποθετηρίων με μεγάλο πλήθος commits Αποθετήρια: 4360 ≤ commits ≤ 14254 184639 ≤ LOC ≤ 276286 • Μείωση χρόνου σε ποσοστό 87% - 91%
  22. 22. Πείραμα 5: Χρόνος σταδιακής στατικής ανάλυσης κάθε commit Δείγμα: Αύξηση εξεταζόμενων LOC Αύξηση χρόνου σταδιακής στατικής ανάλυσης
  23. 23. Συμπεράσματα Το σύστημα προσφέρει: • Ακρίβεια υπολογισμού των μετρικών στατικής ανάλυσης με μία πολύ μικρή απόκλιση στην περίπτωση των μετρικών συνοχής • Μεγάλο κέρδος χρόνου διεκπεραίωσης στατικής ανάλυσης τόσο για μικρά όσο και για μεγάλα έργα λογισμικού • Δυνατότητα εξοικονόμησης χώρου στον υπολογιστή • Δυνατότητα εξοικονόμησης πόρων
  24. 24. Ανοιχτά θέματα • Εφαρμογή και σε άλλες γλώσσες προγραμματισμού • Δυνατότητα εφαρμογής του με μεγαλύτερη επιτυχία στα μεγάλα και περίπλοκα αποθετήρια έργων λογισμικού • Δυνατότητα λήψης και διαχείρισης έργων λογισμικού και από άλλες αποθήκες ανοιχτού λογισμικού • Επέκταση σταδιακής στατικής ανάλυσης σε επίπεδο πακέτου
  25. 25. Ευχαριστώ θερμά: • Τον Αναπληρωτή Καθηγητή Ανδρέα Συμεωνίδη • Τον Υποψήφιο Διδάκτωρ Μιχάλη Παπαμιχαήλ
  26. 26. Σας ευχαριστώ για την προσοχή σας!

×