Εξόρυξη δεδομένων τεχνολογίας λογισμικού για επαναχρησιμοποίηση λογισμικού
Creators: name: Διαμαντόπουλος, Θεμιστοκλής Γ.
Publisher: name: Aristotle University of Thessaloniki
Year: 2018
Subjects: Τεχνολογία Λογισμικού
Εξόρυξη Δεδομένων
Επαναχρησιμοποίηση Λογισμικού
Ποιότητα Λογισμικού
Software Engineering
Data MiningSoftware Reuse
Software Quality

description: Η ανάγκη για την αποτελεσματική ανάπτυξη και συντήρηση λογισμικού έχει εντοπιστεί εδώ και αρκετό καιρό στο σχετικό κλάδο της Τεχνολογίας Λογισμικού. Σήμερα, ωστόσο, με την εισαγωγή νέων πρακτικών ανάπτυξης λογισμικού και πρωτοβουλιών λογισμικού ανοικτού κώδικα, τα δεδομένα λογισμικού που μπορεί να βρει κανείς στο διαδίκτυο είναι άφθονα, επομένως η πρόκληση που προκύπτει είναι η αποτελεσματική αξιοποίησή τους για την παραγωγή καλύτερων προϊόντων λογισμικού. Και η πρόκληση αυτή αποτελεί στην πραγματικότητα ένα πρόβλημα επαναχρησιμοποίησης. Στο πλαίσιο αυτής της διατριβής προτείνουμε μια ενιαία προσέγγιση που περιλαμβάνει την εφαρμογή τεχνικών εξόρυξης δεδομένων σε δεδομένα τεχνολογίας λογισμικού για τη διευκόλυνση της επαναχρησιμοποίησης σε διάφορες φάσεις του κύκλου ζωής του λογισμικού. Η μεθοδολογία μας προτείνει λύσεις για τη φάση του καθορισμού των απαιτήσεων και της εξαγωγής προδιαγραφών, τις φάσεις της σχεδίασης και ανάπτυξης λογισμικού, ενώ συμβάλλει επίσης στην αξιολόγηση της ποιότητας και τον έλεγχο του λογισμικού. Αρχικά εστιάζουμε στη φάση του καθορισμού των απαιτήσεων και της εξαγωγής προδιαγραφών, όπου κατασκευάζουμε κατάλληλες οντολογίες για την αποθήκευση απαιτήσεων λογισμικού. Χρησιμοποιώντας ένα σύνολο από εργαλεία που σχεδιάσαμε, ο μηχανικός απαιτήσεων μπορεί να εισάγει στο μοντέλο μας λειτουργικές απαιτήσεις γραμμένες σε φυσική γλώσσα, γραφικά σενάρια και διαγράμματα UML. Η μοντελοποίηση που προτείνουμε επιτρέπει την επικύρωση των απαιτήσεων, την εξαγωγή προδιαγραφών, καθώς επίσης και την εφαρμογή τεχνικών εξόρυξης δεδομένων με σκοπό την επαναχρησιμοποίηση απαιτήσεων. Επιπρόσθετα, παρουσιάζουμε μεθοδολογίες για την επαναχρησιμοποίηση απαιτήσεων μέσω τεχνικών κανόνων συσχετίσεων και τεχνικών αντιστοίχησης. Όσον αφορά τη φάση της ανάπτυξης λογισμικού, εφαρμόζουμε τεχνικές για την επαναχρησιμοποίηση κώδικα σε διαφορετικά επίπεδα. Αρχικά, παρουσιάζουμε τη σχεδίαση μιας μηχανής αναζήτησης κώδικα που είναι προσανατολισμένη στην επαναχρησιμοποίηση. Η μηχανή μας βασίζεται σε ένα ευρετήριο κώδικα που επιτρέπει την αναζήτηση σε επίπεδο τμημάτων κώδικα (components), σε επίπεδο snippets και σε επίπεδο έργων λογισμικού (π.χ. για αναζήτηση αρχιτεκτονικών προτύπων). Στη συνέχεια, προτείνουμε ένα σύστημα προτάσεων κώδικα που αφορά την επαναχρησιμοποίηση οδηγούμενη από ελέγχους (test-driven reuse). Το σύστημά μας χρησιμοποιεί τεχνικές ανάκτησης πληροφοριών, ενώ επιπλέον λαμβάνεται υπόψη η σύνταξη του κώδικα για την επιστροφή τμημάτων που είναι σχετικά με το ερώτημα και εφαρμόζονται κατάλληλοι μετασχηματισμοί για την ενσωμάτωσή τους στον κώδικα του προγραμματιστή. Τα αποτελέσματα εξετάζονται επίσης χρησιμοποιώντας ελέγχους προκειμένου να διασφαλιστεί ότι καλύπτεται η επιθυμητή λειτουργικότητα. Η επόμενη πρόκληση που αντιμετωπίζουμε είναι η σύνδεση των τμημάτων κώδικα, που πραγματοποιείται συνήθως με τη βοήθεια παραδειγμάτων (snippets). Σε αυτόν τον άξονα, προτείνεται ένα σύστημα που δέχεται ερωτήματα σε φυσική γλώσσα και κατεβάζει παραδείγματα κώδικα, που στη συνέχεια ομαδοποιούνται με βάση τις βιβλιοθήκες που χρησιμοποιούν. Οι βιβλιοθήκες και τα παραδείγματα κατατάσσονται με βάση την προτίμησή τους από την προγραμματιστική κοινότητα. Τέλος, για την περαιτέρω βελτίωση των τμημάτων κώδικα που ανακτήθηκαν (ή γενικά που αναπτύχθηκαν από τον προγραμματιστή), προτείνουμε μια μεθοδολογία επικύρωσης κώδικα με βάση πληροφορίες από υπηρεσίες ερωταπαντήσεων. Αναλύεται το πρόβλημα της εύρεσης χρήσιμων αναρτήσεων σε τέτοιες υπηρεσίες, και συγκεκριμένα προτείνεται η χρήση κώδικα για την εύρεση σχετικών snippets. Ο τρίτος άξονας αυτής της διατριβής είναι η αξιολόγηση της ποιότητας των ανακτηθέντων τμημάτων λογισμικού. Προς το σκοπό αυτό, παρουσιάζεται αρχικά ένα σύστημα προτάσεων κώδικα που αξιολογεί τα τμήματα λογισμικού τόσο από λειτουργική σκοπιά, όσο και για τη δυνατότητα επαναχρησιμοποίησής τους. Το σύστημα περιλαμβάνει έναν μηχανισμό αντιστοίχησης ερωτημάτων σε τμήματα κώδικα με βάση τη σύνταξη, καθώς και ένα μοντέλο μετρικών στατικής ανάλυσης που αξιολογεί την επαναχρησιμοποιησιμότητα κάθε τμήματος. Στη συνέχεια, σχεδιάζουμε ένα πιο λεπτομερές μοντέλο αξιολόγησης της επαναχρησιμοποιησιμότητας τμημάτων κώδικα με βάση την προτίμησή/επαναχρησιμοποίησή τους από την κοινότητα. Το μοντέλο μας, που κατασκευάζεται χρησιμοποιώντας τεχνικές μηχανικής μάθησης, είναι σε θέση να αξιολογήσει την ποιότητα τμημάτων κώδικα όπως γίνεται αντιληπτή από το χρήστη. Συμπερασματικά, στην παρούσα διατριβή βασιζόμαστε στην εφαρμογή κατάλληλων τεχνικών εξόρυξης δεδομένων σε δεδομένα τεχνολογίας λογισμικού, ούτως ώστε να παρέχουμε μια ολοκληρωμένη λύση για την εφαρμογή τεχνικών επαναχρησιμοποίησης στις διάφορες φάσεις της ανάπτυξης και συντήρησης λογισμικού. Η λύση αυτή στοχεύει στη δημιουργία καλύτερου λογισμικού με ελάχιστο κόστος και προσπάθεια, επηρεάζοντας έτσι σημαντικές οικονομικές και κοινωνικές πτυχές της καθημερινής ζωής.
description: The need for effective software development and maintenance has long been identified in the field of Software Engineering. Today, however, that new collaborative development paradigms and open-source software initiatives have been introduced, the amount of software engineering data that are available online is vast, thus the challenge is to effectively analyze them in order to produce better software. And this challenge is actually a problem of reuse. In this thesis, we provide a unified approach that includes applying data mining techniques on software engineering data in order to enable reuse in different phases of the software engineering life cycle. Our methodology offers solutions for the phases of requirements elicitation and specification extraction, software design and development, and quality assurance and testing. Initially, we focus on requirements elicitation and specification extraction, where we build ontologies for storing software requirements. Using a set of our designed tools, the requirements engineer can instantiate our model from functional requirements written in natural language, graphical storyboards and/or UML diagrams. Our modeling approach allows validating the requirements, extracting specifications, as well as applying data mining techniques for reusing requirements. Furthermore, we propose different methodologies for recommending requirements, based on association rule extraction and matching techniques. Concerning the phase of software development, we facilitate reuse at different levels. At first, we design a code search engine that is oriented towards reuse. Our engine is based on an index that allows searching for source code components, for code snippets, and for multiple objects (at project level, e.g. for finding architectural patterns). After that, we propose a source code recommendation system that encompasses test-driven reuse. Our system uses information retrieval techniques and employs a syntax-aware mining model to retrieve components that are relevant to the query of the developer. The results are also further examined using tests to ensure that they cover the required functionality. The next challenge that we face is that of connecting source code components, which is usually performed with snippets. In this context, we propose a system that accepts queries in natural language and downloads snippets, which are subsequently clustered according to the libraries used. The libraries and the snippets are ranked according to their preference by the developer community. Finally, in an effort to further improve on retrieved code (or generally any code written by the developer), we propose a code validation methodology given information from question-answering services. We analyze the problem of finding similar question posts in these services, and specifically recommend the use of source code for finding relevant snippets. The third axis of this thesis involves evaluating the quality of the retrieved components. To this end, we initially present a source code recommendation system that evaluates the retrieved components both from a functional and from a reusability perspective. Our system involves a syntax-aware matching mechanism and a model that assesses the reusability of each component. After that, we design a more fine-grained reusability estimation model for source code components, based on their preference/reuse rate by the developer community. Our model, which is built using machine learning techniques, is capable of assessing the quality of source code components as perceived by developers. All in all, in this thesis we apply data mining techniques on software engineering data, in order to provide a unified solution for practicing reuse in all phases of software development and maintenance. This solution aims to create better software with minimal cost and effort, thus affecting important economic and social aspects of everyday life.