Design and implementation of an automation mechanism to automatically develop...
Γκιλίρης Ιωάννης 7419
1. Ιωάννης Π. Γκιλίρης
Υπό την επίβλεψη του κ. Ανδρέα Λ. Συμεωνίδη
Επίκουρου καθηγητή του ΤΗΜΜΥ ΑΠΘ
Και του κ. Χατζηδημητρίου Κυριάκου
Μεταδιδακτορικού ερευνητή του ΤΗΜΜΥ ΑΠΘ
ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ
ΤΜΗΜΑ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ & ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ
ΕΡΓΑΣΤΗΡΙΟ ΕΠΕΞΕΡΓΑΣΙΑΣ ΠΛΗΡΟΦΟΡΙΑΣ ΚΑΙ ΥΠΟΛΟΓΙΣΜΩΝ (ΕΠΥ)
2. Σκοπός της διπλωματικής εργασίας
Εύρεση των αναδυόμενων πρακτικών προγραμματισμού σε μία
δυναμική γλώσσα όπως η JavaScript
Δημιουργία του package statLint για το Atom IDE του GitHub
που θα έχει τον ρόλο ενός statistical linter
Πακέτο ανοικτού κώδικα (open source)
Εργαλείο στατικής ανάλυσης κώδικα για τον εντοπισμό
διαφορών από κοινές πρακτικές
Οκτώβριος 2016 Αναδυόμενα πρότυπα πρακτικών προγραμματισμού μέσω συλλογικής νοημοσύνης 2
3. Για ποιο λόγο η JavaScript ;
Αποτελεί τη κυρίαρχη γλώσσα για τη δημιουργία διαδικτυακών
εφαρμογών
94.1 % όλων των websites χρησιμοποιούν τη JavaScript
Ο δυναμικός χαρακτήρας της γλώσσας οδηγεί σε πολύ μεγάλη
ευελιξία και ποικιλομορφία κατά την ανάπτυξη των εφαρμογών
Είναι interpreted γλώσσα γεγονός που αναδεικνύει την
χρησιμότητα ενός linter με νέα χαρακτηριστικά
Οκτώβριος 2016 Αναδυόμενα πρότυπα πρακτικών προγραμματισμού μέσω συλλογικής νοημοσύνης 3
4. Αναδυόμενες πρακτικές ;
Function Signatures
_.map([1, 2, 3], function(num){ return num * 3; });
Function Chains
_.keys(data).forEach(function(id){ alert(id.Name);});
Assignments και επιστρεφόμενες τιμές από τις κλήσεις
μεθόδων και αλυσίδων
var new = ([1, 2, 3]).reverse();
Δηλώσεις νέων μεταβλητών
var data = [{“Name”: “John”}, {“Name”: “Maria”}];
Οκτώβριος 2016 Αναδυόμενα πρότυπα πρακτικών προγραμματισμού μέσω συλλογικής νοημοσύνης 4
5. Σε ποιους απευθύνεται το statLint
Σε αρχάριους προγραμματιστές που εξοικειώνονται με τη
γλώσσα και το web developing
Σε ομάδες ανάπτυξης λογισμικού που επιθυμούν μία το δυνατό
μεγαλύτερη συνοχή και ομοιομορφία στο λογισμικό που
αναπτύσσουν
Οκτώβριος 2016 Αναδυόμενα πρότυπα πρακτικών προγραμματισμού μέσω συλλογικής νοημοσύνης 5
6. Δομή του συστήματος εκπαίδευσης
Οκτώβριος 2016 Αναδυόμενα πρότυπα πρακτικών προγραμματισμού μέσω συλλογικής νοημοσύνης 6
7. Η μετρική για το Scoring
Η στατιστική μετρική:
(term frequency x modified document frequency)
Ως term θεωρούμε:
1. Κάθε εναλλακτική υπογραφή μιας μεθόδου
2. Κάθε διαφορετικό συνδυασμό αλυσίδας από συγκεκριμένες μεθόδους
3. Κάθε διαφορετικό τύπο αρχικοποίησης νέων μεταβλητών
Ως document θεωρούμε κάθε ένα από τα projects του
αποθετηρίου αναφοράς
Οκτώβριος 2016 Αναδυόμενα πρότυπα πρακτικών προγραμματισμού μέσω συλλογικής νοημοσύνης 7
mdftf
8. Ο modified df δείκτης υπολογίζεται ως εξής:
Θέλουμε να διατηρήσουμε μία λογαριθμική σχέση ανάμεσα
στον αριθμό των projects και την τιμή του δείκτη
Οκτώβριος 2016 Αναδυόμενα πρότυπα πρακτικών προγραμματισμού μέσω συλλογικής νοημοσύνης 8
Η μετρική για το Scoring
N
projects
mdf 1log
11. Training #1
Οκτώβριος 2016 Αναδυόμενα πρότυπα πρακτικών προγραμματισμού μέσω συλλογικής νοημοσύνης 11
Συλλογή δεδομένων για τις υπογραφές και τα
assignments μεθόδων
Αρχείο εξόδου: functionSignatures.json
12. Training #1: Εγγραφές Αρχείου
Οκτώβριος 2016 Αναδυόμενα πρότυπα πρακτικών προγραμματισμού μέσω συλλογικής νοημοσύνης 12
13. Training #2
Οκτώβριος 2016 Αναδυόμενα πρότυπα πρακτικών προγραμματισμού μέσω συλλογικής νοημοσύνης 13
Συλλογή δεδομένων για τις αλυσίδες και τα
assignments μεθόδων
Αρχείο εξόδου: functionChains.json
14. Training #2: Εγγραφές αρχείου
Οκτώβριος 2016 Αναδυόμενα πρότυπα πρακτικών προγραμματισμού μέσω συλλογικής νοημοσύνης 14
15. Training #3
Οκτώβριος 2016 Αναδυόμενα πρότυπα πρακτικών προγραμματισμού μέσω συλλογικής νοημοσύνης 15
Συλλογή δεδομένων για τις δηλώσεις μεταβλητών
Αρχείο εξόδου: varDeclarations.json
18. Πείραμα 1: Cross-validation
(GitHub Dataset)
Οι δείκτες warnings / seen LOC για τα τρία επίπεδα
αυστηρότητας:
Dataset: 100 δημοφιλέστερα projects στο GitHub
10-fold cross-validation
Οκτώβριος 2016 Αναδυόμενα πρότυπα πρακτικών προγραμματισμού μέσω συλλογικής νοημοσύνης 18
Επίπεδο Αυστηρότητας Warnings / seen LOC (%)
1 45.37
2 32.01
3 27.94
19. Πείραμα 2: Cross-validation testing
(D3 Dataset)
Οι δείκτες warnings / seen LOC για τα τρία επίπεδα
αυστηρότητας:
Dataset: 200 projects από τους προγραμματιστές της D3
10-fold cross-validation
Οκτώβριος 2016 Αναδυόμενα πρότυπα πρακτικών προγραμματισμού μέσω συλλογικής νοημοσύνης 19
Επίπεδο Αυστηρότητας Warnings / seen LOC (%)
1 24.97
2 13.88
3 11.85
21. GitHub Dataset D3 Dataset
Κριτήριο επιλογής: η δημοτικότητα
100 δημοφιλέστερα projects, βάσει
του αριθμού των stars
Ισχυρότερα πειστήρια σχετικά:
τόσο με την αξιοπιστία των
projects
όσο και με την ομοιομορφία τους
Οκτώβριος 2016 Αναδυόμενα πρότυπα πρακτικών προγραμματισμού μέσω συλλογικής νοημοσύνης 21
Cross-validation: Σύγκριση
23. Ο συντελεστής συσχέτισης (Pearson Correlation Coefficient)
ανάμεσα στα 2 διανύσματα-στήλες είναι: 0.7331
Παρατηρείται σημαντική συσχέτιση
Πιθανή θετική αξιολόγηση ενός αρχείου κώδικα από το PMD
⇒ Πολύ πιθανή θετική αξιολόγηση από το statLint
Οκτώβριος 2016 Αναδυόμενα πρότυπα πρακτικών προγραμματισμού μέσω συλλογικής νοημοσύνης 23
Πείραμα 3: Σύγκριση με το PMD
24. Συμπεράσματα
Απλές, αλλά εξίσου δυναμικές πρακτικές συμβάλουν στις
τεχνικές του MSR (Mining Software Repositories)
Online κοινότητες, όπως αυτή του GitHub, αναδεικνύουν τη
δύναμη της συνεργασίας και της συλλογικής νοημοσύνης
Ένας statistical linter μπορεί να αντικατοπτρίσει τις
εμφανιζόμενες αλλαγές
Οκτώβριος 2016 Αναδυόμενα πρότυπα πρακτικών προγραμματισμού μέσω συλλογικής νοημοσύνης 24
25. Μελλοντική Εργασία
Υποστήριξη και άλλων εκδόσεων της JavaScript
CoffeeScript
Τελευταία έκδοση της γλώσσας (ECMAScript6)
Χρησιμοποίηση μεγαλύτερου όγκου δεδομένων
Να εξεταστεί κατά πόσο υπάρχει βελτίωση
Πιθανή ανάγκη για μία online ΒΔ
Οκτώβριος 2016 Αναδυόμενα πρότυπα πρακτικών προγραμματισμού μέσω συλλογικής νοημοσύνης 25
26. Ευχαριστίες
Θα ήθελα να ευχαριστήσω τους επιβλέποντες της
διπλωματικής μου εργασίας, κ. Ανδρέα Συμεωνίδη και
κ. Κυριάκο Χατζηδημητρίου για τη συνεχή βοήθεια και
καθοδήγησή τους.
Οκτώβριος 2016 Αναδυόμενα πρότυπα πρακτικών προγραμματισμού μέσω συλλογικής νοημοσύνης 26