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

27
Αναδυόμενα Πρότυπα Πρακτικών Προγραμματισμού μέσω Συλλογικής Νοημοσύνης Ιωάννης Π. Γκιλίρης Υπό την επίβλεψη του κ. Ανδρέα Λ. Συμεωνίδη Επίκουρου καθηγητή του ΤΗΜΜΥ ΑΠΘ Και του κ. Χατζηδημητρίου Κυριάκου Μεταδιδακτορικού ερευνητή του ΤΗΜΜΥ ΑΠΘ ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ ΤΜΗΜΑ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ & ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΕΡΓΑΣΤΗΡΙΟ ΕΠΕΞΕΡΓΑΣΙΑΣ ΠΛΗΡΟΦΟΡΙΑΣ ΚΑΙ ΥΠΟΛΟΓΙΣΜΩΝ (ΕΠΥ)

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

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

Αναδυόμενα Πρότυπα Πρακτικών Προγραμματισμού μέσω Συλλογικής

ΝοημοσύνηςΙωάννης Π. Γκιλίρης

Υπό την επίβλεψη του κ. Ανδρέα Λ. ΣυμεωνίδηΕπίκουρου καθηγητή του ΤΗΜΜΥ ΑΠΘ

Και του κ. Χατζηδημητρίου ΚυριάκουΜεταδιδακτορικού ερευνητή του ΤΗΜΜΥ ΑΠΘ

ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣΤΜΗΜΑ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ & ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝΕΡΓΑΣΤΗΡΙΟ ΕΠΕΞΕΡΓΑΣΙΑΣ ΠΛΗΡΟΦΟΡΙΑΣ ΚΑΙ ΥΠΟΛΟΓΙΣΜΩΝ (ΕΠΥ)

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

2

Σκοπός της διπλωματικής εργασίαςΕύρεση των αναδυόμενων πρακτικών

προγραμματισμού σε μία δυναμική γλώσσα όπως η JavaScript

Δημιουργία του package statLint για το Atom IDE του GitHub που θα έχει τον ρόλο ενός statistical linterΠακέτο ανοικτού κώδικα (open source)Εργαλείο στατικής ανάλυσης κώδικα για τον

εντοπισμό διαφορών από κοινές πρακτικές

Οκτώβριος 2016 Αναδυόμενα πρότυπα πρακτικών προγραμματισμού μέσω συλλογικής νοημοσύνης

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

3

Για ποιο λόγο η JavaScript ;Αποτελεί τη κυρίαρχη γλώσσα για τη δημιουργία

διαδικτυακών εφαρμογών94.1 % όλων των websites χρησιμοποιούν τη

JavaScriptΟ δυναμικός χαρακτήρας της γλώσσας οδηγεί σε

πολύ μεγάλη ευελιξία και ποικιλομορφία κατά την ανάπτυξη των εφαρμογών

Είναι interpreted γλώσσα γεγονός που αναδεικνύει την χρησιμότητα ενός linter με νέα χαρακτηριστικά

Οκτώβριος 2016 Αναδυόμενα πρότυπα πρακτικών προγραμματισμού μέσω συλλογικής νοημοσύνης

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

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

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

5

Σε ποιους απευθύνεται το statLintΣε αρχάριους προγραμματιστές που εξοικειώνονται

με τη γλώσσα και το web developingΣε ομάδες ανάπτυξης λογισμικού που επιθυμούν

μία το δυνατό μεγαλύτερη συνοχή και ομοιομορφία στο λογισμικό που αναπτύσσουν

Οκτώβριος 2016 Αναδυόμενα πρότυπα πρακτικών προγραμματισμού μέσω συλλογικής νοημοσύνης

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

6

Δομή του συστήματος εκπαίδευσης

Οκτώβριος 2016 Αναδυόμενα πρότυπα πρακτικών προγραμματισμού μέσω συλλογικής νοημοσύνης

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

7

Η μετρική για το ScoringΗ στατιστική μετρική: (term frequency x modified document frequency)Ως term θεωρούμε:

1. Κάθε εναλλακτική υπογραφή μιας μεθόδου2. Κάθε διαφορετικό συνδυασμό αλυσίδας από συγκεκριμένες

μεθόδους3. Κάθε διαφορετικό τύπο αρχικοποίησης νέων μεταβλητών

Ως document θεωρούμε κάθε ένα από τα projects του αποθετηρίου αναφοράς

Οκτώβριος 2016 Αναδυόμενα πρότυπα πρακτικών προγραμματισμού μέσω συλλογικής νοημοσύνης

mdftf

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

8

Ο modified df δείκτης υπολογίζεται ως εξής:

Θέλουμε να διατηρήσουμε μία λογαριθμική σχέση ανάμεσα στον αριθμό των projects και την τιμή του δείκτη

Οκτώβριος 2016Αναδυόμενα πρότυπα πρακτικών προγραμματισμού μέσω συλλογικής νοημοσύνης

Η μετρική για το Scoring

Nprojects

mdf 1log

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

9

Preprocessor

Οκτώβριος 2016 Αναδυόμενα πρότυπα πρακτικών προγραμματισμού μέσω συλλογικής νοημοσύνης

Φιλτράρισμα αρχείωνΟργάνωση σε φακέλους

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

