Κωνσταντίνος Σιδέρης 7254

21
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ανάπτυξη διαδικτυακής εφαρμογής για τη στατική ανάλυση αποθετηρίων κώδικα Κωνσταντίνος Σιδέρης Αριστοτέλειο Πανεπιστήμιο Θεσσαλονίκης Πολυτεχνική Σχολή Τμήμα Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Εργαστήριο Επεξεργασίας Πληροφορίας και Υπολογισμών Ιούλιος 2016

Transcript of Κωνσταντίνος Σιδέρης 7254

Page 1: Κωνσταντίνος Σιδέρης 7254

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

Ανάπτυξη διαδικτυακής εφαρμογής για τηστατική ανάλυση αποθετηρίων κώδικα

Κωνσταντίνος Σιδέρης

Αριστοτέλειο Πανεπιστήμιο ΘεσσαλονίκηςΠολυτεχνική Σχολή

Τμήμα Ηλεκτρολόγων Μηχανικών και Μηχανικών ΥπολογιστώνΕργαστήριο Επεξεργασίας Πληροφορίας και Υπολογισμών

Ιούλιος 2016

Page 2: Κωνσταντίνος Σιδέρης 7254

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

Στατική Ανάλυση Κώδικα (1/3)

Είναι η ανάλυση κώδικα που γίνεται χωρίς την εκτέλεση τουπρογράμματος, συνήθως με την βοήθεια αυτόματωνεργαλείων που εξετάζουν τον πηγαίο κώδικα.

def foo ( a , b ) :while b ! = 0 :

i f a > b :a = a − b

else :b = b − a

return a

Page 3: Κωνσταντίνος Σιδέρης 7254

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

Στατική Ανάλυση Κώδικα (2/3)

Page 4: Κωνσταντίνος Σιδέρης 7254

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

Στατική Ανάλυση Κώδικα (3/3)

• Μέτρηση της πολυπλοκότητας.• Αποφυγή λαθών και σφαλμάτων.

• Συντακτικά• Σημασιολογικά• Λανθασμένες πρακτικές

• Βελτίωση και διατήρησης της ποιότητας του λογισμικού.

Page 5: Κωνσταντίνος Σιδέρης 7254

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

JavaScript & npm (1/3)

• Η γλώσσα του διαδικτύου.• Δυναμική με αδύναμο type system και πολλέςιδιαιτερότητες.

[ ] + [ ] = ' '

• Μεγάλη απήχηση και χρήση εκτός browser (Node.js).• Διαθέτει το μεγαλύτερο αποθετήριο πακέτων λογισμικού(250.000).

Page 6: Κωνσταντίνος Σιδέρης 7254

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

JavaScript & npm (2/3)

Page 7: Κωνσταντίνος Σιδέρης 7254

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

JavaScript & npm (3/3){

"name " : "npm" ," version " : " 3 . 9 . 6 " ," descr ipt ion " : "a package manager for JavaScr ip t " ," keywords " : [

" i n s t a l l " ,"modules " ," package manager " ," package . json "

] ,"homepage " : " https :// docs . npmjs . com/" ," author " : " Isaac Z . Schlueter < i@izs .me> ( http :// blog . i z s .me) " ," repos i tory " : {

" type " : " g i t " ," u r l " : " https :// github . com/npm/npm"

} ," dependencies " : {

" abbrev " : " ~ 1 . 0 . 7 " ," ans ico lors " : " ~ 0 . 3 . 2 " ," columnify " : " ~ 1 . 5 . 4 " ,

. . .} ," devDependencies " : {

"deep−equal " : " ~ 1 . 0 . 1 " ,"marked " : " ~ 0 . 3 . 5 " ,"npm−reg i s t r y−couchapp " : " ~ 2 . 6 . 1 2 " ,

. . .} ," l i cense " : " A r t i s t i c −2.0"

}

Page 8: Κωνσταντίνος Σιδέρης 7254

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

Στόχοι

• Χρήση τεχνικών στατικής ανάλυσης στα πακέτα του npm.• Παρουσίαση των αποτελεσμάτων μέσα από μιαδιαδικτυακή εφαρμογή.

• Αναζήτηση• Σύγκριση• Οπτικοποίηση

• Εξαγωγή συμπερασμάτων για τη κοινότητα του npm.

