1. ΤΜΗΜΑ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ & ΜΗΧΑΝΙΚΩΝ
ΥΠΟΛΟΓΙΣΤΩΝ
ΤΟΜΕΑΣ ΗΛΕΚΤΡΟΝΙΚΗΣ & ΥΠΟΛΟΓΙΣΤΩΝ
ΕΡΓΑΣΤΗΡΙΟ ΕΠΕΞΕΡΓΑΣΙΑΣ ΠΛΗΡΟΦΟΡΙΑΣ ΚΑΙ
ΥΠΟΛΟΓΙΣΜΩΝ
Ανάλυση ποιότητας πηγαίου κώδικα σε
πολύ-γλωσσικά έργα λογισμικού
1
Φεγγομύτης Θωμάς
ΑΕΜ: 8003
Υπό την επίβλεψη του Αναπληρωτή Καθηγητή
κ. Συμεωνίδη Ανδρέα
Και του υποψηφίου διδάκτορα
κ. Παπαμιχαήλ Μιχαήλ
issel
2. Στη σύγχρονη εποχή
Διαδικασία ανάπτυξης λογισμικού
Επαναχρησιμοποίηση τμημάτων κώδικα
Ανάγκη αξιολόγησης της ποιότητας
Αυξανόμενες απαιτήσεις χρηστών
Πολύ-γλωσσικά έργα λογισμικού
Αύξηση πολυπλοκότητας αξιολόγησης
2
3. Κίνητρο
Υπάρχουσες πρακτικές αξιολόγησης
Ταύτιση έννοιας έργο λογισμικού με γλώσσα
υλοποίησης
Εργαλεία στατικής ανάλυσης
Αξιολόγηση ως προς μία γλώσσα
προγραμματισμού
3
5. Μεθοδολογία
Εφαρμογή στατικής ανάλυσης
Ανάλυση προγράμματος χωρίς την εκτέλεσή του
Μελέτη διαφοροποιήσεων των μετρικών
Proof of Concept
Python-Java projects
SourceMeter
5
Αρχείο CSV που παράγεται
από το SourceMeter και
περιέχει τις μετρικές
στατικής ανάλυσης για
κάθε κλάση του έργου
λογισμικού
8. Downloader
Χρήση API του GitHub για τη δημιουργία του Dataset μέσω της λήψης των 100
δημοφιλέστερων projects αναπτυγμένα σε Python και Java
80%
10%
20%
30%
40%
50%
60%
70%
80%
90%
100%
TLLOC (Package Level)
JAVA PYTHON
9. Parser
1. Εύρεση κλήσεων:
Jython
Py4J
9
from [ Java_Class Package ] import [ Java_Class ]
Αρχείο CSV που περιλαμβάνει
τις κλήσεις μεταξύ κλάσεων
“gateway.jvm.py4j”
11. Final Evaluator*
Μετρικές για τον
υπολογισμό του
Score:
11
Όνομα Μετρικής Συντομογραφία Κατηγορία Μετρικής
Weighted Methods per Class WMC Complexity
McCabe’s Cyclomatic Complexity McCC Complexity
Nesting Level NL Complexity
Number of Incoming Invocations NII Coupling
Response set For Class RFC Coupling
Coupling Between Object classes CBO Coupling
Total Comment Density TCD Documentation
Documentation Lines of Code DLOC Documentation
Total Comment Lines of Code TCLOC Documentation
Depth of Inheritance Tree DIT Inheritance
Number of Children NOC Inheritance
Number of Parameters NUMPAR Size
Total Number of Getters TNG Size
Total Number of Attributes TNA Size
Number of Public Attributes NPA Size
Total Logical Lines of Code TLLOC Size
Total Number of Local Setters TNLS Size
* "Assessing the User-Perceived Quality
of Source Code Components using
Static Analysis Metrics” published by
Valasia Dimaridou, Alexandros-
Charalampos Kyprianidis, Michail
Papamichail, Themistoklis
Diamantopoulos and Andreas
Symeonidis
17. Σύγκριση Μεταβολών – 3ο Πείραμα
Στα δύο έργα λογισμικού:
Αύξηση πολυπλοκότητας και
σύζευξης (μείωση score)
Αύξηση βαθμού ποιότητας στις
υπόλοιπες κατηγορίες 17
Στο project bartdag:
Συνολική βελτίωση του
βαθμού ποιότητας
Όλες οι κατηγορίες
εμφανίζουν ποσοστιαία
αύξηση
18. Συμπεράσματα
Το σύστημα είναι ικανό να:
Εντοπίζει τις κλήσεις μεταξύ κλάσεων της Python και
Java
Τροποποιεί αξιόπιστα τις στατικές μετρικές
λαμβάνοντας υπόψιν τις προαναφερθείσες κλήσεις
Παρέχει συνολική και αντιπροσωπευτική αξιολόγηση
ποιότητας σε ένα πολύ-γλωσσικό έργο λογισμικού
18
19. Ανοικτά Θέματα
Εφαρμογή για άλλες γλώσσες προγραμματισμού
Εφαρμογή για επιπλέον τρόπους cross-language links
Μελέτη περισσότερων έργων λογισμικού στη
μοντελοποίηση
Επέκταση σε περισσότερα επίπεδα (πακέτο, μέθοδος)
19
Όπου η εξέλιξη της - θεωρείται δεδομένη
Κυρίαρχο ρόλο έχει η επαναχρησιμοποίηση τμημάτων για την εξοικονόμηση χρόνου και χρήματος από την πλευρά του προγραμματιστή
Έτσι λοιπόν δημιουργείται η – για την ταξινόμηση των υποψήφιων προς χρήση τμημάτων κώδικα
Ακόμα οι αυξανόμενες - έχουν οδηγήσει στην εμφάνιση
Βέλτιστη αξιοποίηση των δυνατοτήτων της εκάστοτε γλώσσας
Γεγονός που οδηγεί στην επιπλέον
Παρατηρήθηκε ότι οι – ταυτίζουν την έννοια
Έτσι - εφαρμόζουν
Στόχος της παρούσας διπλωματικής εργασίας είναι η – που θα
Η υλοποίηση του συστήματος βασίζεται στην – δηλαδή
Ώστε να μελετηθούν οι διαφ
Όταν συνυπολογίζονται οι κλήσεις μεταξύ των κλάσεων διαφορετικών γλωσσών
Θα επιχειρήσουμε να επαληθεύσουμε τους ισχυρισμούς μας σε πολύ-γλωσσικά έργα
Να σημειωθεί ότι υπάρχουν πολλοί συνδυασμοί γλωσσών στα πολύ-γλ, αναλύσαμε τον πιο διαδεδομένο συνδυασμό
Το βασικό εργαλείο στατικής ανάλυσης που θα χρησιμοποιήσουμε
Διαθέσιμο για πολλές γλώσσες προγραμματισμού
Ας μελετήσουμε το παρακάτω παράδειγμα για την ορθότερη κατανόηση του προβλήματος
Κυκλωματική πολυπλοκότητα σύμφωνα με τη στατική ανάλυση
Η μέθοδος περιέχεται σε αρχείο πηγαίου κώδικα ανεπτυγμένου σε Python
Στην πραγματική CC θα έπρεπε να έχει αθροιστεί η CC της getUTFValue
Λήψη των έργων λογισμικού
Προωθούνται – Εισέρχονται – Δίνονται ως είσοδος
Παραγωγή των μετρικών στατικής ανάλυσης
Εύρεση κλήσεων μεταξύ των γλωσσών προγραμματισμού & τροποποίηση των στατικών μετρικών
Αποτιμά τις τροποποιημένες στατικές μετρικές με την έννοια του υπολογισμού ενός τελικού score ποιότητας για κάθε κλάση
Ας μελετήσουμε ορισμένα σημαντικά χαρακτηριστικά των υποσυστημάτων του συστήματός μας ξεκινώντας από τον
Έτσι, στο παρακάτω διάγραμμα παρουσιάζεται για κάθε project του Dataset το ποσοστό των γραμμών του πηγαίου κώδικα που είναι γραμμένο σε Java & Python αντίστοιχα
Παρατηρούμε κυριαρχία της Java.
Τα έργα αποτελούνται από μερικές εκατοντάδες γραμμές κώδικα έως και αρκετές χιλιάδες
TLLOC: Συνολικές λογικές γραμμές κώδικα (ο αριθμός των μη-κενών και μη-σχολιασμένων γραμμών κώδικα του πακέτου)
Συνεχίζοντας ο Parser αποτελεί το σημαντικότερο κομμάτι του συστήματος, υπεύθυνος για 2 λειτουργίες
Προφανώς υπάρχουν πολλοί τρόποι κλήσης μίας άλλης γλώσσας όμως στα πλαίσια της αυτοματοποίησης εστιάσαμε στους πιο διαδεδομένους
Παρατηρήθηκε ότι στην πλειοψηφία των περιπτώσεων οι κλήσεις γινόταν από Python προς Java με δύο τρόπους
Εγκατεστημένη στο σύστημα του developer
Έτσι λοιπόν καταγράφει σε ένα CSV αρχείο τις κλήσεις ώστε να γίνουν εκμεταλλεύσιμες από το υπόλοιπο σύστημα
Η 2η λειτουργία του
Ο παραπάνω πίνακας απαριθμεί τις στατικές μετρικές που χρησιμοποιεί το σύστημά μας καθώς και το επίπεδο στο οποίο ορίζονται
Είναι υπεύθυνος για την αναγωγή όλων αυτών των μετρικών στο επίπεδο της κλάσης και για την κατάλληλη τροποποίησή τους σύμφωνα με τις δοθείσες κλήσεις
Για παράδειγμα η μετρική
Σύστημα που αναπτύχθηκε από τον κ. Συμεωνίδη και την ομάδα του
Το οποίο με βάση αυτές τις μετρικές, που χωρίζονται σε 5 κατηγορίες, υπολογίζει ένα score ποιότητας
Αναλυτικότερα υπολογίζει και καταγράφει τους βαθμούς ποιότητας που σχετίζονται με την
Η καταγραφή των τιμών των μετρικών (τροποποιημένων και μη) και των score ανά κατηγορία γίνεται σε ένα αρχείο TXT
Βαθμός επαρκούς σχολιασμού
Τα επιμέρους scores υπολογίζονται με βάση τις μετρικές και έχουν δενδρική δομή, για παράδειγμα
Weighted Methods per Class , Nesting Level , βάρος συμμετοχή τελικό δείκτη
Για την δοκιμή του συστήματός μας διενεργήθηκαν 3 πειράματα με πρώτο αυτό της
Τα πρώτα 2 πειράματα διενεργήθηκαν στο project με τις περισσότερες κλήσεις μεταξύ των γλωσσών προγραμματισμού
Εφαρμόζοντας το σύστημα στο project που επιλέξαμε μελετήσαμε τη μεταβολή των στατικών μετρικών και συγκεκριμένα το διάγραμμα παρουσιάζει τη McCC.
Με την μπλε μπάρα δείχνει την τιμή της μετρικής πριν την εφαρμογή του συστήματος και την πορτοκαλί μετά την εφαρμογή
Οι υπόλοιπες μετρικές παρουσιάζονται αναλυτικά στην έντυπη μορφή
Έπειτα στο 2ο πείραμα παρουσιάζουμε τη μεταβολή του βαθμού ποιότητας της πολυπλοκότητας
Αντίστοιχα παρουσιάζουμε τις μεταβολές των υπολοίπων βαθμών ποιότητας ξεκινώντας από τον βαθμό σύζευξης στον οποίον παρατηρείται ποσοστιαία
Η μεγάλη αύξηση οφείλεται όπως είδαμε και σε προηγούμενη διαφάνεια στις πολύ περισσότερες γραμμές κώδικα της Java σε σχέση με αυτές της Python
Το 3ο πείραμα επικεντρώθηκε στη σύγκριση των μεταβολών μεταξύ των 3 έργων λογισμικών με τις περισσότερες κλήσεις μεταξύ των γλωσσών
Το πείραμα λοιπόν αποδεικνύει ότι ο βαθμός της αξιολόγησης διαφέρει όταν δεν λαμβάνεται υπόψιν η πολύγλωσσικότητα του έργου και ότι δεν μπορούμε να εξάγουμε ένα γενικό συμπέρασμα για όλα τα πολύ-γλωσσικά έργα λογισμικού καθώς η μεταβολή των μετρικών τους εξαρτάται από το κάθε έργο ξεχωριστά
Τέλος, τα Size & Doc Scores είναι μικρότερης σημασίας από τα υπόλοιπα έτσι οι μεγάλες μεταβολές τους δεν επηρεάζουν σε μεγάλο βαθμό την ποιότητα του συστήματος
Έτσι λοιπόν μπορούμε να συμπεράνουμε ότι
Μπορεί να γίνει χρήσιμο στον προγραμματιστή
Φυσικά υπάρχουν περιθώρια βελτίωσης του συστήματος
Κάποιες ιδέες για μελλοντική ανάπτυξη μπορεί να είναι η