Εφαρμογή Τεχνικών Εξόρυξης Δεδομένων σε Αποθήκες Λογισμικού με σκοπό την Εξα...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.
Theofilos Georgiadis: Library recommendation system for the reuse of software...Manos Tsardoulias
This system helps developers when searching for python libraries. The developer constructs the query in natural language and the system returns the 10 most relevant libraries. It is based on a graph, its nodes are constructed by keywords and libraries that was extracted from a set of open source projects. For every keyword that is present with a library we connect the two nodes with an edge. For every time that a keyword is present with a library, the weight of the edge is increased by one. Using this graph we extract representations of the graph's nodes. Lastly using these representations and a method for calculating the similarity, we calculate the similarity of each library with each keyword and we extract a recommendation for the 10 libraries with the highest value of similarity.
Εφαρμογή Τεχνικών Εξόρυξης Δεδομένων για την Εξαγωγή Προτύπων Διόρθωσης σε Σφ...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
Σήμερα, η ανάπτυξη της τεχνολογίας και η αξιοποίηση της σε όλους τους τομείς της ζωής του ανθρώπου, δημιουργεί την ανάγκη για λογισμικό που είναι έυκολα προσαρμόσιμο, ευπαρουσίαστο, επιλύει πολλούς τύπους προβλημάτων, είναι οικονομικό και αξιόπιστο. Η Μοντελοστραφής Μηχανική (MDE), δηλαδή η ανάπτυξη λογισμικού που στηρίζεται σε μοντέλα, η αυτόματη παραγωγή κώδικα με βάση αυτά τα μοντέλα, η δυνατότητα γραφικής απεικόνισης του λογισμικού σε συνδυασμό με τις τεχνικές του Αυτοματοποιημένου Ελέγχου Συμπερασμών (Automated Reasoning) καλύπτουν ανά περίπτωση τις παραπάνω ανάγκες. Στην παρούσα διπλωματική εργασία, έγινε αξιοποίηση όλων των παραπάνω τεχνικών για την κατασκευή ενός ολοκληρωμένου εργαλείου, στην πλατφόρμα του Eclipse, με στόχο την κάλυψη των προαναφερθέντων αναγκών. Πιο συγκεκριμένα στα πλαίσια της Μοντελοστραφούς Μηχανικής (MDE) κατασκευάστηκε ένα μέτα-μοντέλο που αποτελεί τον πηρύνα του συστήματος και ενσωματώνει όρους από το πεδίο του Λογισμού. Στη συνέχεια, πάνω σε αυτό δημιουργήθηκε μια γραφική διεπαφή, στο περιβάλλον του Sirius, που δίνει την δυνατότητα στον ενδιαφερόμενο να καταγράψει, με γραφικό τρόπο, το μοντέλο που επιθυμεί. Η καταγραφή του μοντέλου γίνεται με την μορφή εξισώσεων σωστά διατυπωμένων στα πρότυπα της Κατηγορηματικής Λογικής Πρώτης Τάξης (FOL). Από αυτό το μοντέλο ύστερα, παράγεται αυτόματα κώδικας Java, ο οποίος αξιοποιώντας συναρτήσεις και αντικείμενα της βιβλιοθήκης TweetyProject, διαμορφώνεται κατάλληλα ώστε να αποτελεί έγκυρη είσοδο για τον built-in prover της ίδιας βιβλιοθήκης που μπορεί να πραγματοποιεί λογικούς ελέγχους στα πρότυπα του Αυτοματοποιημένου Ελέγχου Συμπερασμών. Μερικές ακόμα βοηθητικές συναρτήσεις σε Java, ολοκληρώνουν το εργαλείο της διπλωματικής. Όλα τα παραπάνω καθιστούν, το σύστημα που αναπτύχθηκε σε αυτή την διπλωματική, ικανό να χρησιμοποιηθεί από διάφορους υπάρχοντες μηχανισμούς αυτόματης παραγωγής συστημάτων, προκειμένου να ελέγξουν την εγκυρότητα των υπό σχεδίαση συστημάτων, δίχως κάποιος να απαιτείται να υλοποιήσει λογισμικό που κάνει λογικούς συμπερασμούς.
Design and Implementation of a Mechanism that automates the generation of Sof...ISSEL
Today, the development of technology and its utilization in all areas of human life, creates the need for software that is easily customizable, presentable, solves many types of problems, is economical and reliable. Model-Driven Engineering (MDE), ie software development based on models, the automatic production of code based on these models, the ability to graphically display the software, in combination with the techniques of Automated Reasoning meet the above needs. In the current diploma thesis, in order to meet the aforementioned needs, all the above techniques were utilized for the construction of a complete software tool, on the Eclipse platform. More specifically, in the framework of Model-Driven Engineering (MDE), a meta model was constructed which constitutes the core of the system and incorporates terms from the field of Logic. Expanding on this, a graphical interface was created, in the Sirius environment, which allows the interested party to construct, in a graphic way, the model he wants. The construction of the model is done in the form of equations, correctly formulated in the standards of First Order Logic (FOL). From this model, Java code is automatically generated, which utilizing functions and objects of the TweetyProject library, is properly configured to be a valid input for the built-in prover of the same library, that can perform logical tests in the standards of Automated Logic. Some more functions written in Java, complete the software tool of this diploma thesis. All of the above, constitute the software tool developed in this diploma, capable of being used by various mechanisms that automatically produce systems, in order to check the validity of the systems under design, without the need to implement additional software that draws logical conclusions.
Εφαρμογή Τεχνικών Εξόρυξης Δεδομένων σε Αποθήκες Λογισμικού με σκοπό την Εξα...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.
Theofilos Georgiadis: Library recommendation system for the reuse of software...Manos Tsardoulias
This system helps developers when searching for python libraries. The developer constructs the query in natural language and the system returns the 10 most relevant libraries. It is based on a graph, its nodes are constructed by keywords and libraries that was extracted from a set of open source projects. For every keyword that is present with a library we connect the two nodes with an edge. For every time that a keyword is present with a library, the weight of the edge is increased by one. Using this graph we extract representations of the graph's nodes. Lastly using these representations and a method for calculating the similarity, we calculate the similarity of each library with each keyword and we extract a recommendation for the 10 libraries with the highest value of similarity.
Εφαρμογή Τεχνικών Εξόρυξης Δεδομένων για την Εξαγωγή Προτύπων Διόρθωσης σε Σφ...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
Σήμερα, η ανάπτυξη της τεχνολογίας και η αξιοποίηση της σε όλους τους τομείς της ζωής του ανθρώπου, δημιουργεί την ανάγκη για λογισμικό που είναι έυκολα προσαρμόσιμο, ευπαρουσίαστο, επιλύει πολλούς τύπους προβλημάτων, είναι οικονομικό και αξιόπιστο. Η Μοντελοστραφής Μηχανική (MDE), δηλαδή η ανάπτυξη λογισμικού που στηρίζεται σε μοντέλα, η αυτόματη παραγωγή κώδικα με βάση αυτά τα μοντέλα, η δυνατότητα γραφικής απεικόνισης του λογισμικού σε συνδυασμό με τις τεχνικές του Αυτοματοποιημένου Ελέγχου Συμπερασμών (Automated Reasoning) καλύπτουν ανά περίπτωση τις παραπάνω ανάγκες. Στην παρούσα διπλωματική εργασία, έγινε αξιοποίηση όλων των παραπάνω τεχνικών για την κατασκευή ενός ολοκληρωμένου εργαλείου, στην πλατφόρμα του Eclipse, με στόχο την κάλυψη των προαναφερθέντων αναγκών. Πιο συγκεκριμένα στα πλαίσια της Μοντελοστραφούς Μηχανικής (MDE) κατασκευάστηκε ένα μέτα-μοντέλο που αποτελεί τον πηρύνα του συστήματος και ενσωματώνει όρους από το πεδίο του Λογισμού. Στη συνέχεια, πάνω σε αυτό δημιουργήθηκε μια γραφική διεπαφή, στο περιβάλλον του Sirius, που δίνει την δυνατότητα στον ενδιαφερόμενο να καταγράψει, με γραφικό τρόπο, το μοντέλο που επιθυμεί. Η καταγραφή του μοντέλου γίνεται με την μορφή εξισώσεων σωστά διατυπωμένων στα πρότυπα της Κατηγορηματικής Λογικής Πρώτης Τάξης (FOL). Από αυτό το μοντέλο ύστερα, παράγεται αυτόματα κώδικας Java, ο οποίος αξιοποιώντας συναρτήσεις και αντικείμενα της βιβλιοθήκης TweetyProject, διαμορφώνεται κατάλληλα ώστε να αποτελεί έγκυρη είσοδο για τον built-in prover της ίδιας βιβλιοθήκης που μπορεί να πραγματοποιεί λογικούς ελέγχους στα πρότυπα του Αυτοματοποιημένου Ελέγχου Συμπερασμών. Μερικές ακόμα βοηθητικές συναρτήσεις σε Java, ολοκληρώνουν το εργαλείο της διπλωματικής. Όλα τα παραπάνω καθιστούν, το σύστημα που αναπτύχθηκε σε αυτή την διπλωματική, ικανό να χρησιμοποιηθεί από διάφορους υπάρχοντες μηχανισμούς αυτόματης παραγωγής συστημάτων, προκειμένου να ελέγξουν την εγκυρότητα των υπό σχεδίαση συστημάτων, δίχως κάποιος να απαιτείται να υλοποιήσει λογισμικό που κάνει λογικούς συμπερασμούς.
Design and Implementation of a Mechanism that automates the generation of Sof...ISSEL
Today, the development of technology and its utilization in all areas of human life, creates the need for software that is easily customizable, presentable, solves many types of problems, is economical and reliable. Model-Driven Engineering (MDE), ie software development based on models, the automatic production of code based on these models, the ability to graphically display the software, in combination with the techniques of Automated Reasoning meet the above needs. In the current diploma thesis, in order to meet the aforementioned needs, all the above techniques were utilized for the construction of a complete software tool, on the Eclipse platform. More specifically, in the framework of Model-Driven Engineering (MDE), a meta model was constructed which constitutes the core of the system and incorporates terms from the field of Logic. Expanding on this, a graphical interface was created, in the Sirius environment, which allows the interested party to construct, in a graphic way, the model he wants. The construction of the model is done in the form of equations, correctly formulated in the standards of First Order Logic (FOL). From this model, Java code is automatically generated, which utilizing functions and objects of the TweetyProject library, is properly configured to be a valid input for the built-in prover of the same library, that can perform logical tests in the standards of Automated Logic. Some more functions written in Java, complete the software tool of this diploma thesis. All of the above, constitute the software tool developed in this diploma, capable of being used by various mechanisms that automatically produce systems, in order to check the validity of the systems under design, without the need to implement additional software that draws logical conclusions.
Διδακτέα - Εξεταστέα ύλη για το μάθημα "Οικονομία" (ΑΟΘ) της Γ τάξης του Επαγγελματικού λυκείου. Μπορείτε να δείτε και αναλυτικά την ύλη του μαθήματος επιλέγοντας τον παρακάτω σύνδεσμο:
https://view.genially.com/6450d17ad94e2600194eb286
4. Ανάπτυξη Εφαρμογών σε
Προγραμματιστικό Περιβάλλον 4
Μέτρηση χρόνου (στην αρχαιότητα)
Κοινωνικά προβλήματα (ναρκωτικά, ανεργία)
Φυσικά φαινόμενα (σεισμοί, πλημμύρες, επιδημίες)
Ενεργειακό πρόβλημα
Προστασία φυσικού περιβάλλοντος (τρύπα όζοντος)
Τεχνολογικά προβλήματα (Millennium Bug)
Μία κατάσταση η οποία χρήζει αντιμετώπισης, απαιτεί
λύση, η δε λύση της δεν είναι προφανής, ούτε γνωστή.
Κεφάλαιο 1 : Ανάλυση προβλήματος
Η έννοια πρόβλημα
Παραδείγματα
Ορισμός
5. Ανάπτυξη Εφαρμογών σε
Προγραμματιστικό Περιβάλλον 5
Δεδομένο: οποιοδήποτε στοιχείο μπορεί να γίνει αντιληπτό από
έναν τουλάχιστον παρατηρητή με μία από τις πέντε αισθήσεις
του.
Πληροφορία: οποιοδήποτε γνωσιακό στοιχείο προέρχεται από
επεξεργασία δεδομένων.
Επεξεργασία Δεδομένων: η διαδικασία στην οποία ένας
«μηχανισμός» δέχεται δεδομένα, τα επεξεργάζεται σύμφωνα με
έναν καθορισμένο τρόπο και αποδίδει πληροφορίες.
Κεφάλαιο 1 : Ανάλυση προβλήματος
Κατανόηση προβλήματος
Ορισμοί
Μηχανισμοί επεξεργασίας:
6. Ανάπτυξη Εφαρμογών σε
Προγραμματιστικό Περιβάλλον 6
Λόγος (γραπτός ή προφορικός) : μέσο διατύπωσης προβλήματος
Κεφάλαιο 1 : Ανάλυση προβλήματος
Κατανόηση προβλήματος
Σωστή
Διατύπωση
Σωστή
Ερμηνεία
Προϋποθέσεις κατανόησης προβλήματος
Άστοχη χρήση
ορολογίας
Λανθασμένη
σύνταξη
Δυσκολίες κατανόησης προβλήματος
7. Ανάπτυξη Εφαρμογών σε
Προγραμματιστικό Περιβάλλον 7
Παράδειγμα 1: Τα δώρα
Ο Γιάννης και η Μαρία είναι
παντρεμένοι. Ο Χρήστος είναι
αθλητικός τύπος. Η Ελένη είναι
προϊσταμένη σε τράπεζα.
Κεφάλαιο 1 : Ανάλυση προβλήματος
Κατανόηση προβλήματος
8. Ανάπτυξη Εφαρμογών σε
Προγραμματιστικό Περιβάλλον 8
Τα συστατικά μέρη του προβλήματος, τα επιμέρους τμήματα
που το αποτελούν, καθώς επίσης και τον τρόπο που αυτά
τα μέρη συνδέονται μεταξύ τους.
Κεφάλαιο 1 : Ανάλυση προβλήματος
Δομή προβλήματος
Ορισμός
όσο περισσότερο
αναλύουμε τα
προβλήματα σε
απλούστερα
ελαττώνεται η
δυσκολία των
προβλημάτων
10. Ανάπτυξη Εφαρμογών σε
Προγραμματιστικό Περιβάλλον 10
Παράδειγμα : Αλγόριθμος για τη διαδικασία ενός γεύματος
να συγκεντρώσουμε τα υλικά,
να προετοιμάσουμε τα σκεύη μαγειρικής,
να παρασκευάσουμε το φαγητό,
να ετοιμάσουμε τη σαλάτα,
να στρώσουμε το τραπέζι,
να γευματίσουμε,
να καθαρίσουμε το τραπέζι, και
να πλύνουμε τα πιάτα και τα κουζινικά.
Αλγόριθμος είναι ένα πεπερασμένο σύνολο εντολών αυστηρά
καθορισμένων και εκτελέσιμων σε πεπερασμένο χρόνο, οι
οποίες αν ακολουθηθούν επιτυγχάνεται ένα επιθυμητό
αποτέλεσμα.
Κεφάλαιο 2 : Βασικές Έννοιες Αλγορίθμων
Τι είναι αλγόριθμος
Ορισμός
11. Ανάπτυξη Εφαρμογών σε
Προγραμματιστικό Περιβάλλον 11
Είσοδος (input) : μία ή περισσότερες τιμές δεδομένων ως
είσοδοι στον αλγόριθμο
Έξοδος (output) : ο αλγόριθμος «παράγει» τουλάχιστον μία
τιμή δεδομένων ως αποτέλεσμα
Καθοριστικότητα (defineteness) : κάθε εντολή καθορίζεται
πολύ συγκεκριμένα
Περατότητα (finiteness) : ο αλγόριθμος τελειώνει μετά από
πεπερασμένα βήματα εκτέλεσης
Αποτελεσματικότητα (effectiveness) : ο αλγόριθμος
αποτελείται από μεμονωμένες απλές εντολές
Κεφάλαιο 2 : Βασικές Έννοιες Αλγορίθμων
Κριτήρια ενός αλγορίθμου
12. Ανάπτυξη Εφαρμογών σε
Προγραμματιστικό Περιβάλλον 12
ΠΛΗΡΟΦΟΡΙΚΗ : H επιστήμη που μελετά τους αλγόριθμους από τις σκοπιές :
Κεφάλαιο 2 : Βασικές Έννοιες Αλγορίθμων
Σπουδαιότητα αλγορίθμων
Υλικού (hardware). Η ταχύτητα εκτέλεσης ενός αλγορίθμου επηρεάζεται από
τις διάφορες τεχνολογίες υλικού,
Γλωσσών Προγραμματισμού (programming languages). Το είδος της
γλώσσας προγραμματισμού που χρησιμοποιείται (δηλαδή, χαμηλότερου ή
υψηλότερου επιπέδου) αλλάζει τη δομή και τον αριθμό των εντολών ενός
αλγορίθμου.
Θεωρητική (theoretical). Η εξέταση του ερωτήματος για το αν πράγματι
υπάρχει ή όχι κάποιος αποδοτικός αλγόριθμος για την επίλυση ενός
προβλήματος.
Αναλυτική (analytical). Μελετώνται οι υπολογιστικοί πόροι που απαιτούνται
από έναν αλγόριθμο.
13. Ανάπτυξη Εφαρμογών σε
Προγραμματιστικό Περιβάλλον 13
Κεφάλαιο 2 : Βασικές Έννοιες Αλγορίθμων
Περιγραφή & αναπαράσταση αλγορίθμων
ελεύθερο κείμενο (free text) : αποτελεί τον πιο
ανεπεξέργαστο και αδόμητο τρόπο παρουσίασης
αλγορίθμου.
διαγραμματικές τεχνικές : συνιστούν ένα γραφικό
τρόπο παρουσίασης του αλγορίθμου (η πιο γνωστή είναι το
διάγραμμα ροής-flow chart)
φυσική γλώσσα (natural language) : περιγραφή κατά
βήματα.
κωδικοποίηση (coding) : ένα πρόγραμμα που όταν
εκτελεσθεί θα δώσει τα ίδια αποτελέσματα με τον
αλγόριθμο.
14. Ανάπτυξη Εφαρμογών σε
Προγραμματιστικό Περιβάλλον 14
ΤΕΛΟΣ
ΑΡΧΗ
Διάβασε a
Εκτύπωσε
a
a > 0
ΝΑΙ
ΟΧΙ
Κεφάλαιο 2 : Βασικές Έννοιες Αλγορίθμων
Περιγραφή & αναπαράσταση αλγορίθμων
Παράδειγμα
αναπαράστασης
αλγορίθμου με
διάγραμμα ροής
15. Ανάπτυξη Εφαρμογών σε
Προγραμματιστικό Περιβάλλον 15
Κεφάλαιο 2 : Βασικές Έννοιες Αλγορίθμων
Περιγραφή & αναπαράσταση αλγορίθμων
Παράδειγμα
αναπαράστασης
αλγορίθμου με
κωδικοποίηση σε
ψευδογλώσσα
Αλγόριθμος Παράδειγμα_2.1
Διάβασε a, b
Αν a < b, τότε c a+ b
αλλιώς c a * b
Τέλος_αν
Εκτύπωσε c
Τέλος Παράδειγμα _2.1
17. Ανάπτυξη Εφαρμογών σε
Προγραμματιστικό Περιβάλλον 17
Κεφάλαιο 2 : Βασικές Έννοιες Αλγορίθμων
Δομή ακολουθίας
Η ακολουθιακή
δομή εντολών
(σειριακών
βημάτων)
χρησιμοποιείται για
την αντιμετώπιση
απλών
προβλημάτων,
όπου είναι
δεδομένη η σειρά
εκτέλεσης ενός
συνόλου ενεργειών.
Παράδειγμα : Να διαβασθούν δύο αριθμοί,
να υπολογισθεί και να εκτυπωθεί το γινόμενο τους.
Αλγόριθμος Παράδειγμα_2.2
Διάβασε a, b
c a * b
Εκτύπωσε c
Τέλος Παράδειγμα _2.2
18. Ανάπτυξη Εφαρμογών σε
Προγραμματιστικό Περιβάλλον 18
Κεφάλαιο 2 : Βασικές Έννοιες Αλγορίθμων
Δομή ακολουθίας
Παράδειγμα : Με δεδομένη την ακτίνα, να υπολογισθεί το
εμβαδόν του αντίστοιχου κύκλου και το εμβαδόν του
τετραγώνου που είναι περιγεγραμμένο στον κύκλο αυτόν.
Αλγόριθμος Παράδειγμα_2.3
Διάβασε aktina
kyklos 3.14 * aktina * aktina
plevra 2 * aktina
tetragwno plevra * plevra
Εκτύπωσε kyklos, tetragwno
Τέλος Παράδειγμα _2.3
19. Ανάπτυξη Εφαρμογών σε
Προγραμματιστικό Περιβάλλον 19
Κεφάλαιο 2 : Βασικές Έννοιες Αλγορίθμων
Δομή επιλογής
Η δομή της επιλογής
χρησιμοποιείται στις
περιπώσεις που
χρειάζεται να
λαμβάνονται κάποιες
αποφάσεις με βάση
κάποια δεδομένα
κριτήρια, που μπορεί
να είναι διαφορετικά
για κάθε διαφορετικό
στιγμιότυπο ενός
προβλήματος.
Παράδειγμα : Να διαβαστεί ένας αριθμός και
να εκτυπωθεί η απόλυτη τιμή του
Αλγόριθμος Παράδειγμα_2.4
Διάβασε a
Αν a < 0 τότε a a*(-1)
Εκτύπωσε a
Τέλος Παράδειγμα _2.4
20. Ανάπτυξη Εφαρμογών σε
Προγραμματιστικό Περιβάλλον 20
Κεφάλαιο 2 : Βασικές Έννοιες Αλγορίθμων
Δομή επιλογής
Αν συνθήκη τότε
εντολή_1
εντολή_2
...
Τέλος_αν
Αν συνθήκη τότε
εντολή ή εντολές
Αλλιώς
εντολή ή εντολές
Τέλος_αν
Μορφή εντολής επιλογής
21. Ανάπτυξη Εφαρμογών σε
Προγραμματιστικό Περιβάλλον 21
Κεφάλαιο 2 : Βασικές Έννοιες Αλγορίθμων
Δομή επιλογής
Παράδειγμα 2.5 :
Να διαβασθούν δύο αριθμοί
και σε περίπτωση που ο
πρώτος αριθμός είναι
μικρότερος του δεύτερου,
να υπολογισθεί και να
εκτυπωθεί το άθροισμά
τους, διαφορετικά να
υπολογισθεί και να
εκτυπωθεί το γινόμενό τους.
ΤΕΛΟ
Σ
ΑΡΧ
Η
Δ
ιάβασεa,b
ca+b
ca*b
Εκτύπωσεc
a<b
Ν
ΑΙ
Ο
ΧΙ
22. Ανάπτυξη Εφαρμογών σε
Προγραμματιστικό Περιβάλλον 22
Κεφάλαιο 2 : Βασικές Έννοιες Αλγορίθμων
Διαδικασίες πολλαπλών επιλογών
Οι διαδικασίες των
πολλαπλών
επιλογών
χρησιμοποιούνται
στα προβλήματα
όπου μπορεί να
ληφθούν
διαφορετικές
αποφάσεις ανάλογα
με την τιμή που
παίρνει μία
μεταβλητή
Παράδειγμα : Να διαβασθεί ένας ακέραιος και να
εκτυπωθεί το αντίστοιχο γράμμα της αλφαβήτου αν ο
ακέραιος έχει τιμή 1 ή 2 ή 3 διαφορετικά να εκτυπωθεί η
λέξη “άγνωστος”.
Αλγόριθμος Παράδειγμα_2.6
Διάβασε a
Αν a = 1 τότε εκτύπωσε ‘Α’
αλλιώς_Αν a = 2 τότε εκτύπωσε ‘Β’
αλλιώς_Αν a = 3 τότε εκτύπωσε ‘Γ’
αλλιώς εκτύπωσε ‘άγνωστος’
Τέλος_αν
Τέλος Παράδειγμα _2.6
23. Ανάπτυξη Εφαρμογών σε
Προγραμματιστικό Περιβάλλον 23
Κεφάλαιο 2 : Βασικές Έννοιες Αλγορίθμων
Εμφωλευμένες Δομές
Οι εμφωλευμένες δομές χρησιμοποιούνται στα προβλήματα όπου μπορεί να
έχουμε αποφάσεις που να βασίζονται σε συνδυασμούς κριτηρίων και
«λογικών» πράξεων.
3 ΛΟΓΙΚΕΣ ΠΡΑΞΕΙΣ
ή
και
όχι
Πρόταση
Α
Πρόταση Β Α ή Β Α και Β όχι Α
Αληθής Αληθής Αληθής Αληθής Ψευδής
Αληθής Ψευδής Αληθής Ψευδής Ψευδής
Ψευδής Αληθής Αληθής Ψευδής Αληθής
Ψευδής Ψευδής Ψευδής Ψευδής Αληθής
24. Ανάπτυξη Εφαρμογών σε
Προγραμματιστικό Περιβάλλον 24
Κεφάλαιο 2 : Βασικές Έννοιες Αλγορίθμων
Εμφωλευμένες Δομές
Παράδειγμα :
Να διαβάζονται 2
ακέραιοι για το
ύψος & το βάρος
ενός ατόμου. Να
εκτυπώνεται
“ελαφρύς” αν το
βάρος είναι < 80
Kg (αλλιώς
“βαρύς”). Να
εκτυπώνεται
“κοντός” αν το
ύψος είναι < 1.70
(αλλιώς
“ψηλός”). ΤΕΛΟΣ
ΑΡΧΗ
ΝΑΙ
Διάβασε
βάρος, ύψος
ΟΧΙ
Βάρος<80
Υψος<1.7
0
Υψος<1.7
0
Εκτύπωσε
Βαρύς-ψηλός
ΟΧΙ
ΝΑΙ
Εκτύπωσε
Βαρύς-κοντός
Εκτύπωσε
Ελαφρύς-κοντός
ΝΑΙ
ΟΧΙ
Εκτύπωσε
Ελαφρύς-ψηλός
25. Ανάπτυξη Εφαρμογών σε
Προγραμματιστικό Περιβάλλον 25
Κεφάλαιο 2 : Βασικές Έννοιες Αλγορίθμων
Δομή επανάληψης
Η δομή της
επανάληψης
χρησιμοποιείται
στις περιπώσεις
όπου μία
ακολουθία
εντολών πρέπει να
εφαρμοσθεί σε
ένα σύνολο
περιπτώσεων,
που έχουν κάτι
κοινό.
Παράδειγμα : Να γραφεί αλγόριθμος που να
εμφανίζει τους αριθμούς από 1 έως 100.
Αλγόριθμος Παράδειγμα_2.7
i 1
Όσο i <= 100 επανάλαβε
Εμφάνισε i
i i + 1
Τέλος_επανάληψης
Τέλος Παράδειγμα _2.7
26. Ανάπτυξη Εφαρμογών σε
Προγραμματιστικό Περιβάλλον 26
Κεφάλαιο 2 : Βασικές Έννοιες Αλγορίθμων
Δομή επανάληψης
Όσο συνθήκη επανάλαβε
εντολή ή εντολές
Τέλος_επανάληψης
Για μεταβλητή από τ1 μέχρι τ2 με_βήμα β
εντολή ή εντολές
Τέλος_επανάληψης
Επαναληπτικές Διαδικασίες
Αρχή_επανάληψης
εντολή ή εντολές
Μέχρις_ότου συνθήκη
27. Ανάπτυξη Εφαρμογών σε
Προγραμματιστικό Περιβάλλον 27
Κεφάλαιο 2 : Βασικές Έννοιες Αλγορίθμων
Δομή επανάληψης
Παράδειγμα 2.8 :
Να διαβάζονται και να
εκτυπώνονται όσοι θετικοί
αριθμοί δίνονται από το
πληκτρολόγιο. Ο αλγόριθμος
τελειώνει όταν δοθεί ένας
αρνητικός αριθμός.
Αλγόριθμος Παράδειγμα_2.8
Αρχή_επανάληψης
Διάβασε x
Eμφάνισε x
Μέχρις_ότου x < 0
Τέλος Παράδειγμα _2.8
28. Ανάπτυξη Εφαρμογών σε
Προγραμματιστικό Περιβάλλον 28
Κεφάλαιο 2 : Βασικές Έννοιες Αλγορίθμων
Δομή επανάληψης
Παράδειγμα 2.9 :
Σε ένα μετεωρολογικό κέντρο
χρειάζεται να βρεθεί η μέγιστη
και η ελάχιστη θερμοκρασία
από τις μέσες ημερήσιες
θερμοκρασίες ενός μήνα. Να
γραφεί ένας αλγόριθμος που
θα διαβάζει τη μέση ημερήσια
θερμοκρασία για κάθε ημέρα
ενός μήνα 30 ημερών και θα
υπολογίζει την ελάχιστη και τη
μέγιστη από αυτές τις
θερμοκρασίες
Αλγόριθμος Παράδειγμα_2.9
ΜΙΝ 100
ΜΑΧ -100
Για i από 1 μέχρι 30
Διάβασε THΕΡ
Αν THΕΡ < ΜΙΝ τότε
ΜΙΝΤΗΕΡ
Αν THΕΡ < ΜΑΧ τότε
ΜΑΧΤΗΕΡ
Τέλος_επανάληψης
Τέλος Παράδειγμα _2.9
29. Ανάπτυξη Εφαρμογών σε
Προγραμματιστικό Περιβάλλον 29
Κεφάλαιο 2 : Βασικές Έννοιες Αλγορίθμων
Ανακεφαλαίωση
Στο Κεφάλαιο αυτό :
έγινε η πρώτη γνωριμία με την έννοια του αλγορίθμου
συζητήθηκε και παρουσιάσθηκε ο τρόπος αναπαράστασης
των αλγορίθμων
αναπτύχθηκαν οι κυριότερες αλγοριθμικές δομές
ΑΚΟΛΟΥΘΙΑ - ΕΠΙΛΟΓΗ - ΕΠΑΝΑΛΗΨΗ
αλγόριθμος, ακολουθία, επιλογή,
επανάληψη, Διάγραμμα ροής , ψευδογλώσσα,
εμφωλευμένες διαδικασίες, βρόχος
31. Ανάπτυξη Εφαρμογών σε
Προγραμματιστικό Περιβάλλον 31
Δεδομένα
Αλγόριθμοι + Δομές Δεδομένων = Προγράμματα
Πίνακες
Στοίβα και Ουρά
Αναζήτηση και Ταξινόμηση
Κεφάλαιο 3 : Δομές Δεδομένων και Αλγόριθμοι
32. Ανάπτυξη Εφαρμογών σε
Προγραμματιστικό Περιβάλλον 32
Ο ορισμός αυτός είναι πρακτικός. Για παράδειγμα:
σε ένα αρχείο μαθητών κρατούμε την τάξη, το
τμήμα κλπ, αλλά όχι το ύψος, το βάρος κλπ.
Δεδομένα είναι μία αφαιρετική
αναπαράσταση της πραγματικότητας.
Κεφάλαιο 3 : Δομές Δεδομένων και Αλγόριθμοι
Δεδομένα
33. Ανάπτυξη Εφαρμογών σε
Προγραμματιστικό Περιβάλλον 33
Τα δεδομένα είναι έννοια-κλειδί για την Πληροφο-
ρική που μελετά τα δεδομένα απο τη σκοπιά
του Υλικού
των Γλωσσών προγραμματισμού
των Δομών
της Ανάλυσης
Κεφάλαιο 3 : Δομές Δεδομένων και Αλγόριθμοι
Δεδομένα
34. Ανάπτυξη Εφαρμογών σε
Προγραμματιστικό Περιβάλλον 34
Δομή Δεδομένων είναι ένα σύνολο απο-
θηκευμένων δεδομένων που υφίστανται
επεξεργασία από ένα σύνολο λειτουργιών.
Κεφάλαιο 3 : Δομές Δεδομένων και Αλγόριθμοι
Αλγόριθμοι + Δομές = Προγράμματα
Λειτουργίες: προσπέλαση, εισαγωγή, διαγραφή,
αναζήτηση, ταξινόμηση, αντιγραφή, συγχώνευση,
διαχωρισμός.
Σημείωση: σπάνια για κάποια δομή χρησιμοποι-
ούνται και οι οκτώ λειτουργίες. Κάθε δομή πλεο-
νεκτεί και μειονεκτεί σε σχέση με άλλες δομές ως
προς τις λειτουργίες αυτές.
35. Ανάπτυξη Εφαρμογών σε
Προγραμματιστικό Περιβάλλον 35
Η Δομή και ο Αλγόριθμος είναι συνυφασμένες
έννοιες, όπως δηλώνεται από την ανωτέρω εξίσωση
(Wirth, 1976).
Κεφάλαιο 3: Δομές Δεδομένων και Αλγόριθμοι
Αλγόριθμοι + Δομές = Προγράμματα
Πρόβλημα: Να γραφεί αλγόριθμος που να
δέχεται στην είσοδο ένα όνομα και να δίνει
τον αντίστοιχο αριθμό τηλεφώνου στην
έξοδο.
Λύσεις διάφορες (ανάλογα με το πλήθος
των συνδρομητών).
36. Ανάπτυξη Εφαρμογών σε
Προγραμματιστικό Περιβάλλον 36
Ο Πίνακας είναι μία στατική δομή δεδομέ-
νων (το μέγεθός του καθορίζεται κατά τη
μετάφραση και όχι κατά την εκτέλεση).
Ο Πίνακας περιέχει δεδομένα ιδίου τύπου και
μπορεί να έχει πολλές διαστάσεις.
Συμβολίζεται με ένα όνομα και ένα δείκτη για κάθε
διάσταση.
Κεφάλαιο 3 : Δομές Δεδομένων και Αλγόριθμοι
Πίνακες
37. Ανάπτυξη Εφαρμογών σε
Προγραμματιστικό Περιβάλλον 37
Κεφάλαιο 3 : Δομές Δεδομένων και Αλγόριθμοι
Στοίβα
Η στοίβα είναι μία δομή δεδομένων όπου
επιτρέπονται δύο μόνο λειτουργίες:
- εισαγωγή ή ώθηση (push), και
- διαγραφή ή απώθηση (pop).
Στηρίζεται στη φιλοσοφία LIFO (last-in-first-out),
δηληδή Τελευταίο-μέσα-πρώτο-έξω.
Υλοποιείται με ένα πίνακα και με τη βοήθεια μίας
μεταβλητής: του δείκτη της στοίβας που δείχνει στο
κορυφαίο στοιχείο του πίνακα.
38. Ανάπτυξη Εφαρμογών σε
Προγραμματιστικό Περιβάλλον 38
Η ουρά είναι μία δομή δεδομένων όπου
επιτρέπονται δύο μόνο λειτουργίες:
- εισαγωγή στο τέλος (enqueue), και
- διαγραφή από την αρχή (dequeue).
Στηρίζεται στη φιλοσοφία FIFO (first-in-first-out),
δηληδή Πρώτο-μέσα-πρώτο-έξω,
Κεφάλαιο 3 : Δομές Δεδομένων και Αλγόριθμοι
Ουρά
Υλοποιείται με ένα πίνακα και δύο μεταβλητές που
δείχνουν στο πρώτο και το τελευταίο στοιχείο.
39. Ανάπτυξη Εφαρμογών σε
Προγραμματιστικό Περιβάλλον 39
Κεφάλαιο 3 : Δομές Δεδομένων και Αλγόριθμοι
Αναζήτηση
Σειριακή
Αναζήτηση
Το πρόβλημα της αναζήτησης είναι καίριο (ανα-
ζήτηση ονομάτων σε καταλόγους, αριθμών σε
λίστες, εικόνων σε άλμπουμ κλπ.)
Συνήθως η αναζήτηση γίνεται σε πίνακες
ταξινομημένων αριθμών.
Δυαδική
Αναζήτηση
40. Ανάπτυξη Εφαρμογών σε
Προγραμματιστικό Περιβάλλον 40
Κεφάλαιο 3 : Δομές Δεδομένων και Αλγόριθμοι
Αναζήτηση
ΣΕΙΡΙΑΚΗ (ΓΡΑΜΜΙΚΗ) ΑΝΑΖΗΤΗΣΗ
ΦΙΛΟΣΟΦΙΑ: Εξετάζει το περιεχόμενο κάθε
θέσης του πίνακα, αν ισούται με το
αναζητούμενο στοιχείο, αρχίζοντας από την αρχή
και σαρώ-νοντας τις θέσεις μία-μία.
Υλοποιείται σε πίνακα με ταξινομημένα αλλά και
αταξινόμητα στοιχεία.
41. Ανάπτυξη Εφαρμογών σε
Προγραμματιστικό Περιβάλλον 41
Κεφάλαιο 3 : Δομές Δεδομένων και Αλγόριθμοι
Ταξινόμηση
Σπουδαίο πρόβλημα γιατί επιταχύνει την αναζήτηση.
Εξαιρετική πληθώρα αλγορίθμων που εφαρμόζονται
ανάλογα με τις προϋποθέσεις του προβλήματος
(μνήμη/δίσκος, είδος δεδομένων, εφαρμογής κλπ.)
Ταξινόμηση είναι η διάταξη των στοιχείων
ενός πίνακα με βάση ένα κριτήριο (πχ.
αύξουσα/φθίνουσα τάξη)
42. Ανάπτυξη Εφαρμογών σε
Προγραμματιστικό Περιβάλλον 42
Κεφάλαιο 3 : Δομές Δεδομένων και Αλγόριθμοι
Ταξινόμηση
ΤΑΞΙΝΟΜΗΣΗ ΕΥΘΕΙΑΣ ΑΝΤΑΛΛΑΓΗΣ
(ΤΑΞΙΝΟΜΗΣΗ ΦΥΣΣΑΛΙΔΑΣ)
ΦΙΛΟΣΟΦΙΑ: Εξετάζει διαδοχικά ζεύγη στοιχείων
μέχρι να διαταχθούν όλα τα στοιχεία.
Αν ο πίνακας θεωρηθεί σε κατακόρυφη θέση, τότε
τα μικρότερα στοιχεία ανεβαίνουν προς τα επάνω.
Σε κάθε πέρασμα, ένα στοιχείο λαμβάνει την
τελική του θέση
44. Ανάπτυξη Εφαρμογών σε
Προγραμματιστικό Περιβάλλον 44
Κεφάλαιο 4 : Τεχνικές Σχεδίασης Αλγορίθμων
Ανάλυση Προβλημάτων
Κατά την ανάλυση ενός προβλήματος
καταγράφεται η υπάρχουσα πληροφορία,
αναγνωρίζονται ιδιαιτερότητες,
αποτυπώνονται συνθήκες και προϋποθέσεις,
οπότε
προτείνεται κάποια μέθοδος (ιδεατή), και
επιλύεται το πρόβλημα με τον υπολογιστή.
45. Ανάπτυξη Εφαρμογών σε
Προγραμματιστικό Περιβάλλον 45
Κεφάλαιο 4 : Τεχνικές Σχεδίασης Αλγορίθμων
Ανάλυση Προβλημάτων
Πρόβλημα: με ποιά σειρά πρέπει ένας
ταχυδρομικός διανομέας να επισκεφθεί
κάποια χωρία ώστε να ελαχιστοποιήσει τη
συνολική απόσταση που θα διανύσει ??
Πιθανές λύσεις
κάθε φορά να διαλέγει τον κοντινότερο προορισμό
να ακολουθήσει ένα δρομολόγιο που να ελαχιστο-
ποιεί τη συνολική απόσταση και όχι τις επιμέρους.
47. Ανάπτυξη Εφαρμογών σε
Προγραμματιστικό Περιβάλλον 47
Κεφάλαιο 6: Εισαγωγή στον προγραμματισμό
Διδακτικοί στόχοι
Να ορίζετε τι είναι πρόγραμμα.
Να κατατάσσετε τις γλώσσες προγραμματισμού.
Να συγκρίνετε τις διάφορες γλώσσες προγραμματισμού.
Να αναγνωρίζετε τα κυριότερα είδη προγραμματισμού.
Να περιγράφετε τα βασικά χαρακτηριστικά των τεχνικών που
χρησιμοποιούνται στον προγραμματισμό.
Να διατυπώνετε τα πλεονεκτήματα του δομημένου
προγραμματισμού.
Να περιγράφετε τη διαδικασία εκτέλεσης ενός προγράμματος.
Να αναφέρετε τα βασικά προγράμματα που περιέχει ένα
προγραμματιστικό περιβάλλον
48. Ανάπτυξη Εφαρμογών σε
Προγραμματιστικό Περιβάλλον 48
Κεφάλαιο 6: Εισαγωγή στον προγραμματισμό
Η έννοια του προγράμματος
Φυσικές και τεχνητές γλώσσες.
Τεχνικές σχεδίασης προγραμμάτων
Δομημένος προγραμματισμός
Αντικειμενοστραφής προγραμματισμός
Παράλληλος προγραμματισμός
Προγραμματιστικά περιβάλλοντα
49. Ανάπτυξη Εφαρμογών σε
Προγραμματιστικό Περιβάλλον 49
Κεφάλαιο 6: Εισαγωγή στον προγραμματισμό
Τεχνικές σχεδίασης προγραμμάτων
Ιεραρχική σχεδίαση προγράμματος
Τμηματικός προγραμματισμός
Δομημένος προγραμματισμός
50. Ανάπτυξη Εφαρμογών σε
Προγραμματιστικό Περιβάλλον 50
Κεφάλαιο 6: Εισαγωγή στον προγραμματισμό
Πλεονεκτήματα του δομημένου προγραμματισμού
Δημιουργία απλούστερων προγραμμάτων.
Άμεση μεταφορά των αλγορίθμων σε προγράμματα.
Διευκόλυνση ανάλυσης του προγράμματος σε τμήματα.
Περιορισμός των λαθών κατά την ανάπτυξη του
προγράμματος.
Διευκόλυνση στην ανάγνωση και κατανόηση του
προγράμματος από τρίτους.
Ευκολότερη διόρθωση και συντήρηση.
51. Ανάπτυξη Εφαρμογών σε
Προγραμματιστικό Περιβάλλον 51
να διακρίνετε τις σταθερές από τις μεταβλητές.
να αναγνωρίζετε τους διάφορους τύπους μεταβλητών.
να μετατρέπετε τις αριθμητικές πράξεις σε εντολές
προγράμματος.
να διατυπώνετε τη δομή ενός προγράμματος.
να συντάσσετε απλά προγράμματα τα οποία εισάγουν
δεδομένα, τα επεξεργάζονται και εμφανίζουν τα
αποτελέσματα στην οθόνη.
Κεφάλαιο 7: Βασικά στοιχεία προγραμματισμού
Διδακτικοί στόχοι
52. Ανάπτυξη Εφαρμογών σε
Προγραμματιστικό Περιβάλλον 52
Κεφάλαιο 7: Βασικά στοιχεία προγραμματισμού
Το αλφάβητο της ΓΛΩΣΣΑΣ
Τύποι δεδομένων
Σταθερές
Μεταβλητές
Αριθμητικοί τελεστές
Αριθμητικές εκφράσεις
Εντολή εκχώρησης
Εντολές εισόδου -εξόδου
Δομή προγράμματος
54. Ανάπτυξη Εφαρμογών σε
Προγραμματιστικό Περιβάλλον 54
Τύποι δεδομένων
Ακέραιος τύπος
Πραγματικός τύπος
Χαρακτήρας
Κεφάλαιο 7: Βασικά στοιχεία προγραμματισμού
55. Ανάπτυξη Εφαρμογών σε
Προγραμματιστικό Περιβάλλον 55
Κεφάλαιο 7: Βασικά στοιχεία προγραμματισμού
Σταθερές
Αντιστοίχηση σταθερών τιμών με ονόματα
Μεταβλητές
Παράσταση ποσοτήτων που οι τιμές μπορούν να
αλλάζουν κατά την εκτέλεση του προγράμματος.
56. Ανάπτυξη Εφαρμογών σε
Προγραμματιστικό Περιβάλλον 56
Κεφάλαιο 7: Βασικά στοιχεία προγραμματισμού
Αριθμητικοί τελεστές
Αριθμητικός τελεστής Πράξη
+ Πρόσθεση
- Αφαίρεση
* Πολλαπλασιασμός
/ Διαίρεση
^ Ύψωση σε δύναμη
DIV Ακέραια διαίρεση
MOD Υπόλοιπο ακέραιας διαίρεσης.
57. Ανάπτυξη Εφαρμογών σε
Προγραμματιστικό Περιβάλλον 57
Κεφάλαιο 7: Βασικά στοιχεία προγραμματισμού
Εντολή εκχώρησης
ΜΟΡΦΗ
Όνομα-Μεταβλητής <- παράσταση
ΠΑΡΑΔΕΙΓΜΑΤΑ
Α<-132
ΜΗΝΑΣ<- 'Ιανουάριος’
ΕΜΒΑΔΟΝ<-Α*Β
58. Ανάπτυξη Εφαρμογών σε
Προγραμματιστικό Περιβάλλον 58
Κεφάλαιο 7: Βασικά στοιχεία προγραμματισμού
Εντολές εισόδου- εξόδου
ΜΟΡΦΗ
ΔΙΑΒΑΣΕ λίστα-μεταβλητών
ΠΑΡΑΔΕΙΓΜΑΤΑ
ΔΙΑΒΑΣΕ Ποσότητα, Τιμή
ΜΟΡΦΗ
ΓΡΑΨΕ λίστα-στοιχείων
ΠΑΡΑΔΕΙΓΜΑΤΑ
ΓΡΑΨΕ 'Η τετραγωνική ρίζα του', Α,' είναι:
',ΡΙΖΑ
59. Ανάπτυξη Εφαρμογών σε
Προγραμματιστικό Περιβάλλον 59
Κεφάλαιο 8: Επιλογή και επανάληψη
Διδακτικοί στόχοι
να σχηματίζετε λογικές εκφράσεις
να διατυπώνετε τις εντολές ελέγχου ΑΝ
να επιλέγετε την καταλληλότερη εντολή ΑΝ
να διατυπώνετε τις εντολές επανάληψης
να επιλέγετε την καλύτερη δομή επανάληψης
να συντάσσετε προγράμματα που χρησιμοποιούν και τις τρεις
βασικές δομές: της ακολουθίας, της επιλογής και της
επανάληψης.
60. Ανάπτυξη Εφαρμογών σε
Προγραμματιστικό Περιβάλλον 60
Κεφάλαιο 8: Επιλογή και επανάληψη
Λογικές εκφράσεις
Τελεστής Ελεγχόμενη σχέση Παράδειγμα
= Ισότητα Αριθμός=0
<> Ανισότητα Ονομα1 <> 'Κώστας'
> Μεγαλύτερο από Τιμή>10000
>= Μεγαλύτερο ή ίσο Χ+Υ >= (Α+Β)/Γ
< Μικρότερο από Β^2-4*Α*Γ < 0
<= Μικρότερο ή ίσο Βάρος <= 500
61. Ανάπτυξη Εφαρμογών σε
Προγραμματιστικό Περιβάλλον 61
Κεφάλαιο 8: Επιλογή και επανάληψη
Εντολή ΑΝ
Σύνταξη
ΑΝ συνθήκη ΤΟΤΕ
εντολή-1
εντολή-2
…
εντολή-ν
ΤΕΛΟΣ_ΑΝ
Παράδειγμα
ΑΝ αριθμός > 0 ΤΟΤΕ
ΓΡΑΨΕ 'Ο αριθμός είναι θετικός'
Πλήθος_θετικών <- πλήθος_θετικών+1
ΤΕΛΟΣ_ΑΝ
62. Ανάπτυξη Εφαρμογών σε
Προγραμματιστικό Περιβάλλον 62
Κεφάλαιο 8: Επιλογή και επανάληψη
Εντολή ΑΝ ΤΟΤΕ ΑΛΛΙΩΣ
Σύνταξη
ΑΝ συνθήκη ΤΟΤΕ
εντολή-1
εντολή-2
…
εντολή-ν
ΑΛΛΙΩΣ
εντολή-1
Εντολή-2
…
εντολή-ν
ΤΕΛΟΣ_ΑΝ
Παράδειγμα
ΑΝ αριθμός > 0 ΤΟΤΕ
ΓΡΑΨΕ 'Ο αριθμός είναι θετικός’
Πλήθος_θετικών <- Πλήθος_θετικών+1
ΑΛΛΙΩΣ
ΓΡΑΨΕ 'Ο αριθμός είναι αρνητικός ή 0’
Πλήθος_μη_θετικών <- Πλήθος_μη_θετικών +1
ΤΕΛΟΣ_ΑΝ