Nowadays, the pace of technological development and the uninterrupted use of online sources have resulted in rapid software development processes. In the numerous projects that are constantly being implemented, what is becoming more and more evident is the smooth development of the source code around a number of criteria that define its quality. This problem is especially magnified when there are dilemmas of reusing snippets of code and doubts arise about the best choice. Therefore, such issues make it necessary to assess the quality of code fragments that are candidates for reuse based on their maintainability. The process of evaluating the quality of the source code of a software project is a time consuming and costly operation, as it involves a high degree of complexity depending on the languages the project has been implemented in and its scope. At the same time, the contribution of many developers to a project always increases the difficulties of correct evaluation. Consequently, such issues require techniques and tools that take into account multiple parameters in order to rigorously and reasonably assess the quality of a project in terms of its maintainability. One of the most prevalent techniques is the analysis of source code using static metrics that rigorously evaluate the characteristics of the software project. This is what this thesis is based on, as it focuses on static source code analysis and methods that will contribute to the evaluation of software quality through them. This is done as long as there is the availability of open source projects in repositories such as GitHub and can be used to build tools aiming at solving the issue. The static analysis of open-source projects through metrics is the basis of the system designed in the current thesis. The system designed and built in this thesis is to create a reliable and functionally useful process that is capable of predicting the future values of static analysis metrics. This tool essentially attempts to detect patterns of behavior of static metrics for past metrics and predict similar behavior in the future using memory. This is implemented using LSTM and GRU networks as their architecture focuses on holding information in memory for long periods of time. Since software production is growing at an increasingly rapid pace, such a tool will be a key element in a smooth and well-guided source code development path.
4. Ανάπτυξη Συστήματος Πρόβλεψης της εξέλιξης των
Μετρικών Στατικής Ανάλυσης πηγαίου κώδικα
03/04/2023
Περιγραφή του προβλήματος
● Χρονοβόρα και κοστοβόρα διαδικασία αξιολόγησης της ποιότητας
του πηγαίου κώδικα των έργων λογισμικού
● Πολύπλοκα και μεγάλα σε μέγεθος έργα λογισμικού
● Ανάγκη για έλεγχο συντηρησιμότητας από την πλευρά του μηχανικού
αλλά και του πελάτη
● Στενά χρονικά περιθώρια για χρήση στατικών και δυναμικών
αναλύσεων στην ποιότητα του κώδικα
4
5. Ανάπτυξη Συστήματος Πρόβλεψης της εξέλιξης των
Μετρικών Στατικής Ανάλυσης πηγαίου κώδικα
03/04/2023
Σκοπός Διπλωματικής Εργασίας
5
6. Ανάπτυξη Συστήματος Πρόβλεψης της εξέλιξης των
Μετρικών Στατικής Ανάλυσης πηγαίου κώδικα
03/04/2023
Σκοπός Διπλωματικής Εργασίας
● Η πρόβλεψη των μετρικών στατικής ανάλυσης έγκαιρα για τον έλεγχο
της συντηρησιμότητας ενός έργου λογισμικού
● Η εξέταση των δικτύων μακράς βραχυπρόθεσμης μνήμης στην μελέτη
των μετρικών στατικής ανάλυσης του πηγαίου κώδικα σε επίπεδο
κλάσης
6
8. Ανάπτυξη Συστήματος Πρόβλεψης της εξέλιξης των
Μετρικών Στατικής Ανάλυσης πηγαίου κώδικα
03/04/2023
Συλλογή δεδομένων
Repositories: από τα δημοφιλέστερα έργα λογισμικού του GitHub (antlr4,
aws-sdk, grals-core). Εβδομαδιαίες μετρήσεις ανά κλάση για κάθε έργο.
Γλώσσα προγραμματισμού: Java
Κατηγορίες μετρικών στατικής ανάλυσης:
• πολυπλοκότητα (McCC, NL, NLE)
• συνοχή (LCOM5)
• σύζευξη (DIT, NOA, NOC, NOD, NOP)
• κληρονομικότητα (CBO, NII, NOI, RFC)
8
9. Ανάπτυξη Συστήματος Πρόβλεψης της εξέλιξης των
Μετρικών Στατικής Ανάλυσης πηγαίου κώδικα
03/04/2023
Προεπεξεργασία δεδομένων (1)
Ground truth: οι μη συντηρίσιμες κλάσεις που έχουν κάποια στιγμή
εγκαταλειφθεί κατά την διάρκεια ανάπτυξης του έργου
Τάση: ανάλυση ως προς την θετική τους, αρνητική τους και ουδέτερη
τάση στον κύκλο ζωής της κλάσης με σκοπό να κρατηθούν όσες έχουν
τουλάχιστον μια μετρική με θετική τάση
Συνοχή των μετρήσεων
- κλάσεις που περιέχουν τουλάχιστον 40% του κύκλου ζωής
- χρονική μετατόπιση των μετρήσεων
- συμπλήρωση των μετρήσεων σε λογικές περιπτώσεις ελλείψεων
9
10. Ανάπτυξη Συστήματος Πρόβλεψης της εξέλιξης των
Μετρικών Στατικής Ανάλυσης πηγαίου κώδικα
03/04/2023
Προεπεξεργασία δεδομένων (2)
Ομαλοποίηση των απότομων κορυφών: κριτήρια η διάρκεια τους, η
ποσοστιαία αλλαγή και ο βαθμός ομαλότητας
10
11. Ανάπτυξη Συστήματος Πρόβλεψης της εξέλιξης των
Μετρικών Στατικής Ανάλυσης πηγαίου κώδικα
03/04/2023
Υλοποιήσεις (1)
11
Δίκτυο LSTM: περιέχει 4 πύλες (κελί, είσοδος, έξοδος, συγκράτησης
μνήμης) που αλληλεπιδρούν μεταξύ τους. Σχεδιάστηκε αρχικά η
παρακάτω εκδοχή:
- vanilla LSTM (1 LSTM επίπεδο)
- πλήθος νευρώνων ως αρχική παράμετρος
- συνάρτηση απωλειών την RMSE, βελτιστοποιητής Adam
- early stopping συνθήκη
12. Ανάπτυξη Συστήματος Πρόβλεψης της εξέλιξης των
Μετρικών Στατικής Ανάλυσης πηγαίου κώδικα
03/04/2023
Υλοποιήσεις (2)
12
Δίκτυο LSTM: σχεδιάστηκαν 2 επιπλέον νέες εκδοχές των δικτύων LSTM
με στόχο την καλύτερη αξιοποίηση της μνήμης:
- LSTM με μνήμη μεταξύ των παρτίδων (1 LSTM επίπεδο)
- χρήση της παραμέτρου stateful = True για διατήρηση της μνήμης κατά την
εκπαίδευση
- LSTM με στοίβες μνήμης μεταξύ των παρτίδων (2 LSTM επίπεδα, 1
dropout επίπεδο)
- χρήση της παραμέτρου return_sequences = True για διατήρηση της μνήμης κατά
την εκπαίδευση μεταξύ των επιπέδων
- χρήση της μεθόδου model.reset_states() για την επαναφορά των πυλών την
σωστή στιγμή κατά την εκπαίδευση
- επίπεδο dropout με τιμή 0.2 για πρόληψη υπερ προσαρμογής στα δεδομένα
εκπαίδευσης
13. Ανάπτυξη Συστήματος Πρόβλεψης της εξέλιξης των
Μετρικών Στατικής Ανάλυσης πηγαίου κώδικα
03/04/2023
Υλοποιήσεις (3)
13
Δίκτυο GRU: περιέχει 3 πύλες (κελί, ενημέρωση, επαναφορά) καθώς η
πύλη εισόδου και μνήμης συγχωνεύονται. Σχεδιάστηκε η παρακάτω
εκδοχή ως εναλλακτική προσέγγιση τους προβλήματος.
- 1 GRU επίπεδο
14. Ανάπτυξη Συστήματος Πρόβλεψης της εξέλιξης των
Μετρικών Στατικής Ανάλυσης πηγαίου κώδικα
03/04/2023
Βελτιστοποιήσεις (1)
● Για κάθε υλοποίηση έγινε παραμετρική ανάλυση για το πλήθος των
νευρώνων στα επίπεδα τους μέσα από τις τιμές [4, 8, 16, 32, 64, 128]
● Αξιολόγηση αποτελεσμάτων με βάση την απόσταση των προβλέψεων
από τις πραγματικές τιμές (RMSE)
● Εφαρμογή τεχνικής παραθύρου με χρήση της παραμέτρου εισόδου
○ πλήθος μετρήσεων που δίνεται στο σύστημα ως είσοδος και πάνω σε αυτή
προσπαθεί να “μάθει” μοτίβα κατά την εκπαίδευση
○ ίδιο πλήθος μετρήσεων ως είσοδος για να γίνουν οι ζητούμενες προβλέψεις
● Διαχωρισμός δεδομένων (δεδομένα εκπαίδευσης, εισόδου και
αξιολόγησης)
14
15. Ανάπτυξη Συστήματος Πρόβλεψης της εξέλιξης των
Μετρικών Στατικής Ανάλυσης πηγαίου κώδικα
03/04/2023
Βελτιστοποιήσεις (2)
15
16. Ανάπτυξη Συστήματος Πρόβλεψης της εξέλιξης των
Μετρικών Στατικής Ανάλυσης πηγαίου κώδικα
03/04/2023
Βελτιστοποιήσεις (3)
16
Πλήθος νευρώνων 4 8 16 32 64 128
RMSE LSTM_v1 20.08 14.87 8.32 14.51 15.61 16.8
RMSE LSTM_v2 12.2 18.0 4.58 11.2 15.5 9.2
RMSE LSTM_v3 16.94 21.04 28.02 9.28 18.38 14.4
RMSE GRU 9.1 11.61 5.79 28.4 7.05 18.89
● Επιλογή νευρώνων στις υλοποιήσεις με βάση 100 πειράματα
πειράματα για παράμετρο το πλήθος νευρώνων
● Το πλήθος με την καλύτερη επίδοση επιλέχθηκε για χρήση στα
επόμενα πειράματα
17. Ανάπτυξη Συστήματος Πρόβλεψης της εξέλιξης των
Μετρικών Στατικής Ανάλυσης πηγαίου κώδικα
03/04/2023
Αποτελέσματα & Αξιολόγηση
17
18. Ανάπτυξη Συστήματος Πρόβλεψης της εξέλιξης των
Μετρικών Στατικής Ανάλυσης πηγαίου κώδικα
03/04/2023
Πειράματα για την παράμετρο εισόδου (1)
● Παραμετρική ανάλυση για την καταλληλότερη τιμή της παραμέτρου
εισόδου του συστήματος στο εύρος [1, 5, 10, 20, 30, 40] ως ποσοστά
από το πλήθος των μετρήσεων για την κλάση
● Μέση τιμή RMSE για 100 πειράματα με χρήση της LSTM_v3
18
look back % 1 5 10 20 30 40
RMSE 16.94 21.04 28.02 13.28 18.38 4.4
19. Ανάπτυξη Συστήματος Πρόβλεψης της εξέλιξης των
Μετρικών Στατικής Ανάλυσης πηγαίου κώδικα
03/04/2023
Πειράματα για την παράμετρο εισόδου (2)
19
20. Ανάπτυξη Συστήματος Πρόβλεψης της εξέλιξης των
Μετρικών Στατικής Ανάλυσης πηγαίου κώδικα
03/04/2023
Συγκριτικά αποτελέσματα
20
Μοντέλο
%
εκπαίδευσης % look back Μέση RMSE Χρ. Εκπαίδευσης (sec)
LSTM_v1
40
10 1.945 29.372
15 2.579 34.201
20 2.35 35.116
50
10 2.151 30.83
15 2.056 41.133
20 2.158 52.41
LSTM_v2
40
10 1.912 38.998
15 2.322 44.685
20 2.322 44.685
50
10 1.831 67.7
15 1.827 43.107
20 1.891 50.546
LSTM_v3
40
10 2.043 48.229
15 2.131 59.78
20 1.708 73.558
50
10 1.78 52.195
15 1.822 68.52
20 1.678 70.433
GRU
40
10 2.645 30.608
15 2.014 38.024
20 2.389 46.59
50
10 2.492 62.611
15 2.009 43.555
20 2.967 55.854
● Σύγκριση όλων των υλοποιήσεων
● Εύρος για δεδομένα εκπαίδευσης
[40, 50]
● Εύρος για δεδομένα παραμέτρου
look back [10, 15, 20]
● Συνολικά 100 πειράματα για το
καθένα
● Αξιολόγηση
○ Μέση RMSE
○ Χρόνος Εκπαίδευσης του δικτύου
21. Ανάπτυξη Συστήματος Πρόβλεψης της εξέλιξης των
Μετρικών Στατικής Ανάλυσης πηγαίου κώδικα
03/04/2023
Ενδεικτικό παράδειγμα LSTM_v3
21
Παράδειγμα της LSTM_v3 για την πρόβλεψη σύζευξης και
κληρονομικότητας δύο κλάσεων
23. Ανάπτυξη Συστήματος Πρόβλεψης της εξέλιξης των
Μετρικών Στατικής Ανάλυσης πηγαίου κώδικα
03/04/2023
Συμπεράσματα
● Η καλύτερη υλοποίηση που εκμεταλλεύεται στον μεγαλύτερο βαθμό
την συγκράτηση μνήμης είναι η LSTM_v3
● Η υλοποίηση της GRU δεν πλεονεκτεί έναντι των LSTM γεγονός που
οφείλεται στην μια λιγότερη πύλη
● Η παράμετρος με την μεγαλύτερη επιρροή είναι η look back
● Ικανοποιητικές προβλέψεις μετρικών στατικής ανάλυσης σε ποσοστό
50% του κύκλου ζωής της κλάσης
23
24. Ανάπτυξη Συστήματος Πρόβλεψης της εξέλιξης των
Μετρικών Στατικής Ανάλυσης πηγαίου κώδικα
03/04/2023
Μελλοντικές Επεκτάσεις
24
25. Ανάπτυξη Συστήματος Πρόβλεψης της εξέλιξης των
Μετρικών Στατικής Ανάλυσης πηγαίου κώδικα
03/04/2023
Μελλοντικές Επεκτάσεις
● Πειράματα σε έργα που υλοποιούνται με άλλες γλώσσες
προγραμματισμού
● Μελέτη αυτόματης εφαρμογής σε αποθετήρια όπως το GitHub για να
γίνεται ανά τακτά χρονικά διαστήματα έλεγχος
● Συνεχής βελτιστοποίηση τμημάτων του συστήματος όπως τα επίπεδα,
οι βελτιστοποιητές κτλ.
25
26. Ανάπτυξη Συστήματος Πρόβλεψης της εξέλιξης των
Μετρικών Στατικής Ανάλυσης πηγαίου κώδικα
03/04/2023
Ευχαριστώ για την προσοχή σας
26