Γκιλίρης Ιωάννης 7419

Post on 11-Feb-2017

28 views 0 download

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 Αναδυόμενα πρότυπα πρακτικών προγραμματισμού μέσω συλλογικής νοημοσύνης