Graph-based software evolution analysis of object-oriented systems

Τα σύγχρονα αντικειμενοστρεφή συστήματα λογισμικού εξελίσσονται συνεχώς, οδηγούμενα από τις συνεχείς ανάγκες, αφενός για προσθήκη νέων λειτουργικών χαρακτηριστικών και αφετέρου για διόρθωση σφαλμάτων. Η διάρκεια και το κόστος αυτής της διαδικασίας καθιστούν επιτακτική την ανάπτυξη ευέλικτων συστημάτων λογισμικού, τα οποία δύνανται να προσαρμόζονται σε αλλαγές εύκολα και γρήγορα. Γι’ αυτόν τον σκοπό, η συντηρησιμότητα των συστημάτων μπορεί να βελτιωθεί με την χρήση ιστορικών δεδομένων με σκοπό την ανάλυση της μέχρι σήμερα εξέλιξής τους. Σε αυτό το πλαίσιο, εμπνεόμενη από τις εφαρμογές των γράφων σε διάφορα πεδία, η παρούσα διατριβή προτείνει ένα σύνολο από τεχνικές και μεθοδολογίες βασισμένες σε γράφους. Οι τεχνικές αυτές εφαρμόζονται σε διάφορες φάσεις του κύκλου ζωής λογισμικού, έχοντας πάντα σαν απώτερο στόχο την ανάλυση της ιστορικής εξέλιξης και όχι κάποιας συγκεκριμένης χρονικής αποτύπωσης. Μια θεμελιώδης διαδικασία στην ανάπτυξη αντικειμενοστρεφούς λογισμικού, η οποία καθορίζει όχι μόνο την δομή των μονάδων λογισμικού αλλά και το επίπεδο της μελλοντικής συντηρησιμότητας, είναι η διαδικασία κατανομής του κώδικα που υλοποιεί τις λειτουργικές απαιτήσεις στις υπό-μονάδες λογισμικού. Έχοντας ως στόχο την καλύτερη κατανόηση αυτής της διαδικασίας, προτείνουμε μια σειρά από εργαλεία και απεικονίσεις για την ανάλυση της εξέλιξης του τρόπου υλοποίησης των λειτουργικών απαιτήσεων. Η ανάλυση περιλαμβάνει την ανίχνευση των κλάσεων και των μεθόδων που παίρνουν μέρος στην υλοποίηση κάθε λειτουργικής απαίτησης. Οι προτεινόμενες μέθοδοι ανάλυσης εφαρμόσθηκαν σε τέσσερα συστήματα λογισμικού ανοικτού κώδικα και σε γενιές που κάλυπταν όλη τη διάρκεια ζωής τους. Σύμφωνα με τα αποτελέσματα, οι προτεινόμενες τεχνικές είναι ελπιδοφόρες, καθώς επιτρέπουν στην ομάδα διαχείρισης λογισμικού να εκτιμήσει με εύκολο τρόπο την εξέλιξη του τρόπου υλοποίησης κάθε λειτουργικής απαίτησης, καθώς και τις μονάδες λογισμικού στις οποίες ‘εξαπλώνεται’. Επιπροσθέτως, στην παρούσα διατριβή προτείνεται ένα μοντέλο πρόβλεψης της εξέλιξης λογισμικού συστημάτων σε γλώσσα Java. Το μοντέλο δημιουργείται αναλύοντας την ιστορία της εξέλιξης του κάθε έργου και ενσωματώνει συγκεκριμένα χαρακτηριστικά όπως αυτό της επιλεκτικής προσκόλλησης νέων κόμβων, το μοντέλο αναπαραγωγής με πανομοιότυπο τρόπο, την ηλικία των κλάσεων και τις διαγραφές ακμών. Επίσης, αναγνωρίζοντας το γεγονός πως μια προσπάθεια αποτύπωσης του τρόπου εξέλιξης του λογισμικού δεν μπορεί να αγνοεί κανόνες και αρχές που διέπουν την ανάπτυξή του, το προτεινόμενο μοντέλο, για πρώτη φορά ενσωματώνει συγκεκριμένες αρχές σχεδίασης οι οποίες θα πρέπει να ακολουθούνται κατά τη διάρκεια προσομοίωσης της εξέλιξης. Η αξιολόγηση του μοντέλου έγινε σε δέκα συστήματα λογισμικού ανοικτού κώδικα και κατέδειξε την δύναμή του, η οποία του επιτρέπει να προβλέπει με σημαντική ακρίβεια τη δομή συστημάτων λογισμικού στο εγγύς μέλλον. Ο τομέας της συντήρησης λογισμικού μπορεί να επωφεληθεί από τη χρήση ενός μοντέλου σαν το προτεινόμενο, καθώς μπορεί να επικεντρώσει ή και να εντείνει τις προσπάθειες συντήρησης σε τμήματα του λογισμικού στα οποία υπάρχουν ενδείξεις μεταβολής επί το χείρον. Τέλος, αναγνωρίζοντας την έλλειψη ενός εύκολου στη χρήση εργαλείου για εξελικτική ανάλυση λογισμικού, υλοποιήθηκε μια πλατφόρμα για την απρόσκοπτη ανάλυση της εξέλιξης αντικειμενοστρεφών συστημάτων γραμμένων στην γλώσσα Java. Η πλατφόρμα με όνομα SEAgle είναι προσβάσιμη από οποιαδήποτε συσκευή μέσω του διαδικτύου και επιτρέπει στους χρήστες της ανάλυση οποιουδήποτε δημόσιου αποθετηρίου λογισμικού ανοικτού κώδικα. To SEAgle υπολογίζει και προσφέρει μέσω δημόσιας διεπαφής προγραμματισμού εφαρμογών μια πληθώρα μετρικών από τρεις κατηγορίες: γράφου, πηγαίου κώδικα και δραστηριότητας αποθετηρίου.