Επαναχρησιμοποίηση λογισμικού βασισμένη στην ανάκτηση αρχιτεκτονικής πληροφορίας
Creators: name: Κωνσταντίνου, Ελένη Α.
Publisher: name: Aristotle University of Thessaloniki
Year: 2015
Subjects: subject: Επαναχρησιμοποίηση Λογισμικού
subject: Ανάκτηση Αρχικτεκτονικής
subject: Συστατικά Λογισμικού
subject: Αρχιτεκτονική
subject: Software Reuse
subject: Architecture Reconstruction
subject: Software Components
subject: Architecture
subject: FOS: Civil engineering

description: Η παρούσα διδακτορική διατριβή επικεντρώνεται σε μεθόδους διευκόλυνσης της επαναχρησιμοποίησης πηγαίου κώδικα. Πιο συγκεκριμένα, διερευνά μεθόδους ανάκτησης αρχιτεκτονικής και δομικής πληροφορίας ώστε να είναι εφικτή η κατανόηση του πηγαίου κώδικα από τεχνολόγους λογισμικού με απώτερο στόχο την επαναχρησιμοποίηση λογισμικού. Η επαναχρησιμοποίηση λογισμικού είναι η ενσωμάτωση βιβλιοθηκών ή συστημάτων σε συστήματα που βρίσκονται υπό ανάπτυξη και είναι διαφορετικά από τα συστήματα για τα οποία υλοποιήθηκαν. Η επαναχρησιμοποίηση λογισμικού έχει καθιερωθεί ως συνήθης πρακτική στην ανάπτυξη λογισμικού, δεδομένου ότι τα οφέλη που προσφέρει περιλαμβάνουν τη μειωμένη προσπάθεια ανάπτυξης και την αυξημένη παραγωγικότητα. Τα αποθετήρια Ελεύθερου Λογισμικού/Λογισμικού Ανοιχτού Κώδικα (ΕΛΛΑΚ) συνεισφέρουν θετικά στην επαναχρησιμοποίηση λογισμικού καθώς είναι ελεύθερα διαθέσιμος ο πηγαίος κώδικας. Επίσης, η μεγάλη διαθεσιμότητα έργων ΕΛΛΑΚ στα αποθετήρια συνεισφέρει θετικά στην πρακτική της επαναχρησιμοποίησης. Ενώ τα οφέλη της επαναχρησιμοποίησης λογισμικού είναι σημαντικά, η επιτυχής επαναχρησιμοποίηση λογισμικού δεν είναι βέβαιη. Είναι σύνηθες φαινόμενο σε κατηγορίες έργων, όπως τα ΕΛΛΑΚ, να μην παρέχεται τεχνική ή αρχιτεκτονική τεκμηρίωση. Συνεπώς, η κατανόηση τους έγκειται στον πηγαίο κώδικα. Η εξαγωγή πληροφορίας και κατανόηση του πηγαίου κώδικα μπορεί να αποβεί σε δύσκολη και χρονοβόρα διεργασία, ειδικά σε περιπτώσεις μεγάλων και πολύπλοκων έργων λογισμικού.Τα προαναφερθέντα ζητήματα αποτέλεσαν το κίνητρο για αυτή τη διατριβή και οι συνεισφορές της διατριβής είναι οι ακόλουθες:Διερεύνηση και εκτίμηση αρχιτεκτονικών επιπέδων. Αρχικά, διερευνήθηκε κατά πόσον οι δομικές ιδιότητες των κλάσεων συσχετίζονται με τη συμμετοχή τους σε αρχιτεκτονικά επίπεδα. Χρησιμοποιήθηκαν τεχνικές γράφων για την προσέγγιση των αρχιτεκτονικών επιπέδων και μέσω κανόνων συσχέτισης, εξετάστηκε εάν μπορούν να χρησιμοποιηθούν οι δομικές μετρικές για την ανάθεση των κλάσεων σε προσεγγιστικά αρχιτεκτονικά επίπεδα. Στη συνέχεια, προτάθηκε μια μετρική εκτίμησης της επαναχρησιμοποιησιμότητας των κλάσεων βάσει συμμετοχής τους σε αρχιτεκτονικά επίπεδα. Στόχος ήταν ο γρήγορος και ακριβής υπολογισμός της επαναχρησιμοποιησιμότητας του κάθε στοιχείου ενός συστήματος, δεδομένου ότι τα στοιχεία που ανήκουν σε χαμηλότερα αρχιτεκτονικά επίπεδα είναι πιο εύκολα επαναχρησιμοποιήσιμα σε σύγκριση με στοιχεία σε υψηλότερα επίπεδα. Ανάκτηση Αρχιτεκτονικής Συστημάτων Προτάθηκε μια αυτόματη μεθοδολογία για την απαλοιφή θορύβου κατά την ανάλυση συστημάτων λογισμικού ώστε να βελτιωθεί η κατάτμηση των συστημάτων σε υποσυστήματα. Η μεθοδολογία είχε ως στόχο την αναγνώριση εκείνων κλάσεων στο σύστημα, οι οποίες εισάγουν θόρυβο στις τεχνικές ανάκτησης της αρχιτεκτονικής. Η μεθοδολογία βασίζεται στην ανάλυση τόσο του γράφου που προκύπτει από ένα σύστημα λογισμικού, όσο και των πιθανών υπογράφων που μπορούν να προκύψουν από το σύστημα. Το τελικό αποτέλεσμα ήταν η εύρεση των κλάσεων/κόμβων στο σύστημα που εάν αφαιρεθούν, βελτιώνουν σημαντικά τις υπάρχουσες τεχνικές αρχιτεκτονικής ανάλυσης των συστημάτων. Στη συνέχεια προτάθηκε μια μέθοδος ανάκτησης της αρχιτεκτονικής των συστημάτων η οποία ξεπερνάει ορισμένα από τα προβλήματα που αντιμετωπίζουν οι τεχνικές που έχουν προταθεί μέχρι πρότινος. Η μέθοδος βασίζεται στο συνδυασμό διαφορετικών πηγών πληροφορίας και σε σύγχρονους αλγόριθμους ομαδοποίησης. Η προτεινόμενη μέθοδος βελτιώνει τα αποτελέσματα καθώς παρουσιάζει σταθερή ακρίβεια για διαφορετικά συστήματα, το οποίο είναι ένα σημαντικό πρόβλημα για τις υπάρχουσες τεχνικές. Εξαγωγή Επαναχρησιμοποιήσιμων Συστατικών Προτάθηκε μια ημι-αυτόματη διεργασία με στόχο την κατανόηση της δομή υποψήφιων συστατικών από έργα με πολύπλοκη δομή λόγω κυκλικών εξαρτήσεων. Στόχος της διεργασίας είναι η μείωση του μεγέθους των επαναχρησιμοποιήσιμων συστατικών λογισμικού, χωρίς να επηρεάζεται η επιθυμητή λειτουργικότητα τους. Στο πλαίσιο της διεργασίας, προτάθηκε μια μέθοδος εύρεσης κομβικών κλάσεων στο συστατικό, οι οποίες ευθύνονται για τη μεγάλη αύξηση του μεγέθους του συστατικού. Η μέθοδος προτείνει και μοντελοποιεί το μετασχηματισμό των συσχετίσεων των κομβικών κλάσεων ώστε να απλοποιηθούν οι συσχετίσεις των κλάσεων που συμμετέχουν στο υποψήφιο συστατικό και να είναι εφικτή η κατανόηση και επαναχρησιμοποίηση του. Επαναχρησιμοποίηση Λογισμικού Αρχικά διερευνήθηκε η συχνότητα και ένταση της εμφάνισης πρακτικών επαναχρησιμοποίησης σε μεγάλο δείγμα από έργα ΕΛΛΑΚ, καθώς και η μεταβολή των αποφάσεων επαναχρησιμοποίησης κατά την εξέλιξη των έργων. Στόχος ήταν η συλλογή στοιχείων της πραγματικής προσπάθειας που απαιτείται για την επαναχρησιμοποίηση, κατά την εξέλιξη των έργων. Επίσης, διερευνήθηκε εάν η μεταβολή των στοιχείων που επαναχρησιμοποιούνται σχετίζεται με τη δομική ποιότητα των έργων. Σε επόμενο βήμα, προτάθηκε μια σουίτα μετρικών για την αξιολόγηση της αρχιτεκτονικής σταθερότητας και εξέλιξης έργων λογισμικού στο πλαίσιο της επαναχρησιμοποίησης τους. Στόχος των μετρικών ήταν να ποσοτικοποιήσουν την αρχιτεκτονική σταθερότητα και εξέλιξη των έργων κατά τη χρονική εξέλιξη των έργων. Οι μετρικές είναι ιδιαίτερα χρήσιμες κατά την αναβάθμιση των επαναχρησιμοποιημένων βιβλιοθηκών των έργων καθώς παρέχονται στοιχεία για πιθανές επιπλοκές κατά την επαναχρησιμοποίηση της αναβαθμισμένης έκδοσης τους. Συμπερασματικά, η εκπόνηση της συγκεκριμένης διδακτορικής διατριβής συμβάλλει στην κατανόηση της δομής και της αρχιτεκτονικής έργων λογισμικού με στόχο την επαναχρησιμοποίηση τους.
description: This thesis focuses on methods that facilitate source code reuse. More specifically, it investigates methods to recover architectural and structural information in order to enable systems’ source code understanding by software engineers and facilitate source code reuse. Software reuse is the incorporation of libraries or software systems to other systems under development, different than the ones that were originally developed for. Software reuse has been established as a common software development practice, considering its inherent benefits that include reduced development effort and increased productivity. Free/Libre Open Source Software (FLOSS) repositories positively contribute to software reuse since the source code is available. Additionally, the enormous amount of FLOSS projects in repositories positively contributes to reuse practices. Although the benefits of software reuse are important, successful reuse is not ensured. A common phenomenon in several project categories, e.g. FLOSS, is the unavailability of technical or architectural documentation. Thus, their understanding lies on the comprehension of the source code. The information extraction and source code comprehension can become a difficult and time consuming process, especially for large and complex software systems. The aforementioned implications were the motivation for this thesis and the contributions are: Architectural layers investigation and estimation Initially, the correlation between classes’ design attributes and their participation in architectural layers was investigated. In order to approximate the actual architectural layers, graph techniques were used and by extracting association rules, it was investigated if the design metrics are suitable to assign classes to the approximate architectural layers. Next, a reusability assessment metric was proposed that is based on classes’ participation in architectural layers. The goal of this metric is the fast and accurate calculation of the reusability of the systems’ elements, given that the elements that participate in lower architectural layers are more reusable compared to elements in higher layers. Software Architecture Recovery An automated methodology was proposed in order to filter out noise during the analysis of software systems and to improve systems’ partitioning to subsystems. The methodology aims to identify those classes in a system, which import noise in software architecture recovery techniques. The methodology is based on the analysis of the graph that is derived by the software system, as well as on all the possible subgraphs that can be discovered in the system. The outcome was finding the classes/nodes in the system that if were removed, they would not negatively affect the existing software architecture recovery techniques. Next, a new method to recover the software architecture was proposed, which overcomes some of the problems that SAR techniques face. The method is based on combining different information sources and recent clustering algorithms. The proposed method improves the SAR results since it presents similar accuracy in the produced architectures, which is a problem of current SAR approaches. Reusable Component Extraction A semi-automated process was proposed which aims to assist in understanding the structure of candidate reusable components from systems with complex structure due to cyclic dependencies. The process aims to decrease the candidate components’ sizes without affecting their provided functionality. In the context of this work, a method to identify the key nodes of the component is proposed, i.e. nodes that are responsible for highly increasing the component’s size. The method recommends and models the transformation of the key classes’ dependencies in order to simplify the dependencies between the component’s participants and enable its understanding. Software reuse Initially, the frequency and intensity of reuse practices was investigated in a large sample of FLOSS, as well as the modification of reuse decisions during projects’ evolution. The aim was to collect evidence of the actual effort that is required for software reuse during projects’ evolution. Next, a metrics suite was proposed in order to assess the architectural stability and evolution of software systems in the context of their reuse. The metrics quantified the architectural stability and evolution of software projects during their evolution. The metrics are considered more valuable for the reused library upgrades process since the provide evidence about possible implications during the upgraded version reuse. Overall, this thesis contributes to the comprehension of the design and architecture of software systems in order to facilitate software reuse.