Περίληψη : | Στην εργασία αυτή αξιολογούνται εργαλεία ανίχνευσης προτύπων σχεδίασης. Τα πρότυπα σχεδίασης αποτελούν μία εμπειρική προσέγγιση του σχεδιασμού αντικειμενοστραφών συστημάτων λογισμικού, καθώς παρέχουν κοινές λύσεις σε συνηθισμένα σχεδιαστικά προβλήματα. Τα πρότυπα έγιναν γνωστά στον χώρο της Τεχνολογίας Λογισμικού μέσω της συγγραφικής ομάδας GoF και αποτελούν αντικείμενο μελέτης πολλών εργασιών. Η εφαρμογή των προτύπων έχει υιοθετηθεί σε πολλά συστήματα λογισμικού, καθότι έχει αποδειχθεί ότι είναι αξιόπιστα, εύκολο να υλοποιηθούν και εύρωστα.Η ανίχνευση των προτύπων στον κώδικα αποτελεί αντικείμενο ενδιαφέροντος για αρκετούς λόγους. Τα πρότυπα μπορεί να αποτελέσουν ένα μέτρο ποιότητας ενός αντικειμενοστραφούς συστήματος λογισμικού. Έτσι, ένα σύστημα μπορεί να χαρακτηριστεί από το πλήθος των προτύπων που υλοποιεί. Κατά τη διαδικασία του reverse engineering, η ανίχνευση των προτύπων μπορεί να οδηγήσει σε καλύτερη κατανόηση του κώδικα, ειδικά στην περίπτωση όπου δεν υπάρχει τεκμηρίωση. Επιπλέον, κατά τη διαδικασία του forward engineering, δηλαδή της συγγραφής του συστήματος λογισμικού, οι σχεδιαστές μπορούν να επαληθεύσουν την ορθή υλοποίηση των προτύπων.Το πρόβλημα της ανίχνευσης των προτύπων έχει γίνει αντικείμενο μελέτης πολλών ερευνητικών προσπαθειών. Στη βιβλιογραφία παρουσιάζεται ένας μεγάλος αριθμός εργαλείων, τα οποία στηρίζονται σε διαφορετικές προσεγγίσεις, τεχνικές και αναπαραστάσεις των συστημάτων λογισμικού και των προτύπων. Στην εργασία αυτή παρουσιάζεται μία προσπάθεια ταξινόμησης των εργαλείων και στη συνέχεια επιλέγονται τέσσερα εργαλεία για πειραματική μελέτη πάνω στα συστήματα ανοικτού κώδικα jhodraw 6.0b1 και apache ant 1.6.2, ενώ σε ορισμένες περιπτώσεις εφαρμόζεται η μέθοδος της στατιστικής Boostrap. Τα εργαλεία που έχουν επιλεχθεί είναι:1. Similarity Scoring: Το εργαλείο αυτό στηρίζεται στα δομικά χαρακτηριστικά των προτύπων και μπορεί να αναγνωρίζει παραλλαγές των προτύπων. Ο εντοπισμός των προτύπων γίνεται με την περιγραφή των σχέσεων σε πίνακες και τη χρήση του αλγορίθμου similarity scoring.2. DP-Miner: Το εργαλείο αυτό προσεγγίζει δομικά και δυναμικά μία ενδιάμεση αναπαράσταση του κώδικα προκειμένου να αναγνωρίσει τα πρότυπα ενός συστήματος. Παράλληλα χρησιμοποιεί σημασιολογικές πληροφορίες που μπορεί να υπάρχουν μέσα στον κώδικα και κυρίως στην ονοματολογία των κλάσεων και των αντικειμένων. Η σύγκριση στηρίζεται στην κατασκευή πινάκων και στον υπολογισμό βαρών. 3. PINOT: Το εργαλείο αυτό χρησιμοποιεί δυναμική και στατική ανάλυση για την εξόρυξη των προτύπων απευθείας από τον κώδικα. Η προσέγγιση αυτή χρησιμοποιεί τον compiler Jikes (ένας opensource compiler για προγράμματα σε γλώσσα Java, ο οποίος είναι υλοποιημένος σε C++). 4. Ptidej: Το εργαλείο αυτό αποτελεί ένα πλήρες framework για reverse engineer, το οποίο ενσωματώνει επιπλέον την αναγνώριση προτύπων. Χρησιμοποιεί τη γλώσσα περιγραφής προτύπων PDL και κάνει χρήση ευρεστικών μεθόδων για τον εντοπισμό των προτύπων. Η διάθεση της έκδοσης του εργαλείου που εντοπίζει τα πρότυπα δεν είναι ελεύθερη και για το λόγο αυτό το εργαλείο τελικά εγκαταλήφθηκε.Η εκτίμηση των αποτελεσμάτων των εργαλείων καταλήγει σε τρία πιθανά αποτελέσματα: σε True positive (TP), σε περίπτωση που ένα πρότυπο έχει αναγνωριστεί και υπάρχει πραγματικά μέσα στο σύστημα που μελετάμε, σε False positive (FP), σε περίπτωση που ένα πρότυπο έχει αναγνωριστεί αλλά δεν υπάρχει πραγματικά μέσα στο σύστημα και σε False negative (FN), σε περίπτωση που ένα πρότυπο υπάρχει μέσα στο σύστημα αλλά δεν έχει αναγνωριστεί από τον αλγόριθμο. Η περίπτωση που γενικά είναι επιθυμητή είναι η πρώτη. Η αξιολόγηση των εργαλείων γίνεται με τις μετρικές recall και precision, οι οποίες υπολογίζονται βάση του πλήθους των TP, FP και FN. Η ανίχνευση των προτύπων περιλαμβάνει αρκετά προβλήματα, τα οποία την καθιστούν μία δύσκολη διαδικασία. Εξ’ ορισμού τα πρότυπα έχουν περισσότερους από έναν τρόπους υλοποίησης, ενώ ενδέχεται να υπάρχουν και διάφορες παραλλαγές τους. Επιπλέον, τα πρότυπα περιλαμβάνουν στατικά και δυναμικά χαρακτηριστικά, τα οποία πρέπει να αναλυθούν εξίσου. Πολλές φορές τα πρότυπα παρουσιάζουν ομοιότητα μεταξύ τους, καθώς το μόνο που τα διακρίνει είναι ο σκοπός. Επίσης, τα προβλήματα κλιμάκωσης που οφείλονται στο μεγάλο πλήθος των κλάσεων καθώς και οι ιδιαιτερότητες των γλωσσών προγραμματισμού προσθέτουν επιπλέον εμπόδια στην ανίχνευσή τους. Τέλος, η έλλειψη τεκμηρίωσης των συστημάτων ανοικτού κώδικα και benchmark καθιστούν την επαλήθευση των αποτελεσμάτων των εργαλείων μία επίπονη διαδικασία. Η επαλήθευση πρέπει να γίνει χειρονακτικά πάνω στον κώδικα, εισάγοντας παράλληλα των παράγοντα του ανθρώπινου λάθους.Εν κατακλείδι, η ανίχνευση των προτύπων παραμένει ένα ανοικτό ερευνητικό ζήτημα με πολλές προκλήσεις. Η ύπαρξη ενός εργαλείου που να δίνει λύση με αξιοπιστία στο πρόβλημα αυτό μπορεί να βοηθήσει στη βελτίωση της ποιότητας των συστημάτων λογισμικού καθώς και στην μείωση του κόστους συντήρησης. In this thesis we evaluate design pattern discovery approaches. Design patterns are an empirical approach on object-oriented system design since they provide common solutions on regular design problems. Design patterns became famous in software engineering through Gof and since then they became the studying object of many researches. They have been adopted by lots of software systems as they are proven to be reliable, easy to implement and robust.The discovery of patterns on code is very interesting for many reasons. Design patterns may be used to count the quality of an object-oriented software system. A system could be characterized by the amount of the design patterns that it implements. While being used in reverse engineering it might lead to better understanding the initial design, especially when documentation is absent. In addition, during forward engineering, software designers could verify the correct implementation of patterns.The issue of discovering design patterns has been the object of many publications. There are a lot of tools which differ in the approaches and techniques they use, as well as in the representation of software systems and design patterns. This thesis presents an effort to classify the published tools and also executes experiments on four design pattern discovery tools using the open-source systems jhotdraw 6.0b1 and apache ant 1.6.2. The tools that are used for the experiments are:1. Similarity Scoring: This approach relies upon structural characteristics and is able to recognize design patterns variants. The relations among classes are represented using tables and then the similarity scoring algorithm is used to calculate the patterns.2. DP-Miner: This approach uses an intermediate representation of the system and analyses its structural and behavioral aspects. It also makes use of semantics that may exist in class names. The final comparison relies on the construction of tables and the calculation of weights. 3. PINOT: This approach analyses directly system code using structural and behavioral characteristics. It relies upon Jikes, an open source compiler for Java, written in C++. 4. Ptidej: This approach provides a framework for reverse engineering that incorporates design pattern discovery. The patterns are represented with PDL, a description language for design patterns, and uses heuristics. This tool was not used, since the version that also recognizes patterns was not available. Design Pattern Discovery Tools have three possible results: true positive (TP) in case a pattern has been recognized and the pattern is really implemented within the software system, false positive (FP) in case a pattern has been recognized and the pattern is not really implemented within the system and false negative (FN) in case an implemented pattern has not been recognized. The first case is the desired one. The evaluation of the different approaches is made using metrics recall and precision, which are calculated using the amount of TP, FP and FNThe discovery of design patterns is not a simply procedure, since it involves a lot of problems. By definition, design patterns can be implemented in more than one ways and there also be variants. Many times the only difference between design patterns is the purpose and the structural characteristics are exact. Also, scaling problems and language characteristics could add more complexity. Finally, the verification of the results is a quite painful task since there is barely any documentation of the open source systems and there is no benchmarking. Results have to be manually checked directly on the system code. This fact adds the possibility of human mistake.In conclusion, design pattern discovery remains an open issue with many challenges. The existence of a tool that could provide a reliable solution could ameliorate the quality of software systems and reduce maintenance time costs.
|
---|