Page 9: Κωνσταντίνος Σιδέρης 7254

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

Αρχιτεκτονική (1/2)

• Web server• Βάσεις δεδομένων

• Κώδικας• Στατική ανάλυση• Αναπαράσταση γράφου εξαρτήσεων

• Υπηρεσίες στατική ανάλυσης

Page 10: Κωνσταντίνος Σιδέρης 7254

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

Αρχιτεκτονική (2/2)

Page 11: Κωνσταντίνος Σιδέρης 7254

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

Υπηρεσίες Στατικής Ανάλυσης (1/4)

Page 12: Κωνσταντίνος Σιδέρης 7254

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

Υπηρεσίες Στατικής Ανάλυσης (2/4)

escomplexΠαράγει μετρικές πολυπλοκότητας.

• Cyclomatic complexity: Μετρά όλες τις πιθανές ξεχωριστέςδιαδρομές που μπορούν να ακολουθηθούν κατά τηνεκτέλεση του προγράμματος.

• Halstead Volume: Μετρά τον όγκος της πληροφορίας πουπεριέχεται στο κώδικα. Πιο συγκεκριμένα ερευνά πόσεςμεταβλητές χρησιμοποιούνται και πόσο συχνά.

• Maintainability: Διατυπώνει μια εκτίμηση για το επίπεδοσυντηρησιμότητας τού προγράμματος.

• Change cost: Το ποσοστό των modules που επηρεάζονταικατα μέσο όρο όταν αλλάζει ένα module.

Page 13: Κωνσταντίνος Σιδέρης 7254

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

Υπηρεσίες Στατικής Ανάλυσης (3/4)eslintΑνιχνεύει συντακτικά και σημασιολογικά λάθη, καθώς καιλανθασμένες πρακτικές.

• Χρήση του τελεστή === αντί του τελεστή ==.[ ] == fa l se[ ] == ! [ ]3 == "03"

• Εμφάνιση προειδοποίησης για την ύπαρξη μηεκτελέσιμου κώδικα.

funct ion fn ( ) {x = 1 ;return x ;x = 3 ;

}

Page 14: Κωνσταντίνος Σιδέρης 7254

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

Υπηρεσίες Στατικής Ανάλυσης (4/4)

jsinspectΑνιχνεύει κομμάτια κώδικα που παρουσιάζουν την ίδια ήπαρόμοια δομή και λειτουργία.

def findAManager :for each employee in employees :

i f employee . isManager :return employee

return n i l

def f indASupervisor :for each employee in employees :

i f employee . i sSuperv isor :return employee

return n i l

Page 15: Κωνσταντίνος Σιδέρης 7254

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

Αποτελέσματα (1/6)

• Λιγότερο από το 15% των πακέτων χρησιμοποιείται απόάλλα και μόλις 2% των πακέτων έχει in degree μεγαλύτεροτου 100.

• Κυριαρχεί η τάση για δημιουργία μικρών πακέτων.• Συνήθως τα πακέτα περιέχουν λιγότερο από 5συναρτήσεις. Το 53% των πακέτων αποτελούνται απόλιγότερες από 100 γραμμές κώδικα.

• Σχεδόν το 40% των πακέτων δεν έχει ανανεωθεί τοντελευταίο χρόνο.

• Τα πακέτα τα οποία χρησιμοποιούνται περιορίζονται στα1.000 με 2.500.

• Τα περισσότερα πακέτα αποτελούν βοηθητικά εργαλείασχετικά με τη συγγραφή λογισμικού.

Page 16: Κωνσταντίνος Σιδέρης 7254

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

Αποτελέσματα (2/6)

Page 17: Κωνσταντίνος Σιδέρης 7254

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

Αποτελέσματα (3/6)

Page 18: Κωνσταντίνος Σιδέρης 7254

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

Αποτελέσματα (4/6)

Page 19: Κωνσταντίνος Σιδέρης 7254

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

Αποτελέσματα (5/6)Type PercentageDevelopment dependency 60.79%Dependency 39.21%

Keyword Valuetest 237gruntplugin 192css 178gulpplugin 152string 151browser 147cli 141file 140stream 138testing 129

Page 20: Κωνσταντίνος Σιδέρης 7254

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

Αποτελέσματα (6/6)

Page 21: Κωνσταντίνος Σιδέρης 7254

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

Demo