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.
3. Κίνητρα…
• Ανάγκη έγκαιρης ανατροφοδότησης
προγραμματιστών
• Εργαλείο σταδιακής στατικής
ανάλυσης κώδικα:
Δομικά σφάλματα
Στατική
Ανάλυση Ανατροφοδότηση
Αρκεί η στατική ανάλυση ολόκληρου
του έργου από την αρχή μία φορά
την ημέρα/εβδομάδα?
Πολυπλοκότητα
Συνοχή
Συσχέτιση
Σχολιασμός
Κληρονομικότητα
Μέγεθος
Τι γίνεται με τα ποιοτικά
χαρακτηριστικά κώδικα?
7. Το σύστημα που υλοποιήθηκε
Υποσυστήματα:
• Downloader
• Code Change Manager
• Code Analyzer
8. Το υποσύστημα του Downloader
• Είναι υπεύθυνο για:
• Τη λήψη και αποθήκευση των πληροφοριών περιγραφής κάθε commit
• Τη λήψη ολόκληρου του project για κάθε commit στη μορφή με την
οποία βρίσκεται εκείνη τη στιγμή και την αποθήκευση του σε τοπικό
αποθετήριο στον υπολογιστή
9. Τρόπος λειτουργίας του Downloader
Για κάθε commit:
• Αποστολή αιτήματος στη βάση δεδομένων του GitHub
• Λήψη και αποθήκευση των εξατομικευμένων
πληροφοριών του σε .json αρχείο
Όνομα & διαδρομή των μεταβαλλόμενων αρχείων
κώδικα στο αποθετήριο
Κώδικας αλλαγών (diff) κάθε μεταβαλλόμενου
αρχείου
• Λήψη και αποθήκευση ολόκληρου του έργου λογισμικού
σε τοπικό αποθετήριο
Local
Repository
# Commit
10. Το υποσύστημα του Code Change Manager
• Είναι υπεύθυνο για:
• Την εύρεση και απομόνωση των μεταβαλλόμενων αρχείων κώδικα κάθε
commit στο αποθετήριο
• Την εύρεση και απομόνωση των άμεσα συσχετιζόμενων αρχείων με κάθε
μεταβαλλόμενο αρχείο κώδικα
11. Files Selector
Για κάθε commit:
Ανάκτηση των πληροφοριών μεταβολής από το αρχείο εξατομικευμένων
πληροφοριών του (.json)
1) Προσθήκη νέου αρχείου κώδικα
Είδος αλλαγής 2) Τροποποίηση ήδη υπάρχοντος αρχείου κώδικα
3) Διαγραφή ήδη υπάρχοντος αρχείου κώδικα
Όνομα μεταβαλλόμενου αρχείου
Διαδρομή μεταβαλλόμενου
αρχείου στο τοπικό αποθετήριο
Ονόματα και διαδρομές των
άμεσα συσχετιζόμενων αρχείων
Δηλώσεις import στον
κώδικα αλλαγών (patch/diff)
12. Files Transporter
Διαδρομή των αρχείων
στον νέο φάκελο
ανάλογη με
Διαδρομή των αρχείων
στο τοπικό αποθετήριο
Αποφυγή:
• Προβλήματος συνύπαρξης αρχείων ίδιου ονόματος αλλά διαφορετικού
περιεχομένου στον ίδιο φάκελο
• Λανθασμένων αποτελεσμάτων κατά τη διαδικασία ανάλυσης
13. Περίπτωση ύπαρξης πληθώρας άμεσα
συσχετιζόμενων αρχείων κώδικα
Αποφυγή μεταφοράς τους σε νέο φάκελο
Γιατί?
• Χρονοβόρα διαδικασία εύρεσης
• Ελάχιστο κέρδος χρόνου ανάλυσης
• Πιθανή παράλειψη κάποιου τρίτου αρχείου με το οποίο μπορεί να
υπάρχει κάποια μικρή μακρινή σχέση συσχέτισης
Άρα:
Πλήρης στατική ανάλυση του
έργου λογισμικού
14. Το υποσύστημα του Code Analyzer
• Είναι υπεύθυνο για:
• Την παραγωγή των μετρικών στατικής ανάλυσης για τα μεταβαλλόμενα
αρχεία κάθε commit
15. Τρόπος λειτουργίας του Code Analyzer
• Στατική ανάλυση του νέου φακέλου με όλα τα μεταβαλλόμενα
αρχεία κώδικα
• Παραγωγή και αποθήκευση των μετρικών στατικής ανάλυσης σε
.csv αρχεία αποτελεσμάτων
• Συγκέντρωση των ανανεωμένων μετρικών στατικής ανάλυσης των
μεταβαλλόμενων αρχείων σε κοινό .csv αρχείο αποτελεσμάτων με
αυτές των υπόλοιπων αρχείων του αποθετηρίου
Commit #1
Commit #2
Commit #2
16. Πειράματα
1. Ορθότητα υπολογισμού μετρικών
στατικής ανάλυσης
2. Πλήθος γραμμών κώδικα (LOC)
αρχείων συμμετοχής
3. Μέγεθος αρχείων συμμετοχής στο
δίσκο
4. Χρόνος στατικής ανάλυσης μικρών
και μεγάλων αποθετηρίων
5. Χρόνος σταδιακής στατικής
ανάλυσης κάθε commit
17. Πείραμα 1: Ορθότητα υπολογισμού μετρικών
στατικής ανάλυσης
Δείγμα: Αποθετήρια με μικρό και μεγάλο πλήθος αρχείων και commits
• Επιτυχία σωστού υπολογισμού
μετρικής CBO:
Για μικρό project: 99.55%
Για μεγάλο project: 98.017%
• Επιτυχία σωστού υπολογισμού
λοιπών μετρικών: 100%
19. Πείραμα 3: Μέγεθος αρχείων συμμετοχής στο
δίσκο
Δείγμα: Αποθετήρια μεγάλου μεγέθους (σε ΜΒ)
Εξοικονόμηση χώρου
στον υπολογιστή:
98.65%
99.31%
99.36%
99.48%
20. Πείραμα 4α: Χρόνος στατικής ανάλυσης
αποθετηρίων με μικρό πλήθος commits
Αποθετήρια: 460 ≤ commits ≤ 2216
13269 ≤ LOC ≤ 24643
• Μείωση χρόνου σε ποσοστό 67% - 75%
21. Πείραμα 4β: Χρόνος στατικής ανάλυσης
αποθετηρίων με μεγάλο πλήθος commits
Αποθετήρια: 4360 ≤ commits ≤ 14254
184639 ≤ LOC ≤ 276286
• Μείωση χρόνου σε ποσοστό 87% - 91%
22. Πείραμα 5: Χρόνος σταδιακής στατικής ανάλυσης
κάθε commit
Δείγμα:
Αύξηση εξεταζόμενων LOC
Αύξηση χρόνου σταδιακής
στατικής ανάλυσης
23. Συμπεράσματα
Το σύστημα προσφέρει:
• Ακρίβεια υπολογισμού των μετρικών στατικής ανάλυσης με μία
πολύ μικρή απόκλιση στην περίπτωση των μετρικών συνοχής
• Μεγάλο κέρδος χρόνου διεκπεραίωσης στατικής ανάλυσης τόσο
για μικρά όσο και για μεγάλα έργα λογισμικού
• Δυνατότητα εξοικονόμησης χώρου στον υπολογιστή
• Δυνατότητα εξοικονόμησης πόρων
24. Ανοιχτά θέματα
• Εφαρμογή και σε άλλες γλώσσες προγραμματισμού
• Δυνατότητα εφαρμογής του με μεγαλύτερη επιτυχία στα
μεγάλα και περίπλοκα αποθετήρια έργων λογισμικού
• Δυνατότητα λήψης και διαχείρισης έργων λογισμικού και από
άλλες αποθήκες ανοιχτού λογισμικού
• Επέκταση σταδιακής στατικής ανάλυσης σε επίπεδο πακέτου
25. Ευχαριστώ θερμά:
• Τον Αναπληρωτή Καθηγητή Ανδρέα Συμεωνίδη
• Τον Υποψήφιο Διδάκτωρ Μιχάλη Παπαμιχαήλ