Γκιλίρης Ιωάννης 7419
Transcript of Γκιλίρης Ιωάννης 7419
Αναδυόμενα Πρότυπα Πρακτικών Προγραμματισμού μέσω Συλλογικής
ΝοημοσύνηςΙωάννης Π. Γκιλίρης
Υπό την επίβλεψη του κ. Ανδρέα Λ. ΣυμεωνίδηΕπίκουρου καθηγητή του ΤΗΜΜΥ ΑΠΘ
Και του κ. Χατζηδημητρίου ΚυριάκουΜεταδιδακτορικού ερευνητή του ΤΗΜΜΥ ΑΠΘ
ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣΤΜΗΜΑ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ & ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝΕΡΓΑΣΤΗΡΙΟ ΕΠΕΞΕΡΓΑΣΙΑΣ ΠΛΗΡΟΦΟΡΙΑΣ ΚΑΙ ΥΠΟΛΟΓΙΣΜΩΝ (ΕΠΥ)
2
Σκοπός της διπλωματικής εργασίαςΕύρεση των αναδυόμενων πρακτικών
προγραμματισμού σε μία δυναμική γλώσσα όπως η JavaScript
Δημιουργία του package statLint για το Atom IDE του GitHub που θα έχει τον ρόλο ενός statistical linterΠακέτο ανοικτού κώδικα (open source)Εργαλείο στατικής ανάλυσης κώδικα για τον
εντοπισμό διαφορών από κοινές πρακτικές
Οκτώβριος 2016 Αναδυόμενα πρότυπα πρακτικών προγραμματισμού μέσω συλλογικής νοημοσύνης
3
Για ποιο λόγο η JavaScript ;Αποτελεί τη κυρίαρχη γλώσσα για τη δημιουργία
διαδικτυακών εφαρμογών94.1 % όλων των websites χρησιμοποιούν τη
JavaScriptΟ δυναμικός χαρακτήρας της γλώσσας οδηγεί σε
πολύ μεγάλη ευελιξία και ποικιλομορφία κατά την ανάπτυξη των εφαρμογών
Είναι interpreted γλώσσα γεγονός που αναδεικνύει την χρησιμότητα ενός linter με νέα χαρακτηριστικά
Οκτώβριος 2016 Αναδυόμενα πρότυπα πρακτικών προγραμματισμού μέσω συλλογικής νοημοσύνης
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 Αναδυόμενα πρότυπα πρακτικών προγραμματισμού μέσω συλλογικής νοημοσύνης
5
Σε ποιους απευθύνεται το statLintΣε αρχάριους προγραμματιστές που εξοικειώνονται
με τη γλώσσα και το web developingΣε ομάδες ανάπτυξης λογισμικού που επιθυμούν
μία το δυνατό μεγαλύτερη συνοχή και ομοιομορφία στο λογισμικό που αναπτύσσουν
Οκτώβριος 2016 Αναδυόμενα πρότυπα πρακτικών προγραμματισμού μέσω συλλογικής νοημοσύνης
6
Δομή του συστήματος εκπαίδευσης
Οκτώβριος 2016 Αναδυόμενα πρότυπα πρακτικών προγραμματισμού μέσω συλλογικής νοημοσύνης
7
Η μετρική για το ScoringΗ στατιστική μετρική: (term frequency x modified document frequency)Ως term θεωρούμε:
1. Κάθε εναλλακτική υπογραφή μιας μεθόδου2. Κάθε διαφορετικό συνδυασμό αλυσίδας από συγκεκριμένες
μεθόδους3. Κάθε διαφορετικό τύπο αρχικοποίησης νέων μεταβλητών
Ως document θεωρούμε κάθε ένα από τα projects του αποθετηρίου αναφοράς
Οκτώβριος 2016 Αναδυόμενα πρότυπα πρακτικών προγραμματισμού μέσω συλλογικής νοημοσύνης
mdftf
8
Ο modified df δείκτης υπολογίζεται ως εξής:
Θέλουμε να διατηρήσουμε μία λογαριθμική σχέση ανάμεσα στον αριθμό των projects και την τιμή του δείκτη
Οκτώβριος 2016Αναδυόμενα πρότυπα πρακτικών προγραμματισμού μέσω συλλογικής νοημοσύνης
Η μετρική για το Scoring
Nprojects
mdf 1log
9
Preprocessor
Οκτώβριος 2016 Αναδυόμενα πρότυπα πρακτικών προγραμματισμού μέσω συλλογικής νοημοσύνης
Φιλτράρισμα αρχείωνΟργάνωση σε φακέλους
10
Parser
Οκτώβριος 2016Αναδυόμενα πρότυπα πρακτικών προγραμματισμού μέσω συλλογικής νοημοσύνης
Εξαγωγή AST (Abstract Syntax Trees)Esprima Parser
11
Training #1
Οκτώβριος 2016Αναδυόμενα πρότυπα πρακτικών προγραμματισμού μέσω συλλογικής νοημοσύνης
Συλλογή δεδομένων για τις υπογραφές και τα assignments μεθόδωνΑρχείο εξόδου: functionSignatures.json
12
Training #1: Εγγραφές Αρχείου
Οκτώβριος 2016Αναδυόμενα πρότυπα πρακτικών προγραμματισμού μέσω συλλογικής νοημοσύνης
13
Training #2
Οκτώβριος 2016Αναδυόμενα πρότυπα πρακτικών προγραμματισμού μέσω συλλογικής νοημοσύνης
Συλλογή δεδομένων για τις αλυσίδες και τα assignments μεθόδωνΑρχείο εξόδου: functionChains.json
14
Training #2: Εγγραφές αρχείου
Οκτώβριος 2016Αναδυόμενα πρότυπα πρακτικών προγραμματισμού μέσω συλλογικής νοημοσύνης
15
Training #3
Οκτώβριος 2016Αναδυόμενα πρότυπα πρακτικών προγραμματισμού μέσω συλλογικής νοημοσύνης
Συλλογή δεδομένων για τις δηλώσεις μεταβλητώνΑρχείο εξόδου: varDeclarations.json
16
Δομή του statLint
Οκτώβριος 2016 Αναδυόμενα πρότυπα πρακτικών προγραμματισμού μέσω συλλογικής νοημοσύνης
17
Δοκιμές του statLint
Οκτώβριος 2016Αναδυόμενα πρότυπα πρακτικών προγραμματισμού μέσω συλλογικής νοημοσύνης
18
Πείραμα 1: Cross-validation (GitHub Dataset)
Οι δείκτες warnings / seen LOC για τα τρία επίπεδα αυστηρότητας:
Dataset: 100 δημοφιλέστερα projects στο GitHub10-fold cross-validation
Οκτώβριος 2016 Αναδυόμενα πρότυπα πρακτικών προγραμματισμού μέσω συλλογικής νοημοσύνης
Επίπεδο Αυστηρότητας Warnings / seen LOC (%)
1 45.372 32.013 27.94
19
Πείραμα 2: Cross-validation testing (D3 Dataset)Οι δείκτες warnings / seen LOC για τα τρία επίπεδα
αυστηρότητας:
Dataset: 200 projects από τους προγραμματιστές της D3
10-fold cross-validationΟκτώβριος 2016 Αναδυόμενα πρότυπα πρακτικών προγραμματισμού μέσω συλλογικής νοημοσύνης
Επίπεδο Αυστηρότητας Warnings / seen LOC (%)
1 24.972 13.883 11.85
20
Cross-validation: Σύγκριση
Level 1 Level 2 Level 305
101520253035404550
GitHubD3
Οκτώβριος 2016Αναδυόμενα πρότυπα πρακτικών προγραμματισμού μέσω συλλογικής νοημοσύνης
21
GitHub Dataset D3 DatasetΚριτήριο επιλογής: η
δημοτικότητα100 δημοφιλέστερα projects,
βάσει του αριθμού των stars
Ισχυρότερα πειστήρια σχετικά: τόσο με την αξιοπιστία των
projects όσο και με την ομοιομορφία
τους
Οκτώβριος 2016Αναδυόμενα πρότυπα πρακτικών προγραμματισμού μέσω συλλογικής νοημοσύνης
Cross-validation: Σύγκριση
22
Πείραμα 3: Σύγκριση με το PMD
Οκτώβριος 2016 Αναδυόμενα πρότυπα πρακτικών προγραμματισμού μέσω συλλογικής νοημοσύνης
LOC LOC seen by statLint PMD (%) statLint ( % )
twitter-typeahead 10,602 1,261 1.5 25.46jquery-mobile 91,891 5,063 0.52 30.15mrdoob-three 90,661 10,663 9.06 30.27ecomfe-echarts 69,388 8,645 6.24 28.58resume 626 85 1.6 27.05uBlock 13,503 1,741 2.55 26.3socketio-socket 2,832 476 0.5 19.11alvarotrigo-fullpage 3,577 428 0.81 17.28caolan-async 7,026 785 1.25 25.35peachananr-scroll 344 51 15.69 35.29
23
Ο συντελεστής συσχέτισης (Pearson Correlation Coefficient) ανάμεσα στα 2 διανύσματα-στήλες είναι: 0.7331
Παρατηρείται σημαντική συσχέτισηΠιθανή θετική αξιολόγηση ενός αρχείου κώδικα
από το PMD ⇒ Πολύ� πιθανή� θετική� αξιολο�γήσή απο� το statLintΟκτώβριος 2016 Αναδυόμενα πρότυπα πρακτικών προγραμματισμού μέσω συλλογικής νοημοσύνης
Πείραμα 3: Σύγκριση με το PMD
24
ΣυμπεράσματαΑπλές, αλλά εξίσου δυναμικές πρακτικές
συμβάλουν στις τεχνικές του MSR (Mining Software Repositories)
Online κοινότητες, όπως αυτή του GitHub, αναδεικνύουν τη δύναμη της συνεργασίας και της συλλογικής νοημοσύνης
Ένας statistical linter μπορεί να αντικατοπτρίσει τις εμφανιζόμενες αλλαγές
Οκτώβριος 2016 Αναδυόμενα πρότυπα πρακτικών προγραμματισμού μέσω συλλογικής νοημοσύνης
25
Μελλοντική ΕργασίαΥποστήριξη και άλλων εκδόσεων της JavaScript
CoffeeScript Τελευταία έκδοση της γλώσσας (ECMAScript6)
Χρησιμοποίηση μεγαλύτερου όγκου δεδομένων Να εξεταστεί κατά πόσο υπάρχει βελτίωση Πιθανή ανάγκη για μία online ΒΔ
Οκτώβριος 2016 Αναδυόμενα πρότυπα πρακτικών προγραμματισμού μέσω συλλογικής νοημοσύνης
26
ΕυχαριστίεςΘα ήθελα να ευχαριστήσω τους επιβλέποντες της
διπλωματικής μου εργασίας, κ. Ανδρέα Συμεωνίδη και κ. Κυριάκο Χατζηδημητρίου για τη συνεχή βοήθεια και καθοδήγησή τους.
Οκτώβριος 2016 Αναδυόμενα πρότυπα πρακτικών προγραμματισμού μέσω συλλογικής νοημοσύνης
27
Ερωτήσεις
Οκτώβριος 2016 Αναδυόμενα πρότυπα πρακτικών προγραμματισμού μέσω συλλογικής νοημοσύνης