DEEP WEB DYNAMICS: ΕΝΤΟΠΙΣΜΟΣ, ΠΡΟΣΒΑΣΗ ΚΑΙ ΚΑΤΑΓΡΑΦΗ ΕΞΕΛΙΚΤΙΚΗΣ ΠΛΗΡΟΦΟΡΙΑΣ...Aggelos Tzani
Όσο και να έχουν βελτιωθεί οι δυνατότητες και οι λειτουργίες των μηχανών αναζήτησης για μαζική και συχνή ευρετηριοποίηση της πληροφορίας στον Παγκόσμιο Ιστό, υπάρχει ένα τεράστιο ποσό δεδομένων που δεν ευερετηριοποιούνται. Αυτό συμβαίνει επειδή η πληροφορία αυτή παρέχεται στους χρήστες δυναμικά (on query demand) μέσα από φόρμες και διεπαφές που απαιτούν αλληλεπίδραση και διάδραση με μεγάλες βάσεις δεδομένων. Ως αποτέλεσμα, οι χρήστες χάνουν σημαντικό ποσοστό της διαθέσιμης πληροφορίας ή οποία μένει κρυφή και ανακτάται μόνο με απευθείας αναζήτηση μέσω των κατάλληλων διεπαφών ερώτησης (query interfaces) των εκάστοτε δικτυακών τόπων. Δεν είναι τυχαίο το γεγονός ότι μεγάλοι εμπορικοί διαδικτυακοί τόποι όπως η Amazon.com, έχουν παραχωρήσει το δικαίωμα ευρετηριοποίησής τους σε μεγάλες μηχανές αναζήτησης.
Αρχικές μελέτες έχουν δείξει ότι ο Αόρατος Ιστός είναι τουλάχιστον 500 φορές μεγαλύτερος από την πληροφορία που ευρετηριοποιείται από όλες τις μηχανές αναζήτησης, ενώ άλλες πιο πρόσφατες αναφέρουν ότι ο λόγος αυτός μεγαλώνει συνεχώς, καθιστώντας έτσι αναγκαία την έρευνα πάνω στην δυναμική εξέλιξη και χαρτογράφηση του deep web. Είναι με άλλα λόγια ένας τεράστιος και ανεξερεύνητος “κόσμος” μέσα στο “σύμπαν” του Παγκόσμιου Ιστού.
Στην παρούσα πτυχιακή, εξετάζεται μια πειραματική στατιστική μέθοδος υπολογισμού του μεγέθους της βάσης δεδομένων μιας ιστοσελίδας του ‘’ Αόρατου Ιστού ‘’, καθώς και ο προσδιορισμός του ρυθμού αύξησης της. Για τον σκοπό αυτό έχει υλοποιηθεί κώδικας ο οποίος συνδέεται στην βάση του PubMed, στέλνει ερωτήματα από μια βάση ερωτημάτων και αποθηκεύει τα επιστρεφόμενα αποτελέσματα για χρήση από την στατιστική μέθοδο. Η στατιστική μέθοδος πάνω στην οποία βασίζεται η πειραματική στατιστική μέθοδος που χρησιμοποιείτε, είναι η μέθοδος της σύλληψης – επανασύλληψης που χρησιμοποιείται κυρίως από τους βιολόγους.
Εξόρυξη δεδοµένων για τη δυναµική ενσωµάτωση γνώσης σε πολυπρακτορικά συστήµαταISSEL
Η κατανεµηµένη φύση της τεχνολογίας Εξόρυξης ∆εδοµένων έχει στο παρελθόν
αντιµετωπιστεί επιτυχώς µε τη χρήση και αξιοποίηση της τεχνολογίας των Πρακτόρων Λογισµικού, οι οποίοι καταµερίζουν τις εργασίες, συνεργάζονται και συγχρονίζονται έτσι ώστε να φτάσουν στον τελικό τους στόχο, την εξαγωγή χρήσιµης γνώσης. Μια σειρά από εξελιγµένα εργαλεία Εξόρυξης ∆εδοµένων έχουν ήδη αναπτυχθεί, αποδεικνύοντας ότι η Πολυπρακτορική Τεχνολογία µπορεί πράγµατι να χρησιµοποιηθεί για να επιλύσει τέτοιου είδους προβλήµατα. Αντιστρέφοντας τους ρόλους του σκοπού και του µέσου, όµως, γνώση η οποία εξάγεται µε τη χρήση τεχνικών Εξόρυξης ∆εδοµένων δεν έχει χρησιµοποιηθεί για τη βελτίωση Πολυπρακτορικών Συστηµάτων. Περιορισµοί οι οποίοι σχετίζονται µε τη
διαφορετική φύση της λογικής που υιοθετούν οι δυο εµπλεκόµενες τεχνολογίες
(επαγωγική για την Εξόρυξη ∆εδοµένων και συµπερασµατική για τα Πολυπρακτορικά
Συστήµατα), εµποδίζουν την απρόσκοπτη εφαρµογή της εξαγόµενης γνώσης στο
λογικό µοντέλο των πρακτόρων. Εάν αυτοί οι περιορισµοί υπερκεραστούν, τότε ο
συγκερασµός των δυο τεχνολογιών θα καταστεί εφικτός.
Στα πλαίσια της διατριβής αυτής παρουσιάζεται µια ενοποιηµένη µεθοδολογία, η
οποία επιτρέπει την εφαρµογή δυναµικών, σύνθετων και ανανεώσιµων κανόνων σε
πολυπρακτορικά συστήµατα. Οι κανόνες αυτοί εξάγονται µε τη χρήση τεχνικών
Εξόρυξης ∆εδοµένων, σε πράκτορες και πολυπρακτορικά συστήµατα. Η µεθοδολογία
αυτή αναγνωρίζει τρεις διαφορετικούς τύπους γνώσης, η οποία προέρχεται από την
εφαρµογή τεχνικών Εξόρυξης ∆εδοµένων, και ανάλογα διαφοροποιεί το µοντέλο
διάχυσής της. Οι τρεις αυτοί τύποι γνώσης είναι: α) γνώση η οποία εξάγεται µε τη
χρήση τεχνικών Εξόρυξης ∆εδοµένων στα ιστορικά δεδοµένα µιας εφαρµογής, β)
γνώση η οποία εξάγεται µε τη χρήση τεχνικών Εξόρυξης ∆εδοµένων στα ιστορικά
δεδοµένα των συµπεριφορών των πρακτόρων µιας εφαρµογής και, γ) γνώση η οποία
εξάγεται µε τη χρήση εξελικτικών τεχνικών Εξόρυξης ∆εδοµένων σε πολυπρακτορικές κοινωνίες. Στη διατριβή αυτή µελετάται η δυνατότητα εφαρµογής των τεσσάρωνκυρίαρχων τεχνικών Εξόρυξης ∆εδοµένων σε πολυπρακτορικά συστήµατα:
Οµαδοποίηση για διαχωρισµό, Ταξινόµηση για κατηγοριοποίηση και πρόβλεψη,
εξαγωγή Κανόνων Συσχέτισης για ανακάλυψη συσχετισµών και Γενετικοί αλγόριθµοι
για αυτό-οργάνωση. Για την υλοποίηση και επίδειξη της δυναµικής ενσωµάτωσης
γνώσης σε πράκτορες αναπτύχθηκε ο Data Miner, ένα εργαλείο που περιγράφεται στο Κεφάλαιο 4. Για κάθε έναν από τους τρεις διαφορετικούς τύπους γνώσης αναπτύχθηκε και ένα αντιπροσωπευτικό Πολυπρακτορικό Σύστηµα, του οποίου και γίνεται εκτενής παρουσίαση (Κεφάλαια 5-7). Τέλος, η παρούσα διατριβή πραγµατεύεται και το θέµα της βελτίωσης του γνωσιακού µοντέλου των πρακτόρων, µε την επανάληψη της διαδικασίας χρήσης τεχνικών Εξόρυξης ∆εδοµένων πάνω σε σύγχρονα και ενηµερωµένα δεδοµένα (Επανεκπαίδευση – Κεφάλαιο 8). Τα συµπεράσµατα από την εκπόνηση της διατριβής και πιθανές µελλοντικές επεκτάσεις συνοψίζονται στο Κεφάλαιο 9.
System Development for Prediction of Static Analysis Metrics of Source CodeISSEL
Nowadays, the pace of technological development and the uninterrupted use of online sources have resulted in rapid software development processes. In the numerous projects that are constantly being implemented, what is becoming more and more evident is the smooth development of the source code around a number of criteria that define its quality. This problem is especially magnified when there are dilemmas of reusing snippets of code and doubts arise about the best choice. Therefore, such issues make it necessary to assess the quality of code fragments that are candidates for reuse based on their maintainability. The process of evaluating the quality of the source code of a software project is a time consuming and costly operation, as it involves a high degree of complexity depending on the languages the project has been implemented in and its scope. At the same time, the contribution of many developers to a project always increases the difficulties of correct evaluation. Consequently, such issues require techniques and tools that take into account multiple parameters in order to rigorously and reasonably assess the quality of a project in terms of its maintainability. One of the most prevalent techniques is the analysis of source code using static metrics that rigorously evaluate the characteristics of the software project. This is what this thesis is based on, as it focuses on static source code analysis and methods that will contribute to the evaluation of software quality through them. This is done as long as there is the availability of open source projects in repositories such as GitHub and can be used to build tools aiming at solving the issue. The static analysis of open-source projects through metrics is the basis of the system designed in the current thesis. The system designed and built in this thesis is to create a reliable and functionally useful process that is capable of predicting the future values of static analysis metrics. This tool essentially attempts to detect patterns of behavior of static metrics for past metrics and predict similar behavior in the future using memory. This is implemented using LSTM and GRU networks as their architecture focuses on holding information in memory for long periods of time. Since software production is growing at an increasingly rapid pace, such a tool will be a key element in a smooth and well-guided source code development path.
Ανάπτυξη συστήματος πρόβλεψης της εξέλιξης των μετρικών στατικής ανάλυσης πηγ...ISSEL
Στις μέρες μας, ο ρυθμός ανάπτυξης της τεχνολογίας και η αδιάλειπτη χρήση του διαδικτύου έχουν ως αποτέλεσμα την εξέλιξη της διαδικασίας ανάπτυξης λογισμικού με ταχύτατους ρυθμούς. Στα πολυάριθμα έργα που υλοποιούνται συνεχώς, αυτό που προβληματίζει όλο και περισσότερο τους ειδικούς στον τομέα, είναι η ομαλή ανάπτυξη του πηγαίου κώδικα γύρω από ένα πλήθος κριτηρίων που ορίζουν την ποιότητά του. Αυτό το πρόβλημα διογκώνεται κυρίως όταν υπάρχουν διλήμματα επαναχρησιμοποίησης τμημάτων κώδικα και προκύπτουν ενδοιασμοί για τη σωστότερη επιλογή. Επομένως, τέτοιου είδους θέματα καθιστούν αναγκαία την αξιολόγηση της ποιότητας τμημάτων κώδικα που είναι υποψήφια για επαναχρησιμοποίηση βάση της συντηρησιμότητάς τους. Η διαδικασία αξιολόγησης της ποιότητας του πηγαίου κώδικα ενός έργου λογισμικού αποτελεί μια χρονοβόρα και κοστοβόρα λειτουργία, καθώς περιέχει υψηλό βαθμό περιπλοκότητας ανάλογα με τις γλώσσες που περιλαμβάνει το έργο αλλά και την έκταση του. Παράλληλα, η συμβολή πολλών και διαφορετικών προγραμματιστών στην ανάπτυξη του έργου, αποτελεί καθοριστικό παράγοντα στην αύξηση των δυσκολιών σωστής αξιολόγησης. Καθώς το έργο αναπτύσσεται, η ανάγκη για έλεγχο συντηρησιμότητας τόσο από την πλευρά του μηχανικού όσο και από την πλευρά του πελάτη γίνεται πρωταρχικός σκοπός. Συνεπώς, τέτοια ζητήματα απαιτούν τεχνικές και εργαλεία που θα λαμβάνουν υπόψιν πλήθος παραμέτρων με στόχο την αυστηρή και λογική αξιολόγηση της ποιότητας ενός έργου ως προς την συντηρησιμότητα του. Μια από τις επικρατέστερες τεχνικές είναι η ανάλυση του πηγαίου κώδικα με χρήση μετρικών που αξιολογούν με αυστηρά κριτήρια τα χαρακτηριστικά του έργου λογισμικού. Πάνω σε αυτό βασίστηκε και η παρούσα διπλωματική, καθώς εστιάζει στη στατική ανάλυση πηγαίου κώδικα και σε μεθόδους που θα συμβάλλουν στην αξιολόγηση της ποιότητας λογισμικού μέσω αυτών. Αυτό γίνεται εφόσον υπάρχει διαθεσιμότητα έργων ανοιχτού κώδικα τα οποία βρίσκονται διαθέσιμα σε αποθετήρια όπως το GitHub και μπορούν να αξιοποιηθούν για τη δημιουργία εργαλείων που στοχεύουν στην επίλυση του ζητήματος. Η στατική ανάλυση έργων ανοιχτού κώδικα μέσω μετρικών αποτελεί την βάση δεδομένων του συστήματος της παρούσας διπλωματικής. Σκοπός του συστήματος που ερευνούμε σε αυτή την διπλωματική είναι η δημιουργία μιας αξιόπιστης και λειτουργικά χρήσιμης διαδικασίας που θα είναι ικανή να προβλέπει τις μελλοντικές τιμές των μετρικών στατικής ανάλυσης. Αυτό το εργαλείο ουσιαστικά προσπαθεί να ανιχνεύσει μοτίβα συμπεριφοράς των στατικών μετρικών για μετρήσεις του παρελθόντος και να προβλέπει όμοιες συμπεριφορές στο μέλλον με χρήση της μνήμης. Η υλοποίηση αυτή γίνεται με δίκτυα LSTM και GRU καθώς η αρχιτεκτονική τους εστιάζει στην συγκράτηση πληροφοριών στη μνήμη για μεγάλα χρονικά διαστήματα. Από την στιγμή που η παραγωγή λογισμικού αυξάνεται με όλο και πιο ραγδαίους ρυθμούς, ένα τέτοιο εργαλείο θα αποτελέσει βασικό στοιχείο στην ομαλή και σωστά καθοδηγούμενη πορεία ανάπτυξης του πηγαίου κώδικα.
DEEP WEB DYNAMICS: ΕΝΤΟΠΙΣΜΟΣ, ΠΡΟΣΒΑΣΗ ΚΑΙ ΚΑΤΑΓΡΑΦΗ ΕΞΕΛΙΚΤΙΚΗΣ ΠΛΗΡΟΦΟΡΙΑΣ...Aggelos Tzani
Όσο και να έχουν βελτιωθεί οι δυνατότητες και οι λειτουργίες των μηχανών αναζήτησης για μαζική και συχνή ευρετηριοποίηση της πληροφορίας στον Παγκόσμιο Ιστό, υπάρχει ένα τεράστιο ποσό δεδομένων που δεν ευερετηριοποιούνται. Αυτό συμβαίνει επειδή η πληροφορία αυτή παρέχεται στους χρήστες δυναμικά (on query demand) μέσα από φόρμες και διεπαφές που απαιτούν αλληλεπίδραση και διάδραση με μεγάλες βάσεις δεδομένων. Ως αποτέλεσμα, οι χρήστες χάνουν σημαντικό ποσοστό της διαθέσιμης πληροφορίας ή οποία μένει κρυφή και ανακτάται μόνο με απευθείας αναζήτηση μέσω των κατάλληλων διεπαφών ερώτησης (query interfaces) των εκάστοτε δικτυακών τόπων. Δεν είναι τυχαίο το γεγονός ότι μεγάλοι εμπορικοί διαδικτυακοί τόποι όπως η Amazon.com, έχουν παραχωρήσει το δικαίωμα ευρετηριοποίησής τους σε μεγάλες μηχανές αναζήτησης.
Αρχικές μελέτες έχουν δείξει ότι ο Αόρατος Ιστός είναι τουλάχιστον 500 φορές μεγαλύτερος από την πληροφορία που ευρετηριοποιείται από όλες τις μηχανές αναζήτησης, ενώ άλλες πιο πρόσφατες αναφέρουν ότι ο λόγος αυτός μεγαλώνει συνεχώς, καθιστώντας έτσι αναγκαία την έρευνα πάνω στην δυναμική εξέλιξη και χαρτογράφηση του deep web. Είναι με άλλα λόγια ένας τεράστιος και ανεξερεύνητος “κόσμος” μέσα στο “σύμπαν” του Παγκόσμιου Ιστού.
Στην παρούσα πτυχιακή, εξετάζεται μια πειραματική στατιστική μέθοδος υπολογισμού του μεγέθους της βάσης δεδομένων μιας ιστοσελίδας του ‘’ Αόρατου Ιστού ‘’, καθώς και ο προσδιορισμός του ρυθμού αύξησης της. Για τον σκοπό αυτό έχει υλοποιηθεί κώδικας ο οποίος συνδέεται στην βάση του PubMed, στέλνει ερωτήματα από μια βάση ερωτημάτων και αποθηκεύει τα επιστρεφόμενα αποτελέσματα για χρήση από την στατιστική μέθοδο. Η στατιστική μέθοδος πάνω στην οποία βασίζεται η πειραματική στατιστική μέθοδος που χρησιμοποιείτε, είναι η μέθοδος της σύλληψης – επανασύλληψης που χρησιμοποιείται κυρίως από τους βιολόγους.
Εξόρυξη δεδοµένων για τη δυναµική ενσωµάτωση γνώσης σε πολυπρακτορικά συστήµαταISSEL
Η κατανεµηµένη φύση της τεχνολογίας Εξόρυξης ∆εδοµένων έχει στο παρελθόν
αντιµετωπιστεί επιτυχώς µε τη χρήση και αξιοποίηση της τεχνολογίας των Πρακτόρων Λογισµικού, οι οποίοι καταµερίζουν τις εργασίες, συνεργάζονται και συγχρονίζονται έτσι ώστε να φτάσουν στον τελικό τους στόχο, την εξαγωγή χρήσιµης γνώσης. Μια σειρά από εξελιγµένα εργαλεία Εξόρυξης ∆εδοµένων έχουν ήδη αναπτυχθεί, αποδεικνύοντας ότι η Πολυπρακτορική Τεχνολογία µπορεί πράγµατι να χρησιµοποιηθεί για να επιλύσει τέτοιου είδους προβλήµατα. Αντιστρέφοντας τους ρόλους του σκοπού και του µέσου, όµως, γνώση η οποία εξάγεται µε τη χρήση τεχνικών Εξόρυξης ∆εδοµένων δεν έχει χρησιµοποιηθεί για τη βελτίωση Πολυπρακτορικών Συστηµάτων. Περιορισµοί οι οποίοι σχετίζονται µε τη
διαφορετική φύση της λογικής που υιοθετούν οι δυο εµπλεκόµενες τεχνολογίες
(επαγωγική για την Εξόρυξη ∆εδοµένων και συµπερασµατική για τα Πολυπρακτορικά
Συστήµατα), εµποδίζουν την απρόσκοπτη εφαρµογή της εξαγόµενης γνώσης στο
λογικό µοντέλο των πρακτόρων. Εάν αυτοί οι περιορισµοί υπερκεραστούν, τότε ο
συγκερασµός των δυο τεχνολογιών θα καταστεί εφικτός.
Στα πλαίσια της διατριβής αυτής παρουσιάζεται µια ενοποιηµένη µεθοδολογία, η
οποία επιτρέπει την εφαρµογή δυναµικών, σύνθετων και ανανεώσιµων κανόνων σε
πολυπρακτορικά συστήµατα. Οι κανόνες αυτοί εξάγονται µε τη χρήση τεχνικών
Εξόρυξης ∆εδοµένων, σε πράκτορες και πολυπρακτορικά συστήµατα. Η µεθοδολογία
αυτή αναγνωρίζει τρεις διαφορετικούς τύπους γνώσης, η οποία προέρχεται από την
εφαρµογή τεχνικών Εξόρυξης ∆εδοµένων, και ανάλογα διαφοροποιεί το µοντέλο
διάχυσής της. Οι τρεις αυτοί τύποι γνώσης είναι: α) γνώση η οποία εξάγεται µε τη
χρήση τεχνικών Εξόρυξης ∆εδοµένων στα ιστορικά δεδοµένα µιας εφαρµογής, β)
γνώση η οποία εξάγεται µε τη χρήση τεχνικών Εξόρυξης ∆εδοµένων στα ιστορικά
δεδοµένα των συµπεριφορών των πρακτόρων µιας εφαρµογής και, γ) γνώση η οποία
εξάγεται µε τη χρήση εξελικτικών τεχνικών Εξόρυξης ∆εδοµένων σε πολυπρακτορικές κοινωνίες. Στη διατριβή αυτή µελετάται η δυνατότητα εφαρµογής των τεσσάρωνκυρίαρχων τεχνικών Εξόρυξης ∆εδοµένων σε πολυπρακτορικά συστήµατα:
Οµαδοποίηση για διαχωρισµό, Ταξινόµηση για κατηγοριοποίηση και πρόβλεψη,
εξαγωγή Κανόνων Συσχέτισης για ανακάλυψη συσχετισµών και Γενετικοί αλγόριθµοι
για αυτό-οργάνωση. Για την υλοποίηση και επίδειξη της δυναµικής ενσωµάτωσης
γνώσης σε πράκτορες αναπτύχθηκε ο Data Miner, ένα εργαλείο που περιγράφεται στο Κεφάλαιο 4. Για κάθε έναν από τους τρεις διαφορετικούς τύπους γνώσης αναπτύχθηκε και ένα αντιπροσωπευτικό Πολυπρακτορικό Σύστηµα, του οποίου και γίνεται εκτενής παρουσίαση (Κεφάλαια 5-7). Τέλος, η παρούσα διατριβή πραγµατεύεται και το θέµα της βελτίωσης του γνωσιακού µοντέλου των πρακτόρων, µε την επανάληψη της διαδικασίας χρήσης τεχνικών Εξόρυξης ∆εδοµένων πάνω σε σύγχρονα και ενηµερωµένα δεδοµένα (Επανεκπαίδευση – Κεφάλαιο 8). Τα συµπεράσµατα από την εκπόνηση της διατριβής και πιθανές µελλοντικές επεκτάσεις συνοψίζονται στο Κεφάλαιο 9.
System Development for Prediction of Static Analysis Metrics of Source CodeISSEL
Nowadays, the pace of technological development and the uninterrupted use of online sources have resulted in rapid software development processes. In the numerous projects that are constantly being implemented, what is becoming more and more evident is the smooth development of the source code around a number of criteria that define its quality. This problem is especially magnified when there are dilemmas of reusing snippets of code and doubts arise about the best choice. Therefore, such issues make it necessary to assess the quality of code fragments that are candidates for reuse based on their maintainability. The process of evaluating the quality of the source code of a software project is a time consuming and costly operation, as it involves a high degree of complexity depending on the languages the project has been implemented in and its scope. At the same time, the contribution of many developers to a project always increases the difficulties of correct evaluation. Consequently, such issues require techniques and tools that take into account multiple parameters in order to rigorously and reasonably assess the quality of a project in terms of its maintainability. One of the most prevalent techniques is the analysis of source code using static metrics that rigorously evaluate the characteristics of the software project. This is what this thesis is based on, as it focuses on static source code analysis and methods that will contribute to the evaluation of software quality through them. This is done as long as there is the availability of open source projects in repositories such as GitHub and can be used to build tools aiming at solving the issue. The static analysis of open-source projects through metrics is the basis of the system designed in the current thesis. The system designed and built in this thesis is to create a reliable and functionally useful process that is capable of predicting the future values of static analysis metrics. This tool essentially attempts to detect patterns of behavior of static metrics for past metrics and predict similar behavior in the future using memory. This is implemented using LSTM and GRU networks as their architecture focuses on holding information in memory for long periods of time. Since software production is growing at an increasingly rapid pace, such a tool will be a key element in a smooth and well-guided source code development path.
Ανάπτυξη συστήματος πρόβλεψης της εξέλιξης των μετρικών στατικής ανάλυσης πηγ...ISSEL
Στις μέρες μας, ο ρυθμός ανάπτυξης της τεχνολογίας και η αδιάλειπτη χρήση του διαδικτύου έχουν ως αποτέλεσμα την εξέλιξη της διαδικασίας ανάπτυξης λογισμικού με ταχύτατους ρυθμούς. Στα πολυάριθμα έργα που υλοποιούνται συνεχώς, αυτό που προβληματίζει όλο και περισσότερο τους ειδικούς στον τομέα, είναι η ομαλή ανάπτυξη του πηγαίου κώδικα γύρω από ένα πλήθος κριτηρίων που ορίζουν την ποιότητά του. Αυτό το πρόβλημα διογκώνεται κυρίως όταν υπάρχουν διλήμματα επαναχρησιμοποίησης τμημάτων κώδικα και προκύπτουν ενδοιασμοί για τη σωστότερη επιλογή. Επομένως, τέτοιου είδους θέματα καθιστούν αναγκαία την αξιολόγηση της ποιότητας τμημάτων κώδικα που είναι υποψήφια για επαναχρησιμοποίηση βάση της συντηρησιμότητάς τους. Η διαδικασία αξιολόγησης της ποιότητας του πηγαίου κώδικα ενός έργου λογισμικού αποτελεί μια χρονοβόρα και κοστοβόρα λειτουργία, καθώς περιέχει υψηλό βαθμό περιπλοκότητας ανάλογα με τις γλώσσες που περιλαμβάνει το έργο αλλά και την έκταση του. Παράλληλα, η συμβολή πολλών και διαφορετικών προγραμματιστών στην ανάπτυξη του έργου, αποτελεί καθοριστικό παράγοντα στην αύξηση των δυσκολιών σωστής αξιολόγησης. Καθώς το έργο αναπτύσσεται, η ανάγκη για έλεγχο συντηρησιμότητας τόσο από την πλευρά του μηχανικού όσο και από την πλευρά του πελάτη γίνεται πρωταρχικός σκοπός. Συνεπώς, τέτοια ζητήματα απαιτούν τεχνικές και εργαλεία που θα λαμβάνουν υπόψιν πλήθος παραμέτρων με στόχο την αυστηρή και λογική αξιολόγηση της ποιότητας ενός έργου ως προς την συντηρησιμότητα του. Μια από τις επικρατέστερες τεχνικές είναι η ανάλυση του πηγαίου κώδικα με χρήση μετρικών που αξιολογούν με αυστηρά κριτήρια τα χαρακτηριστικά του έργου λογισμικού. Πάνω σε αυτό βασίστηκε και η παρούσα διπλωματική, καθώς εστιάζει στη στατική ανάλυση πηγαίου κώδικα και σε μεθόδους που θα συμβάλλουν στην αξιολόγηση της ποιότητας λογισμικού μέσω αυτών. Αυτό γίνεται εφόσον υπάρχει διαθεσιμότητα έργων ανοιχτού κώδικα τα οποία βρίσκονται διαθέσιμα σε αποθετήρια όπως το GitHub και μπορούν να αξιοποιηθούν για τη δημιουργία εργαλείων που στοχεύουν στην επίλυση του ζητήματος. Η στατική ανάλυση έργων ανοιχτού κώδικα μέσω μετρικών αποτελεί την βάση δεδομένων του συστήματος της παρούσας διπλωματικής. Σκοπός του συστήματος που ερευνούμε σε αυτή την διπλωματική είναι η δημιουργία μιας αξιόπιστης και λειτουργικά χρήσιμης διαδικασίας που θα είναι ικανή να προβλέπει τις μελλοντικές τιμές των μετρικών στατικής ανάλυσης. Αυτό το εργαλείο ουσιαστικά προσπαθεί να ανιχνεύσει μοτίβα συμπεριφοράς των στατικών μετρικών για μετρήσεις του παρελθόντος και να προβλέπει όμοιες συμπεριφορές στο μέλλον με χρήση της μνήμης. Η υλοποίηση αυτή γίνεται με δίκτυα LSTM και GRU καθώς η αρχιτεκτονική τους εστιάζει στην συγκράτηση πληροφοριών στη μνήμη για μεγάλα χρονικά διαστήματα. Από την στιγμή που η παραγωγή λογισμικού αυξάνεται με όλο και πιο ραγδαίους ρυθμούς, ένα τέτοιο εργαλείο θα αποτελέσει βασικό στοιχείο στην ομαλή και σωστά καθοδηγούμενη πορεία ανάπτυξης του πηγαίου κώδικα.
Nowadays, the concept of software has prevailed in all aspects of human daily life, offering
significant solutions to a wide variety of issues. The need for producing reliable and functional
software within short timeframes that can adapt to possible changes is constantly increasing.
In recent years, there has been significant research activity in the field of software
development process optimization, while the vast availability of open-source software projects
in repositories such as GitHub makes accessing large volumes of code data easy. Leveraging
this information can serve as a catalyst for creating useful tools that can greatly accelerate the
software development process while improving communication and collaboration among
development teams.
This thesis presents an integrated system for automated source code formatting using
machine learning techniques. The primary goal of the system is to detect and correct
formatting errors that deviate from the standards set by the development team, ensuring its
readability and thus facilitating easier maintenance. The system utilizes LSTM deep neural
network models in combination with N-gram statistical language models for detecting
formatting errors, while a specific mechanism for correcting these errors is proposed.
Additionally, an evaluation mechanism for code formatting is proposed, aiming to quantify this
abstract concept.
The system designed within the scope of this thesis is evaluated on 8000 Java code files
obtained from the CodRep 2019 competition. Through the observation of the final results, we
conclude that the system performs effectively in both detecting and correcting formatting
errors.
Εφαρμογή Τεχνικών Εξόρυξης Δεδομένων για την Εξαγωγή Προτύπων Διόρθωσης σε Σφ...ISSEL
Τις τελευταίες δεκαετίες, τα έργα λογισµικού γίνονται όλο και µεγαλύτερα, χρησιµότερα και διεισδύουν σε όλο και περισσότερες πτυχές του ανθρώπινου ϐίου. Κατά την ανάπτυξη και τη συντήρηση λογισµικού, οι προγραµµατιστές σπαταλούν µεγάλο µέρος του χρόνου τους στον εντοπισµό και τη διόρθωση σφαλµάτων. Τα εργαλεία στατικής ανάλυσης κώδικα αυτοµατοποιούν τη διαδικασία εντοπισµού των σφαλµάτων. Η χρήση τους, ωστόσο, παραµένει περιορισµένη, καθώς η κατανόηση και η διόρθωση σφαλµάτων παραµένουν ευθύνες των προγραµµατιστών. Τα τελευταία χρόνια, πραγµατοποιούνται έρευνες για την εξόρυξη προτύπων διόρθωσης τέτοιων σφαλµάτων άλλα και την ανάπτυξη συστηµάτων αυτοµατοποιηµένης διόρθωσης σφαλµάτων. Οι πρώτες στοχεύουν στην κατανόηση του τρόπου που οι προγραµµατιστές αντιµετωπίζουν τέτοια προβλήµατα, και πολλές ϕορές τα αποτελέσµατα τους αποτελούν ϐάση για τις δεύτερες. Η παρούσα διπλωµατική, στοχεύει στην εξόρυξη χρήσιµων προτύπων διόρ ϑωσης σφαλµάτων για σφάλµατα που ανήκουν στους κανόνες του εργαλείου στατικής ανάλυσης PMD. Αρχικά, µέσω κατάλληλων ερωτηµάτων στο API του Github, αναζητο ύνται commits που αφορούν διορθώσεις τέτοιων σφαλµάτων και λαµβάνονται οι εκδόσεις των αρχείων πριν και µετά των αλλαγών των commits. Στη συνέχεια, µέσω εκτέλεσης του PMD στις δύο εκδόσεις, εντοπίζονται οι επιµέρους διορθώσεις και δηµιουργείται κα τάλληλο σύνολο δεδοµένων, αποτελούµενο αποκλειστικά από διορθώσεις σφαλµάτων, κανόνων του PMD. Οι επιµέρους διορθώσεις αναλύονται και µε αξιοποίηση της αναπα ϱάστασης κώδικα srcML και του αλγορίθµου απόστασης επεξεργασίας δέντρου Gumtree, είναι εφικτή η εξαγωγή µιας ακολουθίας όρων που είναι αντιπροσωπευτικοί για κάθε διόρθωση. ΄Ετσι, µε εύρεση του µήκους της µέγιστης κοινής υπακολουθίας µεταξύ δύο διορθώσεων, είναι εφικτή η ανάπτυξη ενός µοντέλου οµοιότητας για τις διορθώσεις συνολικά και κατ΄ επέκταση, η οµαδοποίηση τους και η εξαγωγή προτύπων διόρθω σης. Πραγµατοποιήθηκαν δύο διαφορετικά πειράµατα οµαδοποίησης : στο ένα αξιοποιήθηκε ο αλγόριθµος K-medoids και στο άλλο ο DBSCAN. Και στα δύο πειράµα τα, άλλα ιδιαίτερα σε αυτό µε τον DBSCAN, σχεδόν κάθε εξαγόµενη οµάδα αποτελείται κυρίως από διορθώσεις σφαλµάτων ενός κανόνα του PMD. Παράλληλα, µε τον υπο λογισµό του αριθµού των commits και των αποθετηρίων από τα οποία προέρχονται οι διορθώσεις κάθε οµάδας - προτύπου, ϕανερώνεται ότι οι περισσότερες οµάδες προκύπτουν από διορθώσεις προερχόµενες από µεγάλο αριθµό commits και αποθετηρίων. ΄Ετσι αντανακλούν τον τρόπο που αρκετοί προγραµµατιστές ϑα αντιµετώπιζαν παρόµοια προβλήµατα. Συνεπώς, τα εξαγόµενα πρότυπα ϑα µπορούσαν να αποτελέσουν αφετη ϱία για κάποιον µηχανισµό αυτοµατοποιηµένης διόρθωσης σφαλµάτων, ϐασιζόµενο στο PMD για τον εντοπισµό τους.
Applying Data Mining Techniques to Extract Fix Patterns for Static Analysis V...ISSEL
Contemporary Software products are getting larger and more complex. Dur ing the processes of software development and maintenance, developers spend a significant amount of their work time on detecting and fixing bugs. Static Analysis Tools automate the process of bug detection. Their application, however, is lim ited as the process of understanding and fixing of bugs, remains part of developer’s responsibilities. Lately, several research approaches aspire to extract useful bug fix patterns, or to automate the bug fixing process. The first approaches focus on understanding how developers face similar problems and frequently they serve as groundwork for systems for automated bug fixing. Our research aims at the extraction of useful bug fix patterns, for bugs that trigger the rules of the static analysis tool PMD. Initially, by querying the Github API, we search for commits that correspond to fixes of these categories of bugs. Both the before and after the commit versions of the commits’ files are downloaded. Then, by executing PMD on the two versions of each file, individual fixes are detected and a proper dataset is crafted. The dataset comprises fixes of bugs detectable from rules of PMD. The fixes are analyzed, and by utilizing srcML code representation and tree edit distance algorithm Gumtree, a representative sequence is extracted from each fix. Afterwards, by utilizing the metric of longest common subsequence between two sequences of two fixes, we develop a similarity scheme for the dataset’s fixes. This similarity scheme, operates as the base for the clustering of fixes and pattern extraction. In order to cluster the fixes, two separate experiments were conducted, one with K-medoids and one with the DBSCAN algorithm. In both experiments, but mostly with the DBSCAN algorithm, almost each cluster groups mostly bug fixes of a certain PMD rule. Alongside, by computing the number of commits and repositories from which the fixes of each cluster come from, it becomes obvious, that most of the clusters arise from fixes coming from a large number of commits and repositories. Thus, the extracted patterns correspond to the way in which similar problems are faced, by a number of different developers. Consequently, our extracted patterns, can be utilized as groundwork for an automated bug fixing system, where PMD will serve for bug detection.
Εφαρμογή Τεχνικών Εξόρυξης Δεδομένων σε Αποθήκες Λογισμικού με σκοπό την Εξα...ISSEL
Η στενή συνεργασία μεταξύ των προγραμματιστών για την ανάπτυξη καινοτόμων έργων λογισμικού κρίνεται απαραίτητη. Για αυτόν τον λόγο, υπάρχουν αρκετές διαδικτυακές πλατφόρμες φιλοξενίας προγραμμάτων, οι οποίες δίνουν τη δυνατότητα στους χρήστες τους να παρακολουθεί ο ένας τις αλλαγές, τις προτάσεις και τις παρατηρήσεις του άλλου για την εξέλιξη και τη βελτίωση του κώδικα. Επιπλέον, οι πλατφόρμες αυτές ελέγχουν τις διαφορετικές εκδόσεις του κώδικα ενός έργου, ώστε ο προγραμματιστής να μπορεί να ανατρέξει σε οποιαδήποτε από αυτές, εάν το επιθυμεί. Όλες οι τροποποιήσεις, οι οποίες διενεργούνται από ένα πρόσωπο της ομάδας ανάπτυξης λογισμικού σε μία δεδομένη χρονική στιγμή, συγκεντρώνονται σε ένα commit, όπου καταγράφονται μάλιστα όλοι οι λόγοι πίσω από αυτές. Έτσι, γίνεται κατανοητό ότι τέτοιες συλλογές αλλαγών εμπεριέχουν πολλές χρήσιμες πληροφορίες για τον τρόπο με τον οποίο εξελίσσεται ένα έργο λογισμικού. Η εφαρμογή τεχνικών του κλάδου της εξόρυξης δεδομένων στις δημόσιες αποθήκες λογισμικού και σε όλα τα δεδομένα που αναφέρθηκαν παραπάνω θα μπορούσε να φέρει στο φως ορισμένες συχνές διορθώσεις σφαλμάτων, συστηματικές τροποποιήσεις, επαναλαμβανόμενους τύπους αλλαγών στην αρχιτεκτονική, καθώς και κάποια ευρέως χρησιμοποιούμενα σχεδιαστικά πρότυπα, γνωστά ή μη. Μία εκτενής βιβλιογραφική έρευνα σε αυτόν τον τομέα αποκαλύπτει ότι οι περισσότερες προσπάθειες επιστημόνων έχουν στραφεί στις διορθώσεις σφαλμάτων και στις συστηματικές τροποποιήσεις, με αποτέλεσμα να έχουν αγνοηθεί κάποια λιγότερο λεπτομερή, δηλαδή πιο υψηλού επιπέδου (high level) μοτίβα εξέλιξης ή συγγραφής κώδικα. Στο πλαίσιο αυτό, η παρούσα διπλωματική εργασία προσπαθεί να ανακαλύψει τις σχέσεις ανάμεσα στις διάφορες κλάσεις ενός προγράμματος, αλλά και να παρακολουθήσει τον τρόπο με τον οποίο αυτές αλλάζουν στο πέρασμα του χρόνου. Για να επιτευχθούν οι παραπάνω στόχοι, προσαρμόζεται ένα εργαλείο εξαγωγής σχέσεων (Relationships Extractor), η λειτουργία του οποίου βασίζεται στην ανάλυση των Αφηρημένων Συντακτικών Δέντρων (Abstract Syntax Trees) που αφορούν τους κώδικες μερικών από τα πιο δημοφιλή έργα λογισμικού της διαδικτυακής πλατφόρμας του Github. Αφού αναλυθούν και επεξεργαστούν αυτά τα συντακτικά δέντρα, εξάγονται πληροφορίες για τη λειτουργία των κλάσεων, την αφαιρετικότητά τους και την κληρονομικότητα, οι οποίες στη συνέχεια μοντελοποιούνται σε γράφους (με τις κλάσεις ως κόμβους και τις συνδέσεις τους ως ακμές). Αφού λοιπόν ολοκληρωθούν οι παραπάνω ενέργειες για την τελική μορφή του εκάστοτε προγράμματος, η ίδια σειρά ενεργειών ακολουθείται και για κάθε στιγμιότυπό του, εξάγοντας τη διαφορά ως προς τις σχέσεις ανάμεσα στην έκδοσή του πριν και μετά από κάθε commit ξεχωριστά. Τέλος, εφαρμόζοντας τον αλγόριθμο gSpan (graph-based Substructure pattern mining), έναν αλγόριθμο αναζήτησης συχνών πογράφων σε ένα σύνολο γράφων, ανιχνεύονται ορισμένα ευρέως χρησιμοποιούμενα από την παγκόσμια προγραμματιστική κοινότητα, μοτίβα σχεδίασης και εξέλιξης λογισμικού.
Applying Data Mining Techniques on Software Repositories to Extract Design an...ISSEL
Close collaboration between software developers is considered essential in order to build innovative software projects. For this reason, there are several online program-hosting platforms, which enable their users to watch each other’s changes, recommendations and comments towards the improvement and evolution of code. These platforms also control different versions of the software code so that the developer can revert to previous ones if desired. All the modifications performed at a given time by a member of the software development team are bundled in a commit, where the main reasons behind them are also recorded. As a consequence, it goes without saying that these series of changes include a lot of useful information about the way a software project evolves. Applying data mining techniques on public software repositories and the data we discussed above could unveil some common bug fixes, systematic edits, frequent types of changes in a project’s architecture and frequently-used design patterns either known or unknown ones. An extensive bibliographic research in this domain reveals that the majority of scientific efforts has focused on bug fixes and systematic edits ignoring some more coarse-grained (high-level) code evolution or design patterns. In this context, this dissertation tries to extract the relationships between the classes of an object-oriented program, while also seeking to monitor the way they evolve over time. To achieve these goals, this diploma thesis adapts a Relationship Extractor tool based on the Abstract Syntax Trees analysis of some of the most popular software projects in Github web platform. After analyzing and processing those syntax trees, useful information is extracted concerning the operation, the abstraction level as well as the inheritance of classes. This information is then modeled as graphs (with classes as nodes and the connections between them as edges). These steps are not only executed for the latest version of a project, but also in each and every commit with a view to extracting the difference in relationships between the versions of a project before and after the specific commit. Finally, gSpan, which is a frequent-subgraph mining algorithm, is applied, in order to detect code design and evolution patterns used by the software community worldwide.
Παρουσίαση που χρησιμοποιήθηκε σε Webinar καθηγητών πληροφορικής Σερρών, Κιλκίς και Δήμων Βόλβης - Λαγκαδά, που διδάσκουν το μάθημα "Εισαγωγή στις Αρχές της Επιστήμης των Η/Υ" σε ΓΕΛ ή ΕΠΑΛ.
Nowadays, the concept of software has prevailed in all aspects of human daily life, offering
significant solutions to a wide variety of issues. The need for producing reliable and functional
software within short timeframes that can adapt to possible changes is constantly increasing.
In recent years, there has been significant research activity in the field of software
development process optimization, while the vast availability of open-source software projects
in repositories such as GitHub makes accessing large volumes of code data easy. Leveraging
this information can serve as a catalyst for creating useful tools that can greatly accelerate the
software development process while improving communication and collaboration among
development teams.
This thesis presents an integrated system for automated source code formatting using
machine learning techniques. The primary goal of the system is to detect and correct
formatting errors that deviate from the standards set by the development team, ensuring its
readability and thus facilitating easier maintenance. The system utilizes LSTM deep neural
network models in combination with N-gram statistical language models for detecting
formatting errors, while a specific mechanism for correcting these errors is proposed.
Additionally, an evaluation mechanism for code formatting is proposed, aiming to quantify this
abstract concept.
The system designed within the scope of this thesis is evaluated on 8000 Java code files
obtained from the CodRep 2019 competition. Through the observation of the final results, we
conclude that the system performs effectively in both detecting and correcting formatting
errors.
Εφαρμογή Τεχνικών Εξόρυξης Δεδομένων για την Εξαγωγή Προτύπων Διόρθωσης σε Σφ...ISSEL
Τις τελευταίες δεκαετίες, τα έργα λογισµικού γίνονται όλο και µεγαλύτερα, χρησιµότερα και διεισδύουν σε όλο και περισσότερες πτυχές του ανθρώπινου ϐίου. Κατά την ανάπτυξη και τη συντήρηση λογισµικού, οι προγραµµατιστές σπαταλούν µεγάλο µέρος του χρόνου τους στον εντοπισµό και τη διόρθωση σφαλµάτων. Τα εργαλεία στατικής ανάλυσης κώδικα αυτοµατοποιούν τη διαδικασία εντοπισµού των σφαλµάτων. Η χρήση τους, ωστόσο, παραµένει περιορισµένη, καθώς η κατανόηση και η διόρθωση σφαλµάτων παραµένουν ευθύνες των προγραµµατιστών. Τα τελευταία χρόνια, πραγµατοποιούνται έρευνες για την εξόρυξη προτύπων διόρθωσης τέτοιων σφαλµάτων άλλα και την ανάπτυξη συστηµάτων αυτοµατοποιηµένης διόρθωσης σφαλµάτων. Οι πρώτες στοχεύουν στην κατανόηση του τρόπου που οι προγραµµατιστές αντιµετωπίζουν τέτοια προβλήµατα, και πολλές ϕορές τα αποτελέσµατα τους αποτελούν ϐάση για τις δεύτερες. Η παρούσα διπλωµατική, στοχεύει στην εξόρυξη χρήσιµων προτύπων διόρ ϑωσης σφαλµάτων για σφάλµατα που ανήκουν στους κανόνες του εργαλείου στατικής ανάλυσης PMD. Αρχικά, µέσω κατάλληλων ερωτηµάτων στο API του Github, αναζητο ύνται commits που αφορούν διορθώσεις τέτοιων σφαλµάτων και λαµβάνονται οι εκδόσεις των αρχείων πριν και µετά των αλλαγών των commits. Στη συνέχεια, µέσω εκτέλεσης του PMD στις δύο εκδόσεις, εντοπίζονται οι επιµέρους διορθώσεις και δηµιουργείται κα τάλληλο σύνολο δεδοµένων, αποτελούµενο αποκλειστικά από διορθώσεις σφαλµάτων, κανόνων του PMD. Οι επιµέρους διορθώσεις αναλύονται και µε αξιοποίηση της αναπα ϱάστασης κώδικα srcML και του αλγορίθµου απόστασης επεξεργασίας δέντρου Gumtree, είναι εφικτή η εξαγωγή µιας ακολουθίας όρων που είναι αντιπροσωπευτικοί για κάθε διόρθωση. ΄Ετσι, µε εύρεση του µήκους της µέγιστης κοινής υπακολουθίας µεταξύ δύο διορθώσεων, είναι εφικτή η ανάπτυξη ενός µοντέλου οµοιότητας για τις διορθώσεις συνολικά και κατ΄ επέκταση, η οµαδοποίηση τους και η εξαγωγή προτύπων διόρθω σης. Πραγµατοποιήθηκαν δύο διαφορετικά πειράµατα οµαδοποίησης : στο ένα αξιοποιήθηκε ο αλγόριθµος K-medoids και στο άλλο ο DBSCAN. Και στα δύο πειράµα τα, άλλα ιδιαίτερα σε αυτό µε τον DBSCAN, σχεδόν κάθε εξαγόµενη οµάδα αποτελείται κυρίως από διορθώσεις σφαλµάτων ενός κανόνα του PMD. Παράλληλα, µε τον υπο λογισµό του αριθµού των commits και των αποθετηρίων από τα οποία προέρχονται οι διορθώσεις κάθε οµάδας - προτύπου, ϕανερώνεται ότι οι περισσότερες οµάδες προκύπτουν από διορθώσεις προερχόµενες από µεγάλο αριθµό commits και αποθετηρίων. ΄Ετσι αντανακλούν τον τρόπο που αρκετοί προγραµµατιστές ϑα αντιµετώπιζαν παρόµοια προβλήµατα. Συνεπώς, τα εξαγόµενα πρότυπα ϑα µπορούσαν να αποτελέσουν αφετη ϱία για κάποιον µηχανισµό αυτοµατοποιηµένης διόρθωσης σφαλµάτων, ϐασιζόµενο στο PMD για τον εντοπισµό τους.
Applying Data Mining Techniques to Extract Fix Patterns for Static Analysis V...ISSEL
Contemporary Software products are getting larger and more complex. Dur ing the processes of software development and maintenance, developers spend a significant amount of their work time on detecting and fixing bugs. Static Analysis Tools automate the process of bug detection. Their application, however, is lim ited as the process of understanding and fixing of bugs, remains part of developer’s responsibilities. Lately, several research approaches aspire to extract useful bug fix patterns, or to automate the bug fixing process. The first approaches focus on understanding how developers face similar problems and frequently they serve as groundwork for systems for automated bug fixing. Our research aims at the extraction of useful bug fix patterns, for bugs that trigger the rules of the static analysis tool PMD. Initially, by querying the Github API, we search for commits that correspond to fixes of these categories of bugs. Both the before and after the commit versions of the commits’ files are downloaded. Then, by executing PMD on the two versions of each file, individual fixes are detected and a proper dataset is crafted. The dataset comprises fixes of bugs detectable from rules of PMD. The fixes are analyzed, and by utilizing srcML code representation and tree edit distance algorithm Gumtree, a representative sequence is extracted from each fix. Afterwards, by utilizing the metric of longest common subsequence between two sequences of two fixes, we develop a similarity scheme for the dataset’s fixes. This similarity scheme, operates as the base for the clustering of fixes and pattern extraction. In order to cluster the fixes, two separate experiments were conducted, one with K-medoids and one with the DBSCAN algorithm. In both experiments, but mostly with the DBSCAN algorithm, almost each cluster groups mostly bug fixes of a certain PMD rule. Alongside, by computing the number of commits and repositories from which the fixes of each cluster come from, it becomes obvious, that most of the clusters arise from fixes coming from a large number of commits and repositories. Thus, the extracted patterns correspond to the way in which similar problems are faced, by a number of different developers. Consequently, our extracted patterns, can be utilized as groundwork for an automated bug fixing system, where PMD will serve for bug detection.
Εφαρμογή Τεχνικών Εξόρυξης Δεδομένων σε Αποθήκες Λογισμικού με σκοπό την Εξα...ISSEL
Η στενή συνεργασία μεταξύ των προγραμματιστών για την ανάπτυξη καινοτόμων έργων λογισμικού κρίνεται απαραίτητη. Για αυτόν τον λόγο, υπάρχουν αρκετές διαδικτυακές πλατφόρμες φιλοξενίας προγραμμάτων, οι οποίες δίνουν τη δυνατότητα στους χρήστες τους να παρακολουθεί ο ένας τις αλλαγές, τις προτάσεις και τις παρατηρήσεις του άλλου για την εξέλιξη και τη βελτίωση του κώδικα. Επιπλέον, οι πλατφόρμες αυτές ελέγχουν τις διαφορετικές εκδόσεις του κώδικα ενός έργου, ώστε ο προγραμματιστής να μπορεί να ανατρέξει σε οποιαδήποτε από αυτές, εάν το επιθυμεί. Όλες οι τροποποιήσεις, οι οποίες διενεργούνται από ένα πρόσωπο της ομάδας ανάπτυξης λογισμικού σε μία δεδομένη χρονική στιγμή, συγκεντρώνονται σε ένα commit, όπου καταγράφονται μάλιστα όλοι οι λόγοι πίσω από αυτές. Έτσι, γίνεται κατανοητό ότι τέτοιες συλλογές αλλαγών εμπεριέχουν πολλές χρήσιμες πληροφορίες για τον τρόπο με τον οποίο εξελίσσεται ένα έργο λογισμικού. Η εφαρμογή τεχνικών του κλάδου της εξόρυξης δεδομένων στις δημόσιες αποθήκες λογισμικού και σε όλα τα δεδομένα που αναφέρθηκαν παραπάνω θα μπορούσε να φέρει στο φως ορισμένες συχνές διορθώσεις σφαλμάτων, συστηματικές τροποποιήσεις, επαναλαμβανόμενους τύπους αλλαγών στην αρχιτεκτονική, καθώς και κάποια ευρέως χρησιμοποιούμενα σχεδιαστικά πρότυπα, γνωστά ή μη. Μία εκτενής βιβλιογραφική έρευνα σε αυτόν τον τομέα αποκαλύπτει ότι οι περισσότερες προσπάθειες επιστημόνων έχουν στραφεί στις διορθώσεις σφαλμάτων και στις συστηματικές τροποποιήσεις, με αποτέλεσμα να έχουν αγνοηθεί κάποια λιγότερο λεπτομερή, δηλαδή πιο υψηλού επιπέδου (high level) μοτίβα εξέλιξης ή συγγραφής κώδικα. Στο πλαίσιο αυτό, η παρούσα διπλωματική εργασία προσπαθεί να ανακαλύψει τις σχέσεις ανάμεσα στις διάφορες κλάσεις ενός προγράμματος, αλλά και να παρακολουθήσει τον τρόπο με τον οποίο αυτές αλλάζουν στο πέρασμα του χρόνου. Για να επιτευχθούν οι παραπάνω στόχοι, προσαρμόζεται ένα εργαλείο εξαγωγής σχέσεων (Relationships Extractor), η λειτουργία του οποίου βασίζεται στην ανάλυση των Αφηρημένων Συντακτικών Δέντρων (Abstract Syntax Trees) που αφορούν τους κώδικες μερικών από τα πιο δημοφιλή έργα λογισμικού της διαδικτυακής πλατφόρμας του Github. Αφού αναλυθούν και επεξεργαστούν αυτά τα συντακτικά δέντρα, εξάγονται πληροφορίες για τη λειτουργία των κλάσεων, την αφαιρετικότητά τους και την κληρονομικότητα, οι οποίες στη συνέχεια μοντελοποιούνται σε γράφους (με τις κλάσεις ως κόμβους και τις συνδέσεις τους ως ακμές). Αφού λοιπόν ολοκληρωθούν οι παραπάνω ενέργειες για την τελική μορφή του εκάστοτε προγράμματος, η ίδια σειρά ενεργειών ακολουθείται και για κάθε στιγμιότυπό του, εξάγοντας τη διαφορά ως προς τις σχέσεις ανάμεσα στην έκδοσή του πριν και μετά από κάθε commit ξεχωριστά. Τέλος, εφαρμόζοντας τον αλγόριθμο gSpan (graph-based Substructure pattern mining), έναν αλγόριθμο αναζήτησης συχνών πογράφων σε ένα σύνολο γράφων, ανιχνεύονται ορισμένα ευρέως χρησιμοποιούμενα από την παγκόσμια προγραμματιστική κοινότητα, μοτίβα σχεδίασης και εξέλιξης λογισμικού.
Applying Data Mining Techniques on Software Repositories to Extract Design an...ISSEL
Close collaboration between software developers is considered essential in order to build innovative software projects. For this reason, there are several online program-hosting platforms, which enable their users to watch each other’s changes, recommendations and comments towards the improvement and evolution of code. These platforms also control different versions of the software code so that the developer can revert to previous ones if desired. All the modifications performed at a given time by a member of the software development team are bundled in a commit, where the main reasons behind them are also recorded. As a consequence, it goes without saying that these series of changes include a lot of useful information about the way a software project evolves. Applying data mining techniques on public software repositories and the data we discussed above could unveil some common bug fixes, systematic edits, frequent types of changes in a project’s architecture and frequently-used design patterns either known or unknown ones. An extensive bibliographic research in this domain reveals that the majority of scientific efforts has focused on bug fixes and systematic edits ignoring some more coarse-grained (high-level) code evolution or design patterns. In this context, this dissertation tries to extract the relationships between the classes of an object-oriented program, while also seeking to monitor the way they evolve over time. To achieve these goals, this diploma thesis adapts a Relationship Extractor tool based on the Abstract Syntax Trees analysis of some of the most popular software projects in Github web platform. After analyzing and processing those syntax trees, useful information is extracted concerning the operation, the abstraction level as well as the inheritance of classes. This information is then modeled as graphs (with classes as nodes and the connections between them as edges). These steps are not only executed for the latest version of a project, but also in each and every commit with a view to extracting the difference in relationships between the versions of a project before and after the specific commit. Finally, gSpan, which is a frequent-subgraph mining algorithm, is applied, in order to detect code design and evolution patterns used by the software community worldwide.
Παρουσίαση που χρησιμοποιήθηκε σε Webinar καθηγητών πληροφορικής Σερρών, Κιλκίς και Δήμων Βόλβης - Λαγκαδά, που διδάσκουν το μάθημα "Εισαγωγή στις Αρχές της Επιστήμης των Η/Υ" σε ΓΕΛ ή ΕΠΑΛ.
Εσωτερικό Σεμινάριο SoDaNet στην χρήση των εργαλείων τεκμηρίωσης και διαχείρι...
Data Mining & Applications (presentation)
1. DATA MINING ΚΑΙ ΕΦΑΡΜΟΓEΣ
ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΕΙΡΑΙΩΣ
ΣΧΟΛΗΤΕΧΝΟΛΟΓΙΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ
ΚΑΙΤΗΛΕΠΙΚΟΙΝΩΝΙΩΝ
ΤΜΗΜΑΨΗΦΙΑΚΩΝ ΣΥΣΤΗΜΑΤΩΝ
ΦΟΙΤΗΤΗΣ : Κωνσταντίνος Βουκελάτος
ΑΜ ΦΟΙΤΗΤΗ : E 13032 .
EΠΙΒΛΕΠΩΝ ΚΑΘΗΓΗΤΗΣ:
Αναπληρωτής Καθηγητής Μιχαήλ Φιλιππάκης
ΠΕΙΡΑΙΑΣ,ΟΚΤΩΒΡΙΟΣ 2021
2. Η ραγδαία ακμή των τεχνολογιών της Πληροφορικής και του
Διαδικτύου, έχει επιφέρει συσσώρευση δεδομένων στην σημερινή
κοινωνία. Πλέον κάθε τομέας της κοινωνίας αυτής, καθώς και των
επιστημών που στοχεύουν στην εξέλιξη της, είναι συνυφασμένος με την
Στατιστική Επεξεργασία Πληροφοριών. Εκεί δημιουργείται ο
επιστημονικός κλάδος της Εξόρυξης Δεδομένων (Data Mining) και
κυρίως της Ανακάλυψης Γνώσης από τα Δεδομένα αυτά (Knowledge
Discover in Databases).
Κύριος στόχος της παρούσας πτυχιακής εργασίας, είναι η
κατανόηση των εννοιών και των πρακτικών, από τον κόσμο του
Data Mining, τα προβλήματα και οι δυσκολίες λόγω όγκου, καθώς
και η σημασία της εξαγόμενης πληροφορίας.
Στο 1ο μέρος γίνεται μια εισαγωγή στον «Κόσμο των Δεδομένων».
Στο 2ο μέρος, γίνεται αναφορά στην δομή της Εξόρυξης Δεδομένων. Στο
3ο μέρος αναφέρονται και συγκρίνονται τα βασικά Αλγοριθμικά Μοντέλα
Εξόρυξης. Στο 4ο μέρος θα γίνει η χρήση του, του WEKA 3.8.5 ενός open
source συστήματος για την επεξεργασία των Δεδομένων, όπου θα
εφαρμόσουμε κάποιους από τους προαναφερθέντες αλγόριθμους.
ΕΙΣΑΓΩΓΗ
&
ΣΚΟΠΟΣΤΗΣ ΕΡΓΑΣΙΑΣ
3/11/2021
3. Data Mining
Με τον όρο εξόρυξη δεδομένων αναφερόμαστε στην εφαρμογή
στατιστικών και υπολογιστικών μεθόδων σε δεδομένα με σκοπό την
εξαγωγή χρήσιμης πληροφορίας, όπως η κατηγοριοποίηση των
δεδομένων ή η δημιουργία μοντέλων πρόβλεψης.
Συνδυάζει κλάδους όπως η Μηχανική Μάθηση, Στατιστική και
Τεχνική Νοημοσύνη
Knowledge Discovery in Databases
Η Ανακάλυψη Γνώσης από Δεδομένα, είναι μία διαδικασία πολλών
βημάτων, ένα εκ των οποίων η Data Mining.
Κεφάλαιο 1ο
ΕΞΟΡΥΞΗ ΔΕΔΟΜΕΝΩΝ
&
ΑΝΑΚΑΛΥΨΗ ΓΝΩΣΗΣ
3/11/2021
Data
Collectio
n
Pre-
Processin
g
Data
Mining
Evaluation
Trans
formation
4. Δομή
Τα μοντέλα Εξόρυξης Δεδομένων είναι δύο:
Predictive / Πρόβλεψης Πρόβλεψη τιμών, χαρακτηριστικού
Descriptive / Περιγραφικό Αναγνώριση προτύπων & σχέσεων
Τεχνικές
Κεφάλαιο 2ο
ΔΟΜΗ ,
ΔΙΕΡΓΑΣΙΕΣ
&
ΤΕΧΝΙΚΕΣ
3/11/2021
ΠΡΟΒΛΕΨΗΣ
Classification / Κατηγοριοποίηση
Δεδομένα σε ομάδες (κλάσεις)
Regression / Παλινδρόμηση
Δεδομένα(σημεία) μίας συνάρτηση
Time Series Analysis
Τιμές σε συνάρτηση με το χρόνο
Prediction / Πρόβλεψη
Ανάθεση μελλοντικών τιμών
ΠΕΡΙΓΡΑΦΙΚΟ
Clustering / Συσταδιοποίηση
Διαχωρισμός συνόλου σε ομάδες
Summarization / Σύνοψη
Δεδομένα σε υποσύνολα
Association Rules / Καν.
Συσχέτισης
Συσχέτιση Δεδομένων
Sequence Discovery / Ακολουθίες
Σειριακά Πρότυπα σε Δεδομένα
5. Κεφάλαιο 3ο
ΑΛΓΟΡΙΘΜΙΚΑ
ΜΟΝΤΕΛΑ
ΕΞΟΡΥΞΗΣ
3/11/2021
Classification Algorithms
ID3 ευκολία
• Από τους βασικότερους
αλγορίθμους ταξινόμησης
• Παράγει δέντρα απόφασης
(προτιμά μικρά δέντρα)
• Κυρίως στο Machine Learning
C4.5 ευκολία
• No1 Αλγόριθμος Ταξινόμησης
• Εξέλιξη του ID3
• Ακόμα και για ελλιπή δεδομένα
• Αναπτύσσει δέντρο,
φτιάχνοντας κανόνες απόφασης
SVM ακρίβεια
• Νέος, Ευρείας χρήσης
• Γραμμική χαρτογράφηση για
μετασχηματισμό δεδομένων
• Γραμμική και μη ανάλυση
Clustering Algorithms
K-Means ευκολία
• O πιο συχνός σε χρήση για
συσταδιοποίηση
• Μόνο για αριθμητικά δεδομένα
K-Modes
• Εξέλιξη του K-Means
• Αριθμητικά και Κατηγορικά
δεδομένα
EM ευελιξία
• Προτίμηση χρηστών
• «χαμένα δεδομένα» ως ένα
τυχαίο δείγμα που καθορίζουν
τις ομάδες
Denclue
ταχύτητα
• Νέος με συναρτήσεις για την
πυκνότητα του χώρου
6. Κεφάλαιο 3ο
ΑΛΓΟΡΙΘΜΙΚΑ
ΜΟΝΤΕΛΑ
ΕΞΟΡΥΞΗΣ
3/11/2021
Bayesian Algorithms
Naïve απόδοση
• Βασίζεται στον Bayes
• Ανεξαρτητοποίηση δεδομένων
• Υψηλή απόδοση
• Απαιτεί λίγα δεδομένα
• Αβεβαιότητα διεκπεραίωσης
Belief Networks φιλικό
• Βασίζεται στον Bayes
• Εξαρτήσεις δεδομένων
• Ο χρήστης διαλέγει
ανεξαρτησία
Association Rules Algorithms
Apriori
ευκολία
• O βασικότερος αλγόριθμος όλων
των κανόνων συσχέτισης
• Εντοπίζει μεγάλες λίστες,
κάνοντας συνεχείς προσπελάσεις
• Βέβαια είναι αργός
ΣΥΜΠΕΡΑΣΜΑ
Η επιλογή αλγοριθμικών μοντέλων γίνεται βάσει των δεδομένων, της
ακρίβειας του αποτελέσματος και του ρυθμού διεργασιών
7. WEEKA 3.8.5
Ένα από τα πιο γνωστά συστήματα για την Εξόρυξη Δεδομένων
είναι το σύστημα WEKA, το οποίο αναπτύχθηκε από το
Πανεπιστήμιο του Waikato στην Νέα Ζηλανδία.
Είναι γραμμένο σε Java και περιέχει μια μεγάλη συλλογή
αλγορίθμων και εργαλείων για θέματα εξόρυξης δεδομένων
ΕΦΑΡΜΟΓΗ
Για το πρακτικό κομμάτι της πτυχιακής, θα χρησιμοποιήσουμε ένα
σύνολο δεδομένων και θα εφαρμόσουμε μέσω του WEEKA,
κάποιους από τους προαναφερθέντες αλγορίθμους.
Το δείγμα είναι από χρωματισμένα «γυαλιά», η σύσταση των
οποίων αποτελείται από αναμείξεις 9 φυσικών στοιχείων. Το αρχείο
είναι μορφής .csv
Κεφάλαιο 4ο
ΕΦΑΡΜΟΓΗ
W E E K A
3 . 8 . 5
3/11/2021
9. 3/11/2021
Βήμα 3 : Το αρχείο μορφής .csv για προ-επεξεργασία Βήμα 4: Είμαστε στην ενότητα της Προ-επεξεργασίας.
10. 3/11/2021
Βλέπουμε για κάθε στοιχείο τιμές. Για το Na έχουμε
πλήθος στοιχείων (214), min (10.73), max(17.38) ,
κέντρο τιμών (13.408)
Για πεδίο (πχ Type) που δεν αποτελείται από αριθμούς
αλλά από ονόματα, θα έχω άλλα attributes (τιμές
χρωμάτων, count, weight)
11. 3/11/2021
Πατώντας το κουμπί Visualize All μπορούμε να έχουμε σε ένα παράθυρο όλα τα γραφήματα από όλες τις
μεταβλητές μας. Σχηματική οπτικοποίηση όλων των πεδίων. Εδώ τελειώνει η προ-επεξεργασία και
συνεχίζουμε με την ταξινόμηση του συνόλου δεδομένων. Υπάρχουν οι ενότητες Classify, Cluster και
Assosiate που περιέχουν τα Αλγοριθμικά Μοντέλα που αναφέραμε πιο πριν.
12. 3/11/2021
Βήμα 5 : Στην ενότητα Classify, ανατρέχοντας τους
αλγορίθμους ταξινόμησης θα επιλέξουμε τον J48
Βήμα 6: Πατώντας Start εκκινεί ο αλγόριθμος
14. 3/11/2021
Στο τέλος παρατηρούμε και τον πίνακα ταξινόμησης. Ενώ πατώντας δεξί κλικ και την επιλογή Visualize Tree
εξάγουμε το Δέντρο Απόφασης
15. 3/11/2021
Ας τρέξουμε και ένα αλγόριθμο Συσταδιοποίησης. Επιλέγω Cluster , K-Means , Start και βλέπω τον Αλγόριθμο.
16. 3/11/2021
Παρατηρώ ότι το αποτέλεσμα για ένα cluster είναι 59%. Ενώ με δεξί κλικ και Visualization Cluster Assignments
θα εξάγω μια απεικόνιση των συστάδων
17. 3/11/2021
Ας δούμε τώρα και ένα Γράφο. Επιλέγω Classify , Bayesian Networks , Start και βλέπω τον Αλγόριθμο.
Το ποσοστό επιτυχίας ταξινόμησης αγγίζει το 70.5607%
18. 3/11/2021
Τέλος παρατηρώ τον πίνακα ταξινόμησης, ενώ πατώντας δεξί κλικ και
Visualize Graph θα εξάγω μια απεικόνιση του Γράφου
19. WEEKA 3.8.5
Με το σύνολο δεδομένων που επιλέξαμε, ανάμεσα σε 3 τυχαίους
αλγορίθμους ταξινόμησης, ο Bayesian Belief Networks είχε καλύτερο
ποσοστό σωστής ταξινόμησης με 70.5%. Υπάρχουν ωστόσο και άλλες
αλγοριθμικές διαδικασίες αλλά και συνδυασμός αυτών που ίσως να
ταξινομούσε καλύτερα το δείγμα. Έτσι λοιπόν :
Η Εξόρυξη εξαρτάται και από την διαδικασία και από το δείγμα.
Σύνοψη
Με την χρήση τεχνολογιών που ταξινομούν εύκολα και γρήγορα,
χαοτικά και τεράστια πακέτα δεδομένων, μπορούμε να εξάγουμε
πληροφορίες, βοηθώντας τον άνθρωπο και την κοινωνία να
αξιοποιήσει πολλούς πόρους που μέχρι πρότινος δυσκολευόταν.
Η Εξόρυξη Δεδομένων και η Εξαγωγή Γνώσης από αυτά είναι
απαραίτητες σύγχρονες επιστημονικές διαδικασίες
Κεφάλαιο 5ο
ΣΥΜΠΕΡΑΣΜΑΤΑ
&
ΣΥΝΟΨΗ
3/11/2021