Η παρούσα διδακτορική διατριβή επικεντρώνεται σε μεθόδους διευκόλυνσης της επαναχρησιμοποίησης πηγαίου κώδικα. Πιο συγκεκριμένα, διερευνά μεθόδους ανάκτησης αρχιτεκτονικής και δομικής πληροφορίας ώστε να είναι εφικτή η κατανόηση του πηγαίου κώδικα από τεχνολόγους λογισμικού με απώτερο στόχο την επαναχρησιμοποίηση λογισμικού. Η επαναχρησιμοποίηση λογισμικού είναι η ενσωμάτωση βιβλιοθηκών ή συστημάτων σε συστήματα που βρίσκονται υπό ανάπτυξη και είναι διαφορετικά από τα συστήματα για τα οποία υλοποιήθηκαν. Η επαναχρησιμοποίηση λογισμικού έχει καθιερωθεί ως συνήθης πρακτική στην ανάπτυξη λογισμικού, δεδομένου ότι τα οφέλη που προσφέρει περιλαμβάνουν τη μειωμένη προσπάθεια ανάπτυξης και την αυξημένη παραγωγικότητα. Τα αποθετήρια Ελεύθερου Λογισμικού/Λογισμικού Ανοιχτού Κώδικα (ΕΛΛΑΚ) συνεισφέρουν θετικά στην επαναχρησιμοποίηση λογισμικού καθώς είναι ελεύθερα διαθέσιμος ο πηγαίος κώδικας. Επίσης, η μεγάλη διαθεσιμότητα έργων ΕΛΛΑΚ στα αποθετήρια συνεισφέρει θετικά στην πρακτική της επαναχρησιμοποίησης. Ενώ τα οφέλη της επαναχρησιμοποίησης λογισμικού είναι σημαντικά, η επιτυχής επαναχρησιμοποίηση λογισμικού δεν είναι βέβαιη. Είναι σύνηθες φαινόμενο σε κατηγορίες έργων, όπως τα ΕΛΛΑΚ, να μην παρέχεται τεχνική ή αρχιτεκτονική τεκμηρίωση. Συνεπώς, η κατανόηση τους έγκειται στον πηγαίο κώδικα. Η εξαγωγή πληροφορίας και κατανόηση του πηγαίου κώδικα μπορεί να αποβεί σε δύσκολη και χρονοβόρα διεργασία, ειδικά σε περιπτώσεις μεγάλων και πολύπλοκων έργων λογισμικού.Τα προαναφερθέντα ζητήματα αποτέλεσαν το κίνητρο για αυτή τη διατριβή και οι συνεισφορές της διατριβής είναι οι ακόλουθες: Αρχικά, διερευνήθηκε κατά πόσον οι δομικές ιδιότητες των κλάσεων συσχετίζονται με τη συμμετοχή τους σε αρχιτεκτονικά επίπεδα. Χρησιμοποιήθηκαν τεχνικές γράφων για την προσέγγιση των αρχιτεκτονικών επιπέδων και μέσω κανόνων συσχέτισης, εξετάστηκε εάν μπορούν να χρησιμοποιηθούν οι δομικές μετρικές για την ανάθεση των κλάσεων σε προσεγγιστικά αρχιτεκτονικά επίπεδα. Στη συνέχεια, προτάθηκε μια μετρική εκτίμησης της επαναχρησιμοποιησιμότητας των κλάσεων βάσει συμμετοχής τους σε αρχιτεκτονικά επίπεδα. Στόχος ήταν ο γρήγορος και ακριβής υπολογισμός της επαναχρησιμοποιησιμότητας του κάθε στοιχείου ενός συστήματος, δεδομένου ότι τα στοιχεία που ανήκουν σε χαμηλότερα αρχιτεκτονικά επίπεδα είναι πιο εύκολα επαναχρησιμοποιήσιμα σε σύγκριση με στοιχεία σε υψηλότερα επίπεδα. Στη συνέχεια, προτάθηκε μια αυτόματη μεθοδολογία για την απαλοιφή θορύβου κατά την ανάλυση συστημάτων λογισμικού ώστε να βελτιωθεί η κατάτμηση των συστημάτων σε υποσυστήματα. Η μεθοδολογία είχε ως στόχο την αναγνώριση εκείνων κλάσεων στο σύστημα, οι οποίες εισάγουν θόρυβο στις τεχνικές ανάκτησης της αρχιτεκτονικής. Η μεθοδολογία βασίζεται στην ανάλυση τόσο του γράφου που προκύπτει από ένα σύστημα λογισμικού, όσο και των πιθανών υπογράφων που μπορούν να προκύψουν από το σύστημα. Το τελικό αποτέλεσμα ήταν η εύρεση των κλάσεων/κόμβων στο σύστημα που εάν αφαιρεθούν, βελτιώνουν σημαντικά τις υπάρχουσες τεχνικές αρχιτεκτονικής ανάλυσης των συστημάτων. Στη συνέχεια προτάθηκε μια μέθοδος ανάκτησης της αρχιτεκτονικής των συστημάτων η οποία ξεπερνάει ορισμένα από τα προβλήματα που αντιμετωπίζουν οι τεχνικές που έχουν προταθεί μέχρι πρότινος. Η μέθοδος βασίζεται στο συνδυασμό διαφορετικών πηγών πληροφορίας και σε σύγχρονους αλγόριθμους ομαδοποίησης. Η προτεινόμενη μέθοδος βελτιώνει τα αποτελέσματα καθώς παρουσιάζει σταθερή ακρίβεια για διαφορετικά συστήματα, το οποίο είναι ένα σημαντικό πρόβλημα για τις υπάρχουσες τεχνικές.Σε επόμενο βήμα προτάθηκε μια ημι-αυτόματη διεργασία με στόχο την κατανόηση της δομή υποψήφιων συστατικών από έργα με πολύπλοκη δομή λόγω κυκλικών εξαρτήσεων. Στόχος της διεργασίας είναι η μείωση του μεγέθους των επαναχρησιμοποιήσιμων συστατικών λογισμικού, χωρίς να επηρεάζεται η επιθυμητή λειτουργικότητα τους. Στο πλαίσιο της διεργασίας, προτάθηκε μια μέθοδος εύρεσης κομβικών κλάσεων στο συστατικό, οι οποίες ευθύνονται για τη μεγάλη αύξηση του μεγέθους του συστατικού. Η μέθοδος προτείνει και μοντελοποιεί το μετασχηματισμό των συσχετίσεων των κομβικών κλάσεων ώστε να απλοποιηθούν οι συσχετίσεις των κλάσεων που συμμετέχουν στο υποψήφιο συστατικό και να είναι εφικτή η κατανόηση και επαναχρησιμοποίηση του. Στη συνέχεια διερευνήθηκε η συχνότητα και ένταση της εμφάνισης πρακτικών επαναχρησιμοποίησης σε μεγάλο δείγμα από έργα ΕΛΛΑΚ, καθώς και η μεταβολή των αποφάσεων επαναχρησιμοποίησης κατά την εξέλιξη των έργων. Στόχος ήταν η συλλογή στοιχείων της πραγματικής προσπάθειας που απαιτείται για την επαναχρησιμοποίηση, κατά την εξέλιξη των έργων. Επίσης, διερευνήθηκε εάν η μεταβολή των στοιχείων που επαναχρησιμοποιούνται σχετίζεται με τη δομική ποιότητα των έργων. Σε επόμενο βήμα, προτάθηκε μια σουίτα μετρικών για την αξιολόγηση της αρχιτεκτονικής σταθερότητας και εξέλιξης έργων λογισμικού στο πλαίσιο της επαναχρησιμοποίησης τους. Στόχος των μετρικών ήταν να ποσοτικοποιήσουν την αρχιτεκτονική σταθερότητα και εξέλιξη των έργων κατά τη χρονική εξέλιξη των έργων. Οι μετρικές είναι ιδιαίτερα χρήσιμες κατά την αναβάθμιση των επαναχρησιμοποιημένων βιβλιοθηκών των έργων καθώς παρέχονται στοιχεία για πιθανές επιπλοκές κατά την επαναχρησιμοποίηση της αναβαθμισμένης έκδοσης τους.Συμπερασματικά, η εκπόνηση της συγκεκριμένης διδακτορικής διατριβής συμβάλλει στην κατανόηση της δομής και της αρχιτεκτονικής έργων λογισμικού με στόχο την επαναχρησιμοποίηση τους.