Κωνσταντίνος Σιδέρης 7254
Transcript of Κωνσταντίνος Σιδέρης 7254
...
.
...
.
...
.
...
.
...
.
...
.
...
.
...
.
...
.
...
.
Ανάπτυξη διαδικτυακής εφαρμογής για τηστατική ανάλυση αποθετηρίων κώδικα
Κωνσταντίνος Σιδέρης
Αριστοτέλειο Πανεπιστήμιο ΘεσσαλονίκηςΠολυτεχνική Σχολή
Τμήμα Ηλεκτρολόγων Μηχανικών και Μηχανικών ΥπολογιστώνΕργαστήριο Επεξεργασίας Πληροφορίας και Υπολογισμών
Ιούλιος 2016
...
.
...
.
...
.
...
.
...
.
...
.
...
.
...
.
...
.
...
.
Στατική Ανάλυση Κώδικα (1/3)
Είναι η ανάλυση κώδικα που γίνεται χωρίς την εκτέλεση τουπρογράμματος, συνήθως με την βοήθεια αυτόματωνεργαλείων που εξετάζουν τον πηγαίο κώδικα.
def foo ( a , b ) :while b ! = 0 :
i f a > b :a = a − b
else :b = b − a
return a
...
.
...
.
...
.
...
.
...
.
...
.
...
.
...
.
...
.
...
.
Στατική Ανάλυση Κώδικα (2/3)
...
.
...
.
...
.
...
.
...
.
...
.
...
.
...
.
...
.
...
.
Στατική Ανάλυση Κώδικα (3/3)
• Μέτρηση της πολυπλοκότητας.• Αποφυγή λαθών και σφαλμάτων.
• Συντακτικά• Σημασιολογικά• Λανθασμένες πρακτικές
• Βελτίωση και διατήρησης της ποιότητας του λογισμικού.
...
.
...
.
...
.
...
.
...
.
...
.
...
.
...
.
...
.
...
.
JavaScript & npm (1/3)
• Η γλώσσα του διαδικτύου.• Δυναμική με αδύναμο type system και πολλέςιδιαιτερότητες.
[ ] + [ ] = ' '
• Μεγάλη απήχηση και χρήση εκτός browser (Node.js).• Διαθέτει το μεγαλύτερο αποθετήριο πακέτων λογισμικού(250.000).
...
.
...
.
...
.
...
.
...
.
...
.
...
.
...
.
...
.
...
.
JavaScript & npm (2/3)
...
.
...
.
...
.
...
.
...
.
...
.
...
.
...
.
...
.
...
.
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"
}
...
.
...
.
...
.
...
.
...
.
...
.
...
.
...
.
...
.
...
.
Στόχοι
• Χρήση τεχνικών στατικής ανάλυσης στα πακέτα του npm.• Παρουσίαση των αποτελεσμάτων μέσα από μιαδιαδικτυακή εφαρμογή.
• Αναζήτηση• Σύγκριση• Οπτικοποίηση
• Εξαγωγή συμπερασμάτων για τη κοινότητα του npm.
...
.
...
.
...
.
...
.
...
.
...
.
...
.
...
.
...
.
...
.
Αρχιτεκτονική (1/2)
• Web server• Βάσεις δεδομένων
• Κώδικας• Στατική ανάλυση• Αναπαράσταση γράφου εξαρτήσεων
• Υπηρεσίες στατική ανάλυσης
...
.
...
.
...
.
...
.
...
.
...
.
...
.
...
.
...
.
...
.
Αρχιτεκτονική (2/2)
...
.
...
.
...
.
...
.
...
.
...
.
...
.
...
.
...
.
...
.
Υπηρεσίες Στατικής Ανάλυσης (1/4)
...
.
...
.
...
.
...
.
...
.
...
.
...
.
...
.
...
.
...
.
Υπηρεσίες Στατικής Ανάλυσης (2/4)
escomplexΠαράγει μετρικές πολυπλοκότητας.
• Cyclomatic complexity: Μετρά όλες τις πιθανές ξεχωριστέςδιαδρομές που μπορούν να ακολουθηθούν κατά τηνεκτέλεση του προγράμματος.
• Halstead Volume: Μετρά τον όγκος της πληροφορίας πουπεριέχεται στο κώδικα. Πιο συγκεκριμένα ερευνά πόσεςμεταβλητές χρησιμοποιούνται και πόσο συχνά.
• Maintainability: Διατυπώνει μια εκτίμηση για το επίπεδοσυντηρησιμότητας τού προγράμματος.
• Change cost: Το ποσοστό των modules που επηρεάζονταικατα μέσο όρο όταν αλλάζει ένα module.
...
.
...
.
...
.
...
.
...
.
...
.
...
.
...
.
...
.
...
.
Υπηρεσίες Στατικής Ανάλυσης (3/4)eslintΑνιχνεύει συντακτικά και σημασιολογικά λάθη, καθώς καιλανθασμένες πρακτικές.
• Χρήση του τελεστή === αντί του τελεστή ==.[ ] == fa l se[ ] == ! [ ]3 == "03"
• Εμφάνιση προειδοποίησης για την ύπαρξη μηεκτελέσιμου κώδικα.
funct ion fn ( ) {x = 1 ;return x ;x = 3 ;
}
...
.
...
.
...
.
...
.
...
.
...
.
...
.
...
.
...
.
...
.
Υπηρεσίες Στατικής Ανάλυσης (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
...
.
...
.
...
.
...
.
...
.
...
.
...
.
...
.
...
.
...
.
Αποτελέσματα (1/6)
• Λιγότερο από το 15% των πακέτων χρησιμοποιείται απόάλλα και μόλις 2% των πακέτων έχει in degree μεγαλύτεροτου 100.
• Κυριαρχεί η τάση για δημιουργία μικρών πακέτων.• Συνήθως τα πακέτα περιέχουν λιγότερο από 5συναρτήσεις. Το 53% των πακέτων αποτελούνται απόλιγότερες από 100 γραμμές κώδικα.
• Σχεδόν το 40% των πακέτων δεν έχει ανανεωθεί τοντελευταίο χρόνο.
• Τα πακέτα τα οποία χρησιμοποιούνται περιορίζονται στα1.000 με 2.500.
• Τα περισσότερα πακέτα αποτελούν βοηθητικά εργαλείασχετικά με τη συγγραφή λογισμικού.
...
.
...
.
...
.
...
.
...
.
...
.
...
.
...
.
...
.
...
.
Αποτελέσματα (2/6)
...
.
...
.
...
.
...
.
...
.
...
.
...
.
...
.
...
.
...
.
Αποτελέσματα (3/6)
...
.
...
.
...
.
...
.
...
.
...
.
...
.
...
.
...
.
...
.
Αποτελέσματα (4/6)
...
.
...
.
...
.
...
.
...
.
...
.
...
.
...
.
...
.
...
.
Αποτελέσματα (5/6)Type PercentageDevelopment dependency 60.79%Dependency 39.21%
Keyword Valuetest 237gruntplugin 192css 178gulpplugin 152string 151browser 147cli 141file 140stream 138testing 129
...
.
...
.
...
.
...
.
...
.
...
.
...
.
...
.
...
.
...
.
Αποτελέσματα (6/6)
...
.
...
.
...
.
...
.
...
.
...
.
...
.
...
.
...
.
...
.
Demo