Στις μέρες μας, ο ρυθμός ανάπτυξης της τεχνολογίας και η αδιάλειπτη χρήση του διαδικτύου έχουν ως αποτέλεσμα την εξέλιξη της διαδικασίας ανάπτυξης λογισμικού με ταχύτατους ρυθμούς. Στα πολυάριθμα έργα που υλοποιούνται συνεχώς, αυτό που προβληματίζει όλο και περισσότερο τους ειδικούς στον τομέα, είναι η ομαλή ανάπτυξη του πηγαίου κώδικα γύρω από ένα πλήθος κριτηρίων που ορίζουν την ποιότητά του. Αυτό το πρόβλημα διογκώνεται κυρίως όταν υπάρχουν διλήμματα επαναχρησιμοποίησης τμημάτων κώδικα και προκύπτουν ενδοιασμοί για τη σωστότερη επιλογή. Επομένως, τέτοιου είδους θέματα καθιστούν αναγκαία την αξιολόγηση της ποιότητας τμημάτων κώδικα που είναι υποψήφια για επαναχρησιμοποίηση βάση της συντηρησιμότητάς τους. Η διαδικασία αξιολόγησης της ποιότητας του πηγαίου κώδικα ενός έργου λογισμικού αποτελεί μια χρονοβόρα και κοστοβόρα λειτουργία, καθώς περιέχει υψηλό βαθμό περιπλοκότητας ανάλογα με τις γλώσσες που περιλαμβάνει το έργο αλλά και την έκταση του. Παράλληλα, η συμβολή πολλών και διαφορετικών προγραμματιστών στην ανάπτυξη του έργου, αποτελεί καθοριστικό παράγοντα στην αύξηση των δυσκολιών σωστής αξιολόγησης. Καθώς το έργο αναπτύσσεται, η ανάγκη για έλεγχο συντηρησιμότητας τόσο από την πλευρά του μηχανικού όσο και από την πλευρά του πελάτη γίνεται πρωταρχικός σκοπός. Συνεπώς, τέτοια ζητήματα απαιτούν τεχνικές και εργαλεία που θα λαμβάνουν υπόψιν πλήθος παραμέτρων με στόχο την αυστηρή και λογική αξιολόγηση της ποιότητας ενός έργου ως προς την συντηρησιμότητα του. Μια από τις επικρατέστερες τεχνικές είναι η ανάλυση του πηγαίου κώδικα με χρήση μετρικών που αξιολογούν με αυστηρά κριτήρια τα χαρακτηριστικά του έργου λογισμικού. Πάνω σε αυτό βασίστηκε και η παρούσα διπλωματική, καθώς εστιάζει στη στατική ανάλυση πηγαίου κώδικα και σε μεθόδους που θα συμβάλλουν στην αξιολόγηση της ποιότητας λογισμικού μέσω αυτών. Αυτό γίνεται εφόσον υπάρχει διαθεσιμότητα έργων ανοιχτού κώδικα τα οποία βρίσκονται διαθέσιμα σε αποθετήρια όπως το GitHub και μπορούν να αξιοποιηθούν για τη δημιουργία εργαλείων που στοχεύουν στην επίλυση του ζητήματος. Η στατική ανάλυση έργων ανοιχτού κώδικα μέσω μετρικών αποτελεί την βάση δεδομένων του συστήματος της παρούσας διπλωματικής. Σκοπός του συστήματος που ερευνούμε σε αυτή την διπλωματική είναι η δημιουργία μιας αξιόπιστης και λειτουργικά χρήσιμης διαδικασίας που θα είναι ικανή να προβλέπει τις μελλοντικές τιμές των μετρικών στατικής ανάλυσης. Αυτό το εργαλείο ουσιαστικά προσπαθεί να ανιχνεύσει μοτίβα συμπεριφοράς των στατικών μετρικών για μετρήσεις του παρελθόντος και να προβλέπει όμοιες συμπεριφορές στο μέλλον με χρήση της μνήμης. Η υλοποίηση αυτή γίνεται με δίκτυα LSTM και GRU καθώς η αρχιτεκτονική τους εστιάζει στην συγκράτηση πληροφοριών στη μνήμη για μεγάλα χρονικά διαστήματα. Από την στιγμή που η παραγωγή λογισμικού αυξάνεται με όλο και πιο ραγδαίους ρυθμούς, ένα τέτοιο εργαλείο θα αποτελέσει βασικό στοιχείο στην ομαλή και σωστά καθοδηγούμενη πορεία ανάπτυξης του πηγαίου κώδικα.
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