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

Transcript
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