1. Σχεδίαση και ανάπτυξη συστήματος αξιολόγησης ποιότητας κώδικα με
χρήση μετρικών στατικής ανάλυσης και τεχνικών μηχανικής μάθησης
Διπλωματική Εργασία
1
Παπαμιχαήλ Μιχαήλ
ΑΕΜ: 7502
Υπό την επίβλεψη του Επίκουρου Καθηγητή
κ. Συμεωνίδη Ανδρέα
Και του υποψήφιου διδάκτορα
κ. Διαμαντόπουλου Θεμιστοκλή
Σχεδίαση και ανάπτυξη συστήματος αξιολόγησης ποιότητας κώδικα με χρήση μετρικών στατικής ανάλυσης και τεχνικών μηχανικής μάθησης Οκτώβριος 2015
2. 2 H κατάσταση σήμερα…
Εποχή της πληροφορίας.
Εύκολα προσβάσιμη
Τεράστιος Όγκος
Πολυάριθμες μηχανές αναζήτησης κώδικα (GitHub, Searchcode…)
Πολυάριθμα έργα ανοιχτού λογισμικού που οργανώνονται σε αποθετήρια.
GitHub:
9 εκατομμύρια χρήστες
21 εκατομμύρια αποθετήρια
Σχεδίαση και ανάπτυξη συστήματος αξιολόγησης ποιότητας κώδικα με χρήση μετρικών στατικής ανάλυσης και τεχνικών μηχανικής μάθησης Οκτώβριος 2015
3. 3
Διαδικασία παραγωγής λογισμικού σήμερα
queries Upload
code
CSEs
Σχεδίαση και ανάπτυξη συστήματος αξιολόγησης ποιότητας κώδικα με χρήση μετρικών στατικής ανάλυσης και τεχνικών μηχανικής μάθησης Οκτώβριος 2015
4. 4
Code Quality Estimation System
Προσέγγιση:
Χρήση των 100 δημοφιλέστερων αποθετηρίων του GitHub (24930 αρχεία κώδικα
java)
Στατική ανάλυση
Κατασκευή μοντέλου με χρήση νευρωνικών δικτύων για την εκτίμηση της
ποιότητας ενός αρχείου κώδικα.
Κατασκευή ενός one class classifier με τη χρήση SVMs με στόχο να
διαπιστώνεται αν ένα αρχείο κώδικα ανήκει στο χώρο μελέτης.
Σχεδίαση και ανάπτυξη συστήματος αξιολόγησης ποιότητας κώδικα με χρήση μετρικών στατικής ανάλυσης και τεχνικών μηχανικής μάθησης Οκτώβριος 2015
5. 5 PMD Analysis Tool
Εύρεση “κακών πρακτικών” στη διαδικασία συγγραφής του κώδικα
Πολυάριθμοι έλεγχοι (Rules) κατηγοριοποιημένοι σε ομάδες (Rulesets) π.χ.
Optimization, Coupling, Design….
XML Report για κάθε αρχείο με το σύνολο των παραβιάσεων (violations)
Σημείο της
παραβίασης
Κανόνας που
παραβιάστηκε
Σετ κανόνων
Ορθή
αντιμετώπιση
Σημαντικότητα
παραβίασης
Σχεδίαση και ανάπτυξη συστήματος αξιολόγησης ποιότητας κώδικα με χρήση μετρικών στατικής ανάλυσης και τεχνικών μηχανικής μάθησης Οκτώβριος 2015
6. 6 Google Code Pro Analytix
Εξαγωγή μετρικών στατικής ανάλυσης σε XML report
LOC (Lines Of Code)
Average Block Depth
Average Cyclomatic Complexity
Abstractness
Coupling (Afferent, Efferent)
Distance
Depth of Inheritance
Comments Ratio
Υποστηρίζει και άλλες λειτουργίες όπως Junit Testing, Code Coverage, Similar
Code Analysis
Συνολικά στην ανάλυση χρησιμοποιήθηκαν 73 μετρικές.
Σχεδίαση και ανάπτυξη συστήματος αξιολόγησης ποιότητας κώδικα με χρήση μετρικών στατικής ανάλυσης και τεχνικών μηχανικής μάθησης Οκτώβριος 2015
7. 7
Από την προσέγγιση στην… Υλοποίηση
Training Set
Top 100
Repositories
GitHub
24930
files
Training
Set
Ποιότητα;
Target;
Χρειάζονται
όλες;
Σχεδίαση και ανάπτυξη συστήματος αξιολόγησης ποιότητας κώδικα με χρήση μετρικών στατικής ανάλυσης και τεχνικών μηχανικής μάθησης Οκτώβριος 2015
8. 8 Dataset – Ποιοτικά στοιχεία (1)
0,41%
Σχεδίαση και ανάπτυξη συστήματος αξιολόγησης ποιότητας κώδικα με χρήση μετρικών στατικής ανάλυσης και τεχνικών μηχανικής μάθησης Οκτώβριος 2015
9. 9 Dataset – Ποιοτικά στοιχεία (2)
Ελάχιστο
ποσοστό
αρχείων με
critical
violations
Αναμενόμενη
εμφάνιση
μεγάλων τιμών
Σχεδίαση και ανάπτυξη συστήματος αξιολόγησης ποιότητας κώδικα με χρήση μετρικών στατικής ανάλυσης και τεχνικών μηχανικής μάθησης Οκτώβριος 2015
10. 10
Training Target
Ta Stars του κάθε αποθετηρίου.
Όμως:
Αριθμός stars/αποθετήριο και όχι ανά file
Είναι κάθε αρχείο ενός αποθετηρίου εξίσου σημαντικό;
Μεγάλες διαφορές στον αριθμό των αρχείων κάθε
αποθετηρίου.
10000
x stars y stars z stars
Dependency
Analysis
Σχεδίαση και ανάπτυξη συστήματος αξιολόγησης ποιότητας κώδικα με χρήση μετρικών στατικής ανάλυσης και τεχνικών μηχανικής μάθησης Οκτώβριος 2015
11. 11
Dependency analysis
Για το αρχείο i του αποθετηρίου j το target είναι:
𝑡𝑎𝑟𝑔𝑒𝑡 𝑖, 𝑗 = log
𝑠𝑡𝑎𝑟𝑠 𝑗
𝑓𝑖𝑙𝑒𝑠 𝑗
+
𝑑𝑒𝑝𝑒𝑛𝑑𝑒𝑛𝑐𝑖𝑒𝑠 𝑖
𝑓𝑖𝑙𝑒𝑠 𝑗
∗ 𝑠𝑡𝑎𝑟𝑠 𝑗
Εξισορρόπηση των
διαφορών στον
αριθμό των
αρχείων κάθε
αποθετηρίου
Αρχική ισάξια
συνεισφορά του κάθε
αρχείου στην
διαμόρφωση των
stars του
αποθετηρίου
Κατανομή των stars με
βάση το ποσοστό των
αρχείων του
αποθετηρίου που
εξαρτώνται από αυτό
Σχεδίαση και ανάπτυξη συστήματος αξιολόγησης ποιότητας κώδικα με χρήση μετρικών στατικής ανάλυσης και τεχνικών μηχανικής μάθησης Οκτώβριος 2015
12. 12
Dependency analysis - Παράδειγμα
Σχεδίαση και ανάπτυξη συστήματος αξιολόγησης ποιότητας κώδικα με χρήση μετρικών στατικής ανάλυσης και τεχνικών μηχανικής μάθησης Οκτώβριος 2015
Αποθετήριο με 2000 αρχεία κώδικα και 10000 stars:
Αρχείο (f1) από το οποίο εξαρτώνται 150 αρχεία
𝑠𝑡𝑎𝑟𝑠 𝑓1 = log(
10000
2000
+
150
2000
∗ 10000)
𝑠𝑡𝑎𝑟𝑠 𝑓1 = 2.8779
Αποθετήριο με 50 αρχεία κώδικα και 1000 stars:
Αρχείο (f2) από το οποίο εξαρτώνται 10 αρχεία
𝑠𝑡𝑎𝑟𝑠 𝑓2 = log(
1000
50
+
10
50
∗ 1000)
𝑠𝑡𝑎𝑟𝑠 𝑓2 = 2.34
𝑠𝑡𝑎𝑟𝑠 𝑓2 = 220
𝑠𝑡𝑎𝑟𝑠 𝑓1 = 755
13. 13
ΑΝΝs model
𝑖=1
𝑁
𝑋𝑖 𝑊𝑖,𝑗
𝑡𝑎𝑛𝑠𝑖𝑔
𝑖=1
𝑁
𝑋𝑖 𝑊𝑖,𝑗 + 𝑏(𝑗)
𝑌 = 𝑡𝑎𝑛𝑠𝑖𝑔
𝑖=1
𝑁
𝐾𝑖 𝑊𝑖 + 𝑏
Σχεδίαση και ανάπτυξη συστήματος αξιολόγησης ποιότητας κώδικα με χρήση μετρικών στατικής ανάλυσης και τεχνικών μηχανικής μάθησης Οκτώβριος 2015
14. 14
ΑΝΝs model
Το μοντέλο είναι σε θέση
να εκτιμήσει το target
set με μέσο σφάλμα 13%
Σχεδίαση και ανάπτυξη συστήματος αξιολόγησης ποιότητας κώδικα με χρήση μετρικών στατικής ανάλυσης και τεχνικών μηχανικής μάθησης Οκτώβριος 2015
15. 15
ΑΝΝs model
Σχεδίαση και ανάπτυξη συστήματος αξιολόγησης ποιότητας κώδικα με χρήση μετρικών στατικής ανάλυσης και τεχνικών μηχανικής μάθησης Οκτώβριος 2015
16. 16
SVMs One Class Classifier
Ανάγκη οριοθέτησης του χώρου μελέτης ο οποίος αποτελείται από κώδικα που
καλύπτει κάποιες ελάχιστες προδιαγραφές ποιότητας
Θα χρησιμοποιηθούν όλες οι μετρικές;
Αν όχι ποιες και ποιο θα είναι το κριτήριο επιλογής;
Principal
Component
Analysis
Σχεδίαση και ανάπτυξη συστήματος αξιολόγησης ποιότητας κώδικα με χρήση μετρικών στατικής ανάλυσης και τεχνικών μηχανικής μάθησης Οκτώβριος 2015
17. 17
PCA – Principal Component Analysis
Component
Initial Eigenvalues
Total % of Variance Cumulative %
1 14.936 20.460 20.460
2 4.821 6.604 27.064
3 4.735 6.486 33.551
4 4.276 5.858 39.408
5 3.930 5.383 44.791
6 3.692 5.057 49.848
7 3.561 4.879 54.727
8 2.816 3.857 58.584
9 2.566 3.516 62.100
10 2.376 3.255 65.354
11 2.154 2.951 68.305
12 2.082 2.852 71.158
13 1.921 2.632 73.789
14 1.791 2.453 76.243
15 1.733 2.374 78.617
16 1.373 1.881 80.498
17 1.249 1.711 82.209
18 1.152 1.578 83.788
19 1.029 1.410 85.198
20 1.002 1.373 86.571
Average Block Depth
Average Cyclomatic
Complexity
Average Depth of
Inheritance Hierarchy
Average Lines of Code
per Method
Comments Ratio
Distance
Lines of Code
Σχεδίαση και ανάπτυξη συστήματος αξιολόγησης ποιότητας κώδικα με χρήση μετρικών στατικής ανάλυσης και τεχνικών μηχανικής μάθησης Οκτώβριος 2015
18. 18
SVMs One Class Classifier
𝑥, 𝑦 = exp(
− 𝑥 − 𝑦
2
2𝜎2 )
Χρήση Gaussian radial basis kernel function
Gamma Parameter (1/σ2) = 0.04
Tolerance = 0.001
Σχεδίαση και ανάπτυξη συστήματος αξιολόγησης ποιότητας κώδικα με χρήση μετρικών στατικής ανάλυσης και τεχνικών μηχανικής μάθησης Οκτώβριος 2015
20. 20
Πειράματα
Σχεδίαση και ανάπτυξη συστήματος αξιολόγησης ποιότητας κώδικα με χρήση μετρικών στατικής ανάλυσης και τεχνικών μηχανικής μάθησης Οκτώβριος 2015
21. 21 Πειράματα
Σχεδίαση και ανάπτυξη συστήματος αξιολόγησης ποιότητας κώδικα με χρήση μετρικών στατικής ανάλυσης και τεχνικών μηχανικής μάθησης Οκτώβριος 2015
22. 22 Πειράματα
Σχεδίαση και ανάπτυξη συστήματος αξιολόγησης ποιότητας κώδικα με χρήση μετρικών στατικής ανάλυσης και τεχνικών μηχανικής μάθησης Οκτώβριος 2015
23. 23 Services που υλοποιήθηκαν
Command Line Tool
Web Service
Σχεδίαση και ανάπτυξη συστήματος αξιολόγησης ποιότητας κώδικα με χρήση μετρικών στατικής ανάλυσης και τεχνικών μηχανικής μάθησης Οκτώβριος 2015
24. 24
Command Line Tool
Σχεδίαση και ανάπτυξη συστήματος αξιολόγησης ποιότητας κώδικα με χρήση μετρικών στατικής ανάλυσης και τεχνικών μηχανικής μάθησης Οκτώβριος 2015
25. 25 Web Service
Σχεδίαση και ανάπτυξη συστήματος αξιολόγησης ποιότητας κώδικα με χρήση μετρικών στατικής ανάλυσης και τεχνικών μηχανικής μάθησης Οκτώβριος 2015
26. 26 Συμπεράσματα
Αξιόπιστη μετάφραση μετρικών στατικής ανάλυσης σε εκτίμηση ποιότητας κώδικα.
Χρήση του συστήματος που υλοποιήθηκε ως αυτόνομο εργαλείο στατικής
ανάλυσης και εντοπισμού κακών πρακτικών συγγραφής κώδικα.
Δυνατότητα χρήσης του συστήματος ως middleware στη διαδικασία εύρεσης
κώδικα για την αξιολόγηση των αποτελεσμάτων.
Τα πειράματα έδειξαν ότι το σύστημα είναι σε θέση να εντοπίζει με μικρό
ποσοστό λάθους τα αρχεία κώδικα που αποκλίνουν από τις ενδεικνυόμενες τιμές
στατικής ανάλυσης.
Σχεδίαση και ανάπτυξη συστήματος αξιολόγησης ποιότητας κώδικα με χρήση μετρικών στατικής ανάλυσης και τεχνικών μηχανικής μάθησης Οκτώβριος 2015
27. 27 Ανοιχτά Θέματα
Προσθήκη μηχανισμού δυναμικής ανάλυσης
Εφαρμογή και για άλλες γλώσσες προγραμματισμού
Περιορισμός των μετρικών για γρηγορότερη εκτέλεση
Δυνατότητα συνδυασμού αποτελεσμάτων
Δυνατότητα βελτίωσης αποτελεσμάτων
Σχεδίαση και ανάπτυξη συστήματος αξιολόγησης ποιότητας κώδικα με χρήση μετρικών στατικής ανάλυσης και τεχνικών μηχανικής μάθησης Οκτώβριος 2015
28. 28
Σας ευχαριστώ πολύ για την προσοχή σας
Σχεδίαση και ανάπτυξη συστήματος αξιολόγησης ποιότητας κώδικα με χρήση μετρικών στατικής ανάλυσης και τεχνικών μηχανικής μάθησης Οκτώβριος 2015