10

Parser

Οκτώβριος 2016Αναδυόμενα πρότυπα πρακτικών προγραμματισμού μέσω συλλογικής νοημοσύνης

Εξαγωγή AST (Abstract Syntax Trees)Esprima Parser

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

11

Training #1

Οκτώβριος 2016Αναδυόμενα πρότυπα πρακτικών προγραμματισμού μέσω συλλογικής νοημοσύνης

Συλλογή δεδομένων για τις υπογραφές και τα assignments μεθόδωνΑρχείο εξόδου: functionSignatures.json

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

12

Training #1: Εγγραφές Αρχείου

Οκτώβριος 2016Αναδυόμενα πρότυπα πρακτικών προγραμματισμού μέσω συλλογικής νοημοσύνης

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

13

Training #2

Οκτώβριος 2016Αναδυόμενα πρότυπα πρακτικών προγραμματισμού μέσω συλλογικής νοημοσύνης

Συλλογή δεδομένων για τις αλυσίδες και τα assignments μεθόδωνΑρχείο εξόδου: functionChains.json

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

14

Training #2: Εγγραφές αρχείου

Οκτώβριος 2016Αναδυόμενα πρότυπα πρακτικών προγραμματισμού μέσω συλλογικής νοημοσύνης

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

15

Training #3

Οκτώβριος 2016Αναδυόμενα πρότυπα πρακτικών προγραμματισμού μέσω συλλογικής νοημοσύνης

Συλλογή δεδομένων για τις δηλώσεις μεταβλητώνΑρχείο εξόδου: varDeclarations.json

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

16

Δομή του statLint

Οκτώβριος 2016 Αναδυόμενα πρότυπα πρακτικών προγραμματισμού μέσω συλλογικής νοημοσύνης

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

17

Δοκιμές του statLint

Οκτώβριος 2016Αναδυόμενα πρότυπα πρακτικών προγραμματισμού μέσω συλλογικής νοημοσύνης

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

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

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

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

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

20

Cross-validation: Σύγκριση

Level 1 Level 2 Level 305

101520253035404550

GitHubD3

Οκτώβριος 2016Αναδυόμενα πρότυπα πρακτικών προγραμματισμού μέσω συλλογικής νοημοσύνης

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

21

GitHub Dataset D3 DatasetΚριτήριο επιλογής: η

δημοτικότητα100 δημοφιλέστερα projects,

βάσει του αριθμού των stars

Ισχυρότερα πειστήρια σχετικά: τόσο με την αξιοπιστία των

projects όσο και με την ομοιομορφία

τους

Οκτώβριος 2016Αναδυόμενα πρότυπα πρακτικών προγραμματισμού μέσω συλλογικής νοημοσύνης

Cross-validation: Σύγκριση

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

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

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

23

Ο συντελεστής συσχέτισης (Pearson Correlation Coefficient) ανάμεσα στα 2 διανύσματα-στήλες είναι: 0.7331

Παρατηρείται σημαντική συσχέτισηΠιθανή θετική αξιολόγηση ενός αρχείου κώδικα

από το PMD ⇒ Πολύ� πιθανή� θετική� αξιολο�γήσή απο� το statLintΟκτώβριος 2016 Αναδυόμενα πρότυπα πρακτικών προγραμματισμού μέσω συλλογικής νοημοσύνης

Πείραμα 3: Σύγκριση με το PMD

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

24

ΣυμπεράσματαΑπλές, αλλά εξίσου δυναμικές πρακτικές

συμβάλουν στις τεχνικές του MSR (Mining Software Repositories)

Online κοινότητες, όπως αυτή του GitHub, αναδεικνύουν τη δύναμη της συνεργασίας και της συλλογικής νοημοσύνης

Ένας statistical linter μπορεί να αντικατοπτρίσει τις εμφανιζόμενες αλλαγές

Οκτώβριος 2016 Αναδυόμενα πρότυπα πρακτικών προγραμματισμού μέσω συλλογικής νοημοσύνης

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

25

Μελλοντική ΕργασίαΥποστήριξη και άλλων εκδόσεων της JavaScript

CoffeeScript Τελευταία έκδοση της γλώσσας (ECMAScript6)

Χρησιμοποίηση μεγαλύτερου όγκου δεδομένων Να εξεταστεί κατά πόσο υπάρχει βελτίωση Πιθανή ανάγκη για μία online ΒΔ

Οκτώβριος 2016 Αναδυόμενα πρότυπα πρακτικών προγραμματισμού μέσω συλλογικής νοημοσύνης

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

26

ΕυχαριστίεςΘα ήθελα να ευχαριστήσω τους επιβλέποντες της

διπλωματικής μου εργασίας, κ. Ανδρέα Συμεωνίδη και κ. Κυριάκο Χατζηδημητρίου για τη συνεχή βοήθεια και καθοδήγησή τους.

Οκτώβριος 2016 Αναδυόμενα πρότυπα πρακτικών προγραμματισμού μέσω συλλογικής νοημοσύνης

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

27

Ερωτήσεις

Οκτώβριος 2016 Αναδυόμενα πρότυπα πρακτικών προγραμματισμού μέσω συλλογικής νοημοσύνης