ΕΡΓΟ: Συγκριτική Μελέτη Λογισμικού Βιβλιοθηκών, Λογισμικού Εφαρμογών Ανοικτού Κώδικα και Βιομηχανικού Λογισμικού MIS:

Σχετικά έγγραφα
Έλεγχος Συνένωσης και Διασφάλιση Ποιότητας

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

Γενικό πλαίσιο. Software Evolution Monitor Requirements. Απόστολος Ζάρρας

Comparative Study of API vs. Open-Source Software ZAPROUDI A. PASCHALIA. Supervisor: CHATZHGEORGIOU ALEXANDROS

ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΕΦΗΣ ΑΝΑΛΥΣΗ Μετρικές Αντικειμενοστραφούς Σχεδίασης. Ιωάννης Σταμέλος Βάιος Κολοφωτιάς Πληροφορική

ΣΥΣΧΕΤΙΣΗ και ΓΡΑΜΜΙΚΗ ΠΑΛΙΝΔΡΟΜΗΣΗ

Πίνακας Περιεχομένων. μέρος A 1 Εισαγωγή στην Τεχνολογία Λογισμικού

Εισαγωγή στη Σχεδίαση Λογισμικού

ΤΕΧΝΟΛΟΓΙΑ ΛΟΓΙΣΜΙΚΟΥ Ι

Τεχνολογία Λογισμικού & Πνευματική Ιδιοκτησία. ΜΥΥ-106 Εισαγωγή στους Η/Υ και στην Πληροφορική

(McCabe, 1976) (1/4) C = e n + 2p 29/4/2009

Software Evolution Monitor. Software Evolution Monitor (Requirements Definition) Έκδοση <1.0>

Κύρια σημεία. Η έννοια του μοντέλου. Έρευνα στην εφαρμοσμένη Στατιστική. ΈρευναστηΜαθηματικήΣτατιστική. Αντικείμενο της Μαθηματικής Στατιστικής

ΠΥΘΙΑ 2η ΕΚΔΟΣΗ. Μονάδα Προβλέψεων και Στρατηγικής Εθνικό Μετσόβιο Πολυτεχνείο Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Ηλεκτρονικών

ICAP GROUP S.A. ΑΝΑΘΕΩΡΗΣΗ ΜΑΚΡΟΟΙΚΟΝΟΜΙΚΩΝ ΥΠΟΔΕΙΓΜΑΤΩΝ

Εφαρμοσμένη Στατιστική: Συντελεστής συσχέτισης. Παλινδρόμηση απλή γραμμική, πολλαπλή γραμμική

Πληροφορική 2. Τεχνολογία Λογισμικού

Αντικειμενοστρεφής Προγραμματισμός

Δομημένος Προγραμματισμός

Αντικειμενοστρεφής Προγραμματισμός

. Μεθοδολογία Προγραμματισμού. Καλή και κακή σχεδίαση. Νικόλαος Πεταλίδης. Εισαγωγή Εαρινό Εξάμηνο 2014

ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΙΓΑΙΟΥ ΣΧΟΛΗ ΕΠΙΣΤΗΜΩΝ ΤΗΣ ΔΙΟΙΚΗΣΗΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΟΙΚΟΝΟΜΙΑΣ ΚΑΙ ΔΙΟΙΚΗΣΗΣ ΣΤΑΤΙΣΤΙΚΗ

ΣΤΑΤΙΣΤΙΚΗ ΑΝΑΛΥΣΗ ΜΕ ΧΡΗΣΗ Η/Υ

ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΙΓΑΙΟΥ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΟΙΚΟΝΟΜΙΑΣ ΚΑΙ ΔΙΟΙΚΗΣΗΣ ΣΤΑΤΙΣΤΙΚΗ

ΥΠΟΛΟΓΙΣΤΙΚΕΣ ΤΕΧΝΙΚΕΣ ΓΙΑ ΣΥΣΤΗΜΑΤΑ ΜΕΤΑΔΟΣΗΣ ΠΛΗΡΟΦΟΡΙΑΣ

ΤΕΧΝΟΛΟΓΙΑ ΛΟΓΙΣΜΙΚΟΥ Ι

Ελληνική Δημοκρατία Τεχνολογικό Εκπαιδευτικό Ίδρυμα Ηπείρου. Πληροφορική II. Ενότητα 4 : Τεχνολογία λογισμικού. Δρ.

Μοντέλα Παλινδρόμησης. Άγγελος Μάρκος, Λέκτορας ΠΤ Ε, ΠΘ

Στατιστική Ι. Ανάλυση Παλινδρόμησης

XP μέθοδος για τη Διαχείριση Έργων Λογισμικού

Οικονομετρία. Εξειδίκευση του υποδείγματος. Προσθήκη άσχετης μεταβλητής και παράλειψη σχετικής. Τμήμα: Αγροτικής Οικονομίας & Ανάπτυξης

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ Π ΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ Π ΕΡΙΒΑΛΛΟΝ

ΤΕΧΝΟΛΟΓΙΑ ΛΟΓΙΣΜΙΚΟΥ Ι

Οικονομετρία. Εξειδίκευση του υποδείγματος. Προσθήκη άσχετης μεταβλητής και παράλειψη σχετικής. Τμήμα: Αγροτικής Οικονομίας & Ανάπτυξης

ΤΜΗΜΑ ΕΠΙΧΕΙΡΗΜΑΤΙΚΟΥ ΣΧΕΔΙΑΣΜΟΥ & ΠΛΗΡΟΦΟΡΙΑΚΩΝ ΣΥΣΤΗΜΑΤΩΝ

Στατιστική για Πολιτικούς Μηχανικούς Λυμένες ασκήσεις μέρους Β

Κωδικοποίηση και Έλεγχος Ορθότητας

Κεφ. Ιο ΒΑΣΙΚΕΣ ΕΝΝΟΙΕΣ ΘΕΩΡΙΑΣ ΠΙΘΑΝΟΤΗΤΩΝ

Στατιστική Ι. Ενότητα 7: Κανονική Κατανομή. Δρ. Γεώργιος Κοντέος Τμήμα Διοίκησης Επιχειρήσεων Γρεβενών

ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΕΦΗΣ ΑΝΑΛΥΣΗ Η μεθοδολογία ICONIX. Ιωάννης Σταμέλος Βάιος Κολοφωτιάς Πληροφορική

4 Το άτομο ως παραγωγός (η προσφορά των αγαθών)

Διαγράμματα Κλάσεων στη Σχεδίαση

2.1 Αντικειµενοστρεφής προγραµµατισµός

f x g x f x g x, x του πεδίου ορισμού της; Μονάδες 4 είναι οι παρατηρήσεις μιας ποσοτικής μεταβλητής Χ ενός δείγματος μεγέθους ν και w

Στατιστικές συναρτήσεις Γραφική και πινακοποιημένη αναπαράσταση δεδομένων (ιστόγραμμα) Διαχειριστής Σεναρίων Κινητός Μέσος σε Χρονοσειρές o o o

Αντικειμενοστρεφής Προγραμματισμός

Σχεδίαση Λογισμικού. Σημείωση

Σχεδιασµός βασισµένος σε συνιστώσες

Τεχνολογία Λογισµικού Ι Κεφάλαιο 5

Συνοπτικά περιεχόμενα

EPL 603 TOPICS IN SOFTWARE ENGINEERING. Lab 5: Component Adaptation Environment (COPE)

ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ

Εμπειρική Μελέτη της Εξέλιξης της Ποιότητας του Κώδικα Ανοιχτού Λογισμικού

ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑ Αξιολόγηση των Σχεδιαστικών Προτύπων και της Ποιότητας του Λογισμικού μέσω Μετρικών, στις Περιπτώσεις Προσθήκης Λειτουργικότητας και

Σχεδίαση Κλάσεων. Γρηγόρης Τσουµάκας. Τµήµα Πληροφορικής, Αριστοτέλειο Πανεπιστήµιο Θεσσαλονίκης. Έκδοση:

Εισαγωγή στην Στατιστική (ΔΕ200Α-210Α)

Στατιστική Επιχειρήσεων Ι

Νοσηλευτική Σεμινάρια

Ανάπτυξη Εφαρµογών σε Προγραµµατιστικό Περιβάλλον

ΑΡΧΗ 1ΗΣ ΣΕΛΙΔΑΣ Γ ΗΜΕΡΗΣΙΩΝ

ΑΡΧΗ 1ΗΣ ΣΕΛΙΔΑΣ Γ ΗΜΕΡΗΣΙΩΝ

«Διαχείριση Έργων στη Δημόσια Διοίκηση» Ενότητα 6: Τεχνικές παρακολούθησης (μέρος 1ο) ΕΙΔΙΚΗΣ ΦΑΣΗΣ ΣΠΟΥΔΩΝ 24η ΕΚΠΑΙΔΕΥΤΙΚΗ ΣΕΙΡΑ

Παραδοτέο Π5.3: Έντυπο και ψηφιακό υλικό (Web site) προβολής των δράσεων έργου

Ημερομηνία Παράδοσης: 4/7/2013

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΑΝΑΡΤΗΤΕΑ ΣΤΟ ΔΙΑΔΙΚΤΥΟ. Αθήνα, 06/05/2015 Α.Π. : 7022 Προς: ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΠΑΤΗΣΙΩΝ 76 T.

ΘΕΜΑΤΑ ΔΙΠΛΩΜΑΤΙΚΩΝ ΕΡΓΑΣΙΩΝ ΓΙΑ ΤΟ

Συγγραφή Προγραμμάτων

ΟΙΚΟΝΟΜΕΤΡΙΑ. Παπάνα Αγγελική

ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΕΦΗΣ ΑΝΑΛΥΣΗ Διαγράμματα Αλληλεπίδρασης. Ιωάννης Σταμέλος Βάιος Κολοφωτιάς Πληροφορική

ΣΤΑΤΙΣΤΙΚΗ ΕΠΙΧΕΙΡΗΣΕΩΝ

Θέμα 1 ο (ΜΑΪΟΣ 2004, ΜΑΪΟΣ 2008) Να δείξετε ότι η παράγωγος της σταθερής συνάρτησης f (x) = c είναι (c) = 0. Απόδειξη

Εισαγωγή. Διαλέξεις στο μάθημα: Μεταφραστές Γιώργος Μανής

ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΕΦΗΣ ΑΝΑΛΥΣΗ Rational Unified Process. Ιωάννης Σταμέλος Βάιος Κολοφωτιάς Πληροφορική

Ιδιότητες αντικειμένων, συγγραφή κώδικα, συντακτικά λάθη

Εισαγωγή στην Πληροφορική

Γλώσσες Προγραμματισμού Μεταγλωττιστές

ΜΑΘΗΜΑΤΙΚΑ & ΣΤΟΙΧΕΙΑ ΣΤΑΤΙΣΤΙΚΗΣ ΓΕΝΙΚΗΣ ΠΑΙ ΕΙΑΣ 2015 ΕΚΦΩΝΗΣΕΙΣ

Οικονομετρία. Απλή Παλινδρόμηση. Ιδιότητες της ευθείας παλινδρόμησης και συντελεστής προσδιορισμού. Τμήμα: Αγροτικής Οικονομίας & Ανάπτυξης

Υπολογιστική Νοημοσύνη. Μάθημα 9: Γενίκευση

Προγραμματισμός Η/Υ. Προτεινόμενα θέματα εξετάσεων Εργαστήριο. Μέρος 1 ό. ΤΕΙ Λάρισας- Σχολή Τεχνολογικών Εφαρμογών Τμήμα Πολιτικών Έργων Υποδομής

ΟΙΚΟΝΟΜΕΤΡΙΑ. Ενότητα 3: Πολλαπλή Παλινδρόμηση. Αναπλ. Καθηγητής Νικόλαος Σαριαννίδης Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά)

ΣΤΑΤΙΣΤΙΚΗ ΕΠΙΧΕΙΡΗΣΕΩΝ

Λίγα λόγια για τους συγγραφείς 16 Πρόλογος 17

ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΕΦΗΣ ΑΝΑΛΥΣΗ Επιχειρηματική Μοντελοποίηση. Ιωάννης Σταμέλος Βάιος Κολοφωτιάς Πληροφορική

Πρόταση για Ανασχηματισμό του Προγράμματος Προπτυχιακών Σπουδών της ΣΗΜΜΥ

ΠΕΡΙΛΗΨΗ ΘΕΩΡΙΑΣ ΣΤΗΝ ΕΥΘΥΓΡΑΜΜΗ ΚΙΝΗΣΗ

Κεφ. 2. Η ζήτηση των αγαθών

Ανάπτυξη & Σχεδίαση Λογισμικού (ΗΥ420)

Γ ε ν ι κ έ ς εξ ε τ ά σ ε ι ς Αρχές Οικονομικής Θεωρίας Γ λυκείου ο ι κονομικών σπουδών

ΟΙΚΟΝΟΜΕΤΡΙΑ. Ενότητα 2: Παλινδρόμηση. Αναπλ. Καθηγητής Νικόλαος Σαριαννίδης Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά)

ΤΕΧΝΟΛΟΓΙΑ ΛΟΓΙΣΜΙΚΟΥ Ι

- Επιστημονικός Υπεύθυνος Ενεργείας: Θεόδωρος Γ. Εξαρχάκος Καθηγητής του Πανεπιστημίου Αθηνών Πρόεδρος του Παιδαγωγικού Ινστιτούτου «Αναμόρφωση / εκ

ΕΛΕΓΧΟΣ ΠΑΡΑΓΩΓΙΚΩΝ ΔΙΕΡΓΑΣΙΩΝ

ΠΕΡΙΕΧΟΜΕΝΑ. ΠΡΟΛΟΓΟΣ... vii ΠΕΡΙΕΧΟΜΕΝΑ... ix ΓΕΝΙΚΗ ΒΙΒΛΙΟΓΡΑΦΙΑ... xv. Κεφάλαιο 1 ΓΕΝΙΚΕΣ ΕΝΝΟΙΕΣ ΑΠΟ ΤΗ ΣΤΑΤΙΣΤΙΚΗ

Διακριτικές Συναρτήσεις

Εισαγωγή στην Στατιστική (ΔΕ200Α-210Α)

Αναπλ. Καθηγήτρια, Ελένη Κανδηλώρου. Αθήνα Σημειώσεις. Εκτίμηση των Παραμέτρων β 0 & β 1. Απλό γραμμικό υπόδειγμα: (1)

Εξαμηνιαία Εργασία Β. Κανονική Κατανομή - Επαγωγική Στατιστική

Στατιστική Επιχειρήσεων

Δίκτυα Υπολογιστών ΙΙ (Ασκήσεις Πράξης)

Transcript:

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΥΠΟΥΡΓΕΙΟ ΠΑΙΔΕΙΑΣ, ΔΙΑ ΒΙΟΥ ΜΑΘΗΣΗΣ ΚΑΙ ΘΡΗΣΚΕΥΜΑΤΩΝ ΕΙΔΙΚΗ ΥΠΗΡΕΣΙΑ ΔΙΑΧΕΙΡΙΣΗΣ ΕΠΙΧΕΙΡΗΣΙΑΚΟΥ ΠΡΟΓΡΑΜΜΑΤΟΣ ΕΚΠΑΙΔΕΥΣΗ ΚΑΙ ΔΙΑ ΒΙΟΥ ΜΑΘΗΣΗ ΕΠΙΧΕΙΡΗΣΙΑΚΟ ΠΡΟΓΡΑΜΜΑ «ΕΚΠΑΙΔΕΥΣΗ ΚΑΙ ΔΙΑ ΒΙΟΥ ΜΑΙΘΗΣΗ» «ΑΡΧΙΜΗΔΗΣ ΙΙΙ ΕΝΙΣΧΥΣΗ ΕΡΕΥΝΗΤΙΚΩΝ ΟΜΑΔΩΝ ΣΤΟ ΑΛΕΞΑΝΔΡΕΙΟ ΤΕΙ ΘΕΣΣΑΛΟΝΙΚΗΣ» ΕΡΓΟ: Συγκριτική Μελέτη Λογισμικού Βιβλιοθηκών, Λογισμικού Εφαρμογών Ανοικτού Κώδικα και Βιομηχανικού Λογισμικού MIS: 383572 Παραδοτέο 3.1: Έκθεση με στατιστική ανάλυση δεδομένων από την εμπειρική μελέτη

ΕΡΓΟ ΠΑΡΑΔΟΤΕΟ ΕΚΔΟΣΗ & ΗΜΕΡΟΜΗΝΙΑ ΣΥΓΓΡΑΦΕΙΣ ΠΕΡΙΛΗΨΗ MIS: 383572: Συγκριτική Μελέτη Λογισμικού Βιβλιοθηκών, Λογισμικού Εφαρμογών Ανοικτού Κώδικα και Βιομηχανικού Λογισμικού Παραδοτέο 3.1: Έκθεση με στατιστική ανάλυση δεδομένων από την εμπειρική μελέτη 1.0 24/11/2015 2.0 28/11/2015 Πανεπιστήμιο Μακεδονίας - ΠΑΜΑΚ: Θεόδωρος Χαϊκάλης Αλέξανδρος Χατζηγεωργίου Σκοπός του συγκεκριμένου εγγράφου είναι η παρουσίαση δεδομένων μετρήσεων από βιβλιοθήκες και εφαρμογές λογισμικού ανοικτού κώδικα καθώς και η στατιστική ανάλυση των δεδομένων. 2

Περιεχόμενα Εισαγωγή... 4 Scribe-Java Μετρικές Πηγαίου Κώδικα... 4 Scribe-Java Προβλήματα Σχεδίασης... 5 Scribe-Java Στατιστική παρουσίαση και ανάλυση τάσεων επιλεγμένων μετρικών... 7 RxJava Μετρικές Πηγαίου Κώδικα... 9 RxJava Προβλήματα Σχεδίασης... 14 RxJava Στατιστική παρουσίαση και ανάλυση τάσεων επιλεγμένων μετρικών... 19 RxNetty Μετρικές Πηγαίου Κώδικα... 20 RxNetty Προβλήματα Σχεδίασης... 22 RxNetty Στατιστική παρουσίαση και ανάλυση τάσεων επιλεγμένων μετρικών... 24 MySql-Connector Μετρικές Πηγαίου Κώδικα... 25 MySql-Connector Προβλήματα Σχεδίασης... 27 MySql-Connector Στατιστική παρουσίαση και ανάλυση τάσεων επιλεγμένων μετρικών... 29 MessagePack Μετρικές Πηγαίου Κώδικα... 30 MessagePack Προβλήματα Σχεδίασης... 32 MessagePack Στατιστική παρουσίαση και ανάλυση τάσεων επιλεγμένων μετρικών... 34 JSoup Source Code Metris... 35 JSoup Προβλήματα Σχεδίασης... 36 JSoup Στατιστική παρουσίαση και ανάλυση τάσεων επιλεγμένων μετρικών... 37 3

Εισαγωγή Η παρούσα τεχνικά αναφορά έχει σκοπό να παρουσιάσει ενδεικτικά αποτελέσματα από την εκτέλεση του υλοποιημένου εργαλείου υπολογισμού μετρικών και εντοπισμού σφαλμάτων σε βιβλιοθήκες και λογισμικό ανοικτού κώδικα. Παρακάτω ακολουθούν οι τιμές των μετρικών που εξήχθησαν καθώς και το πλήθος προβλημάτων σχεδίασης ανά γενιά όπως αυτά παρήχθησαν από το εργαλείο. Οι τιμές παρατίθενται σε πίνακες για 6 αναλυθέντα έργα. Μετά την κάθε παραβολή τιμών ακολουθούν διαγράμματα με στατιστική ανάλυση επιλεγμένων χαρακτηριστικών μετρικών. Scribe-Java Μετρικές Πηγαίου Κώδικα Version Lines of Code Fields Coupling Between Objects Lack Cohesion Weighted Method Complexity Weight Tight Cohesion Public Attributes 1.0.1 1084 128 71 1.605 0.128 3.895 0.643 0.174 15 1.0.2 1084 128 71 1.605 0.128 3.895 0.643 0.174 15 1.0.3 1082 125 72 1.605 0.128 3.868 0.59 0.19 15 1.0.4 1098 127 73 1.59 0.124 3.821 0.601 0.185 15 1.0.5 1098 127 73 1.59 0.124 3.821 0.601 0.185 15 1.0.6 1116 131 77 1.632 0.129 4.053 0.689 0.188 16 1.0.7 1145 135 77 1.6 0.123 3.95 0.705 0.179 16 1.0.8 1250 137 79 1.55 0.122 4.025 0.707 0.178 16 1.0.9 1264 139 80 1.55 0.122 4.075 0.707 0.178 16 1.1.0 1431 156 87 1.795 0.121 4.136 0.586 0.163 17 1.1.1 1558 166 93 1.844 0.113 4.4 0.597 0.146 21 1.1.2 1558 166 93 1.844 0.113 4.4 0.597 0.146 21 1.1.3 1722 184 103 1.9 0.113 4.44 0.648 0.15 21 1.2.0 1784 183 106 1.904 0.104 4.288 0.653 0.145 21 1.2.1 1930 201 121 1.946 0.097 4.339 0.643 0.135 21 1.3.0 2250 234 145 2 0.085 4.303 0.653 0.138 22 1.3.1 2644 280 175 2.085 0.069 4.061 0.684 0.14 22

Version Lines of Code Fields Coupling Between Objects Lack Cohesion Weighted Method Complexity Weight Tight Cohesion Public Attributes 1.3.2 2751 290 179 2.119 0.066 4.155 0.687 0.141 22 1.3.3 3026 312 186 2.156 0.065 4.122 0.695 0.126 22 1.3.4 3099 319 193 2.187 0.081 4.176 0.699 0.133 23 1.3.5 3217 334 199 2.179 0.078 4.179 0.689 0.134 23 1.3.6 3128 334 201 2.204 0.081 4.333 0.689 0.137 24 1.3.7 3159 334 199 2.181 0.081 4.287 0.674 0.13 24 scribeja va-2.0 3718 434 227 2.667 0.08 4.607 0.763 0.14 3 Scribe-Java Προβλήματα Σχεδίασης Version God Data 1.0.1 0 1 1.0.2 0 1 1.0.3 0 1 1.0.4 0 1 1.0.5 0 1 1.0.6 0 1 1.0.7 0 1 1.0.8 0 1 1.0.9 0 1 1.1.0 0 2 1.1.1 0 2 1.1.2 0 2 1.1.3 0 2 1.2.0 1 2 1.2.1 1 2 5

1.3.0 1 2 1.3.1 1 2 1.3.2 1 2 1.3.3 1 2 1.3.4 1 2 1.3.5 1 2 1.3.6 1 2 1.3.7 1 2 scribejava- 2.0 1 2 6

Scribe-Java Στατιστική παρουσίαση και ανάλυση τάσεων επιλεγμένων μετρικών Weighted Method Complexity Tight Cohesion 4.7 4.5 4.3 y = 0.022x + 3.876 R² = 0.5283 0.2 0.19 0.18 0.17 y = -0.0028x + 0.1901 R² = 0.8058 4.1 0.16 3.9 3.7 0.15 0.14 0.13 3.5 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 0.12 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 Weighted Method Complexity Linear (Weighted Method Complexity) Tight Cohesion Linear (Tight Cohesion) Lines of Code Coupling Between Objects 4000 3500 3000 2500 2000 1500 1000 500 0 y = 119.28x + 475.47 R² = 0.9125 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 2.8 2.6 2.4 2.2 2 1.8 1.6 1.4 1.2 1 y = 0.0384x + 1.4089 R² = 0.8683 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 Lines of Code Linear (Lines of Code) Coupling Between Objects Linear (Coupling Between Objects) Μελετώντας τα διαγράμματα του έργου Scribe-Java και ξεκινώντας από την εξέλιξη των γραμμών κώδικα, παρατηρούμε ότι είναι ένα ενεργό έργο υπό σταθερή ανάπτυξη στο οποίο προστίθενται συνεχώς νέες γραμμές κώδικα και πιθανότατα μπορούμε να 7

συμπεράνουμε πως προστίθεται και νέα λειτουργικότητα. Ωστόσο η ανάπτυξη αυτή βλέπουμε πως έχει αντίκτυπο στην ποιότητα του λογισμικού καθώς ταυτόχρονα με τις γραμμές κώδικα, αυξάνεται η μέση πολυπλοκότητα ενώ μειώνεται η συνεκτικότητα της κάθε κλάσης. Αύξηση πολυπλοκότητας (Weighted Method Complexity) σημαίνει πως οι μέθοδοι των κλάσεων γίνονται όλο και πιο περίπλοκες ως προς τους κόμβους αποφάσεων που περιέχουν. Δηλαδή ο κώδικας γίνεται δυσκολότερα κατανοητός από τον προγραμματιστή, καθώς όσο αυξάνονται τα πιθανά μονοπάτια εκτέλεσης μιας μεθόδου, τόσο πιο δύσκολο είναι γι' αυτόν να εκτελέσει νοητά τον κώδικα και να προβλέψει το αποτέλεσμα της εκτέλεσης. Αυτό οδηγεί με μεγάλη πιθανότητα σε αύξηση σφαλμάτων. Από την άλλη, η μείωση συνεκτικότητας συνεπάγεται αλλοίωση του αρχικού σχεδιασμού των κλάσεων και παρείσφρηση "ξένης" λειτουργικότητας σε κλάσεις. Με απλά λόγια ενώ μια κλάση αρχικά είχε σχεδιαστεί να φέρνει σε πέρας μια γενική λειτουργία Α, με το πέρασμα των γενεών στην κλάση αυτή προτέθηκε κώδικας και δεδομένα τα οποία αφορούσαν και άλλες, άσχετες με την Α, λειτουργίες. Όμως σύμφωνα με τους κανόνες αντικειμενοστρεφούς σχεδίασης, μία κλάση θα πρέπει να έχει μόνο έναν λόγο να αλλάζει κατά τη διάρκεια της ζωής του έργου και η παραβίαση του κανόνα αυτού οδηγεί σε περισσότερους λόγους αλλαγής. Άρα η κλάση με μειωμένη συνεκτικότητα έχει λόγους να αλλάζει και να συντηρείται συχνότερα από τον προγραμματιστή, άρα αυξάνεται η πιθανότητα εισαγωγής λαθών. Τέλος, αύξηση παρατηρούμε και στο βαθμό σύζευξης (Coupling Between Objects). Μία κλάση Α λέμε ότι είναι συζευγμένη με μια άλλη κλάση Β, όταν η Α χρησιμοποιεί κάποια λειτουργία της Β. Αυτό είναι καλό γιατί αυξάνει την επαναχρησιμοποίηση αλλά ενέχει και κάποιους κινδύνους. Όταν μια κλάση έχει υψηλό βαθμό σύζευξης, σημαίνει πως εξαρτάται από πολλές άλλες κλάσεις του συστήματος καθώς χρησιμοποιεί λειτουργίες τους. Αν κάποια από όλες αυτές τις "δανεικές" λειτουργίες μεταβληθεί λόγω συντήρησης, και αλλάξει η διεπαφή της, τότε όλες οι κλάσεις που τη χρησιμοποιούν πρέπει να προσαρμοστούν αντίστοιχα καθώς διαφορετικά θα καταλήξουμε σε κώδικα που δεν μεταγλωττίζεται. Συνεπώς, αν μια κλάση εξαρτάται από υπερβολικό αριθμό τρίτων κλάσεων, αυξάνει η πιθανότητα "μετάδοσης" προβλημάτων σε αυτήν από κάποια από τις τρίτες κλάσεις που χρησιμοποιεί. Οι γραμμικές παλινδρομήσεις των ανωτέρω χρονοσειρών συνηγορούν στην ύπαρξη ξεκάθαρων τάσεων για όλες τις μετρικές που αναλύθηκαν στις προηγούμενες παραγράφους, άρα μπορούμε να καταλήξουμε στο συμπέρασμα πως το Scribe είναι μεν ένα ενεργό λογισμικό αλλά χρειάζεται πλήθος αλλαγών και αναδομήσεων για να ανακοπεί η επιδείνωση των χαρακτηριστικών του. Στα επόμενα έργα δε θα γίνει τόσο εκτενής ανάλυση των μετρικών, καθώς η περιγραφή τους έγινε εδώ. Θα αρκεστούμε στην ανάλυση των τάσεων των τιμών των μετρικών. 8

RxJava Μετρικές Πηγαίου Κώδικα Versi on rxjava -0.6.2 rxjava -0.6.3 rxjava -0.7.0 rxjava -0.8.0 rxjava -0.8.1 rxjava -0.8.2 rxjava -0.8.3 rxjava -0.8.4 rxjava -0.9.0 rxjava -0.9.1 rxjava -0.9.2 rxjava - 0.10. 0 rxjava - 0.10. 1 Lines of Code Fields Coupling Between Objects Lack Cohesion Weighted Method Complexity Weight Tight Cohesion Public Attributes 16990 355 122 3.452 0.361 7.144 0.463 0.059 1 6 17073 361 125 3.462 0.358 7.094 0.465 0.056 1 6 17947 414 147 3.57 0.34 6.711 0.493 0.091 1 6 20586 439 167 3.624 0.346 6.489 0.503 0.081 1 6 21049 459 164 3.667 0.347 6.585 0.507 0.079 1 6 22844 499 179 3.708 0.36 6.549 0.511 0.078 1 8 22844 498 177 3.708 0.36 6.535 0.509 0.079 1 8 22852 499 179 3.708 0.36 6.556 0.511 0.078 1 8 23232 512 182 3.77 0.37 6.554 0.523 0.08 1 8 25021 530 190 3.793 0.372 6.693 0.538 0.081 1 8 Accessor 35042 593 215 3.781 0.39 6.367 0.545 0.082 1 10 35718 597 217 3.789 0.391 6.368 0.551 0.081 1 10 35799 601 219 3.78 0.389 6.318 0.55 0.086 1 10 9

Versi on rxjava - 0.11. 0 rxjava - 0.11. 1 0.11. 2 0.11. 3 0.12. 0 0.12. 1 0.12. 2 0.13. 0 0.13. 1 0.13. 2 0.13. 4 0.13. 5 0.14. 0 0.14. 1 Lines of Code Fields Coupling Between Objects Lack Cohesion Weighted Method Complexity Weight Tight Cohesion Public Attributes Accessor 32519 486 221 3.757 0.401 4.283 0.557 0.088 1 10 32519 486 221 3.757 0.401 4.283 0.557 0.088 1 10 32517 491 221 3.759 0.398 4.287 0.559 0.088 1 10 32517 491 221 3.759 0.398 4.287 0.559 0.088 1 10 29724 518 223 3.55 0.402 4.2 0.561 0.09 1 10 29715 518 223 3.55 0.402 4.2 0.561 0.09 1 10 29756 524 223 3.55 0.402 4.233 0.561 0.09 1 10 32717 621 247 3.572 0.404 4.495 0.557 0.098 1 10 33388 632 252 3.578 0.404 4.462 0.558 0.095 1 10 34473 641 255 3.585 0.402 4.495 0.56 0.1 1 10 34869 656 264 3.603 0.403 4.52 0.562 0.107 1 10 34869 656 264 3.603 0.403 4.52 0.562 0.107 1 10 35952 698 283 3.6 0.406 4.609 0.561 0.108 1 12 35952 698 283 3.6 0.406 4.609 0.561 0.108 1 12 10

Versi on 0.14. 2 0.14. 3 0.14. 4 0.14. 5 0.14. 6 0.14. 7 0.14. 8 0.14. 9 0.14. 10 0.14. 11 0.15. 0 0.15. 1 0.16. 0 0.17. 0-RC1 0.17. 0-RC2 0.17. 0-RC3 Lines of Code Fields Coupling Between Objects Lack Cohesion Weighted Method Complexity Weight Tight Cohesion Public Attributes Accessor 36416 706 287 3.596 0.405 4.592 0.558 0.106 1 12 37169 733 298 3.558 0.412 4.603 0.563 0.103 1 12 37372 735 298 3.58 0.413 4.625 0.563 0.102 1 12 37372 735 298 3.58 0.413 4.625 0.563 0.102 1 12 38142 741 310 3.604 0.412 4.674 0.563 0.103 1 12 39804 766 323 3.583 0.411 4.689 0.573 0.106 1 14 22883 782 328 3.574 0.412 4.738 0.568 0.109 1 14 22962 785 329 3.576 0.41 4.744 0.566 0.108 1 14 23635 819 332 3.595 0.407 4.888 0.56 0.107 1 14 23799 822 334 3.601 0.406 4.893 0.559 0.107 1 14 23840 827 327 3.616 0.399 4.934 0.55 0.113 1 14 26977 919 387 3.723 0.415 4.893 0.564 0.11 1 24 44436 1333 561 3.972 0.454 5.174 0.594 0.103 0 29 51058 1482 622 3.82 0.462 5.622 0.603 0.099 2 48 52985 1570 647 3.66 0.431 5.386 0.568 0.096 2 53 53075 1581 651 3.66 0.43 5.396 0.567 0.095 2 53 11

Versi on 0.17. 0-RC4 0.17. 0-RC5 0.17. 0-RC6 0.17. 0-RC7 0.17. 1 0.17. 2 0.17. 3 0.17. 4 0.17. 5 0.17. 6 0.18. 0 0.18. 1 0.18. 2 0.18. 3 0.19. 0 0.19. 1 Lines of Code Fields Coupling Between Objects Lack Cohesion Weighted Method Complexity Weight Tight Cohesion Public Attributes Accessor 53185 1581 651 3.657 0.43 5.405 0.567 0.095 2 53 53400 1585 659 3.67 0.432 5.418 0.567 0.095 2 56 53400 1585 659 3.67 0.432 5.418 0.567 0.095 2 56 55371 1647 664 3.634 0.434 5.51 0.569 0.093 2 56 56727 1686 682 3.573 0.432 5.503 0.571 0.096 2 56 59003 1726 698 3.609 0.435 5.444 0.579 0.099 6 57 59662 1736 711 3.578 0.429 5.436 0.579 0.103 12 57 61015 1789 724 3.568 0.433 5.509 0.589 0.106 12 57 61259 1786 721 3.617 0.432 5.508 0.59 0.106 12 57 61538 1799 729 3.607 0.431 5.496 0.591 0.106 13 59 57078 1623 696 3.587 0.448 5.474 0.624 0.113 13 60 55903 1616 709 3.525 0.467 5.626 0.648 0.11 13 59 46459 1583 704 3.281 0.505 6.143 0.725 0.11 13 56 46250 1578 700 3.272 0.503 6.119 0.726 0.108 13 56 51447 1700 864 3.373 0.5 5.982 0.747 0.123 35 67 52925 1778 973 3.509 0.517 5.943 0.741 0.119 36 104 12

Versi on 0.19. 2 0.19. 4 0.20. 0-RC1 0.20. 0-RC2 0.20. 0-RC3 0.20. 0-RC4 0.20. 0-RC5 0.20. 0-RC6 v1.0.0 -rc.1 v1.0.0 -rc.2 v1.0.0 -rc.3 v1.0.0 -rc.4 v1.0.0 -rc.5 v1.0.0 -rc.6 v1.0.0 -rc.7 v1.0.0 -rc.8 Lines of Code Fields Coupling Between Objects Lack Cohesion Weighted Method Complexity Weight Tight Cohesion Public Attributes Accessor 53749 1798 1047 3.443 0.519 5.884 0.729 0.1 47 118 58567 1965 1343 3.269 0.511 5.966 0.699 0.098 50 131 62037 2032 1392 3.266 0.509 6.227 0.713 0.103 59 134 60071 2005 1377 3.213 0.512 6.229 0.709 0.101 59 134 60070 1989 1303 3.235 0.512 6.305 0.723 0.101 59 132 61298 2005 1320 3.238 0.513 6.341 0.728 0.101 59 132 63025 2013 1331 3.212 0.509 6.432 0.724 0.099 59 132 63513 2028 1329 3.207 0.509 6.439 0.725 0.098 59 132 49906 1381 1014 3.058 0.505 6.689 0.755 0.104 61 66 49844 1376 1011 3.053 0.505 6.724 0.756 0.102 61 66 49909 1376 1011 3.056 0.505 6.772 0.756 0.102 61 66 49453 1361 1003 3.054 0.499 6.839 0.753 0.102 61 65 49567 1360 1002 3.027 0.497 6.943 0.756 0.103 61 65 49289 1348 944 3.055 0.497 7.06 0.765 0.103 61 60 49129 1341 939 3.069 0.498 7.014 0.756 0.102 61 60 49978 1358 954 3.106 0.505 7.106 0.76 0.105 61 63 13

Versi on Lines of Code Fields Coupling Between Objects Lack Cohesion Weighted Method Complexity Weight Tight Cohesion Public Attributes Accessor v1.0.0 -rc.9 49897 1357 956 3.106 0.502 7.106 0.758 0.105 61 63 v1.0.1 50139 1360 961 3.114 0.501 7.125 0.757 0.107 61 63 v1.0.2 52577 1401 977 3.063 0.49 7.203 0.747 0.108 70 63 v1.0.3 55299 1442 994 3.073 0.498 7.379 0.753 0.107 70 69 v1.0.4 55409 1442 999 3.075 0.498 7.397 0.753 0.107 70 69 v1.0.5 61930 1567 1068 2.998 0.48 7.673 0.717 0.101 95 71 v1.0.6 61900 1571 1071 2.981 0.48 7.634 0.717 0.101 95 71 v1.0.7 62149 1579 1075 2.981 0.481 7.671 0.72 0.104 95 71 v1.0.8 62936 1592 1090 3.005 0.488 7.701 0.724 0.108 95 71 v1.0.9 63139 1598 1097 3.005 0.489 7.711 0.727 0.108 95 71 v1.0.1 0 v1.0.1 1 v1.0.1 2 v1.0.1 3 v1.0.1 4 v1.0.1 5 v1.0.1 6 69848 1647 1134 2.963 0.476 7.798 0.713 0.108 96 70 69719 1648 1129 2.959 0.475 7.813 0.712 0.107 96 70 71196 1712 1226 2.931 0.48 8.093 0.72 0.108 96 76 75914 1808 1244 2.98 0.48 8.321 0.72 0.108 97 76 83830 1900 1309 2.994 0.491 8.682 0.74 0.111 99 81 91163 2106 1410 3.058 0.498 9.04 0.744 0.12 105 85 91626 2176 1389 2.988 0.497 9.125 0.761 0.121 91 84 RxJava Προβλήματα Σχεδίασης Version God Data rxjava-0.6.2 0 0 14

Version God Data rxjava-0.6.3 0 0 rxjava-0.7.0 0 0 rxjava-0.8.0 0 0 rxjava-0.8.1 0 0 rxjava-0.8.2 0 0 rxjava-0.8.3 0 0 rxjava-0.8.4 0 0 rxjava-0.9.0 0 0 rxjava-0.9.1 0 0 rxjava-0.9.2 0 0 rxjava-0.10.0 0 0 rxjava-0.10.1 0 0 rxjava-0.11.0 0 0 rxjava-0.11.1 0 0 0.11.2 0 0 0.11.3 0 0 0.12.0 0 0 0.12.1 0 0 0.12.2 0 0 0.13.0 1 0 0.13.1 1 0 0.13.2 1 0 0.13.4 1 0 0.13.5 1 0 0.14.0 1 0 0.14.1 1 0 0.14.2 1 0 0.14.3 1 0 0.14.4 1 0 0.14.5 1 0 15

Version God Data 0.14.6 1 0 0.14.7 1 0 0.14.8 1 0 0.14.9 1 0 0.14.10 1 0 0.14.11 2 0 0.15.0 2 0 0.15.1 2 1 0.16.0 6 1 0.17.0-RC1 6 3 0.17.0-RC2 6 3 0.17.0-RC3 6 3 0.17.0-RC4 6 3 0.17.0-RC5 6 3 0.17.0-RC6 6 3 0.17.0-RC7 7 3 0.17.1 7 3 0.17.2 7 3 0.17.3 8 3 0.17.4 8 3 0.17.5 8 3 0.17.6 8 3 0.18.0 6 2 0.18.1 6 2 0.18.2 10 3 0.18.3 10 3 0.19.0 12 5 0.19.1 19 4 0.19.2 20 4 0.19.4 21 3 16

Version God Data 0.20.0-RC1 24 4 0.20.0-RC2 24 4 0.20.0-RC3 24 5 0.20.0-RC4 24 5 0.20.0-RC5 24 5 0.20.0-RC6 24 5 v1.0.0-rc.1 19 4 v1.0.0-rc.2 19 4 v1.0.0-rc.3 19 4 v1.0.0-rc.4 20 4 v1.0.0-rc.5 21 4 v1.0.0-rc.6 21 4 v1.0.0-rc.7 21 4 v1.0.0-rc.8 22 4 v1.0.0-rc.9 22 4 v1.0.1 22 4 v1.0.2 23 4 v1.0.3 24 3 v1.0.4 25 3 v1.0.5 29 7 v1.0.6 29 7 v1.0.7 29 7 v1.0.8 29 7 v1.0.9 28 7 v1.0.10 26 7 v1.0.11 26 7 v1.0.12 26 7 v1.0.13 24 7 v1.0.14 26 7 v1.0.15 27 7 17

Version God Data v1.0.16 26 6 30 25 RxJava of smells 20 15 10 5 God Data 0 Versions Figure 1 - Smell Evolution of RxJava 18

RxJava Στατιστική παρουσίαση και ανάλυση τάσεων επιλεγμένων μετρικών Weighted Method Complexity Tight Cohesion 10.235 9.235 8.235 7.235 6.235 5.235 4.235 3.235 y = 0.0294x + 4.6566 R² = 0.4077 1 4 7 10131619222528313437404346495255586164677073767982858891 0.13 0.12 0.11 0.1 0.09 0.08 0.07 0.06 0.05 0.04 y = 0.0003x + 0.0855 R² = 0.4767 1 4 7 10 13 16 19 22 25 28 31 34 37 40 43 46 49 52 55 58 61 64 67 70 73 76 79 82 85 88 91 Weighted Method Complexity Linear (Weighted Method Complexity) Tight Cohesion Linear (Tight Cohesion) Lines of Code Coupling Between Objects 90000 80000 70000 60000 50000 40000 30000 20000 10000 0 y = 549.45x + 20571 R² = 0.7574 1 4 7 10131619222528313437404346495255586164677073767982858891 4.1 3.9 3.7 3.5 3.3 3.1 2.9 2.7 2.5 y = -0.0091x + 3.8545 R² = 0.74 1 4 7 10 13 16 19 22 25 28 31 34 37 40 43 46 49 52 55 58 61 64 67 70 73 76 79 82 85 88 91 Lines of Code Linear (Lines of Code) Coupling Between Objects Linear (Coupling Between Objects) Μελετώντας την εξέλιξη των γραμμών κώδικα του RxJava, παρατηρούμε πως υπάρχει μια σαφής αυξητική τάση, η οποία σε ορισμένα χρονικά σημεία διακόπτεται από σύντομες περιόδους μείωσης. Η μέση πολυπλοκότητα, μετά από την πρώτη περίοδο σταθερότητας την οποία ακολούθησε μια απότομη μείωση γύρω στη 13 η γενιά, αυξάνεται σταθερά. Θετική εντύπωση προκαλεί η σχετικά σταθερή 19

πορεία της συνεκτικότητας η οποία θα μπορούσαμε να πούμε πως έχει και κάποια σημάδια αύξησης. Στο ίδιο θετικό πλαίσιο κινείται και η σύζευξη καθώς φαίνεται να βαίνει μειούμενη γενιά με τη γενιά. RxNetty Μετρικές Πηγαίου Κώδικα Method s Numbe r Fields Couplin g Betwee n Objects Lack Cohesio n Weighted Method Complexit y Tight Cohesio n Public Attribute s Version Lines of Code Weight Accessor 0.1 2700 123 77 1.647 0.492 5.324 0.606 0.098 13 19 0.1.1 2700 123 77 1.647 0.492 5.324 0.606 0.098 13 19 0.2.0 2797 126 79 1.629 0.478 5.6 0.675 0.095 14 19 0.2.1 2948 135 81 1.649 0.464 5.703 0.68 0.09 14 19 0.2.2 2731 128 91 1.627 0.273 3.356 0.438 0.117 28 13 0.2.3 2746 130 91 1.627 0.273 3.407 0.449 0.12 28 13 0.2.4 2763 131 92 1.644 0.273 3.441 0.449 0.137 28 13 0.2.5 4300 451 131 1.955 0.301 6.284 0.526 0.145 28 28 0.2.6 4383 458 140 1.944 0.307 6.267 0.528 0.154 28 29 0.2.7 4359 458 140 1.856 0.307 6.267 0.528 0.154 28 29 0.2.8 4334 457 140 1.876 0.311 6.337 0.534 0.156 28 29 0.2.9 4824 473 150 1.887 0.316 6.072 0.525 0.142 28 30 0.3.0 5958 555 188 2.033 0.28 6.577 0.52 0.13 28 50 0.3.1 7767 661 263 2.072 0.281 7.281 0.548 0.16 32 78 0.3.2 7767 661 263 2.072 0.281 7.281 0.548 0.16 32 78 0.3.3 8613 738 297 2.201 0.269 6.956 0.547 0.156 32 82 0.3.4 11587 1044 399 2.619 0.293 7.163 0.572 0.146 44 110 0.3.5 11643 1046 400 2.619 0.293 7.195 0.572 0.146 44 110 0.3.6 13617 1137 467 2.73 0.308 7.322 0.634 0.203 44 117 0.3.7 18202 1554 669 2.986 0.293 7.729 0.756 0.205 113 152 0.3.8 16775 1483 650 3.008 0.294 7.89 0.767 0.208 116 150 0.3.9 16769 1483 650 3.008 0.294 7.89 0.765 0.201 116 154 20

0.3.10 17054 1502 666 3.019 0.29 7.828 0.751 0.208 118 160 0.3.11 17050 1502 666 3.019 0.29 7.828 0.751 0.208 118 160 0.3.12 19536 1614 756 3.053 0.309 7.455 0.781 0.199 128 164 0.3.13 19964 1626 761 3.063 0.311 7.455 0.772 0.201 128 166 0.3.14 20575 1648 781 3.032 0.307 7.369 0.753 0.197 133 167 0.3.15 20733 1665 789 3.029 0.309 7.432 0.759 0.197 137 168 0.3.16 20973 1687 799 3.035 0.313 7.552 0.766 0.194 137 168 0.3.17 21604 1727 837 2.997 0.311 7.706 0.756 0.191 146 172 0.3.18 21601 1727 837 3.003 0.312 7.73 0.759 0.191 146 170 v0.4.0 21621 1728 837 3.003 0.312 7.733 0.759 0.191 146 170 v0.4.1 21621 1728 837 3.003 0.312 7.733 0.759 0.191 146 170 v0.4.2 21667 1730 839 3.003 0.312 7.745 0.758 0.191 146 172 v0.4.3 21667 1730 839 3.003 0.312 7.745 0.758 0.191 146 172 v0.4.4 21667 1730 839 3.003 0.312 7.745 0.758 0.191 146 172 v0.4.5- rc.1 20795 1720 829 3.003 0.31 7.777 0.752 0.19 146 172 v0.4.5- rc.2 22355 1908 904 3.024 0.314 7.997 0.744 0.182 148 186 v0.4.6 22632 1911 905 3.015 0.313 8.003 0.746 0.18 148 186 v0.4.7 22664 1913 906 3.015 0.313 8.012 0.745 0.18 148 187 v0.4.8 22674 1914 906 3.015 0.313 8.015 0.745 0.18 148 187 v0.4.9 22890 1925 915 3.012 0.311 8.06 0.747 0.181 148 187 v0.4.10 22903 1925 915 3.012 0.311 8.083 0.747 0.181 148 187 v0.4.11 22949 1927 916 2.997 0.31 8.044 0.744 0.18 149 187 v0.4.12 23046 1938 917 2.997 0.31 8.092 0.745 0.18 149 188 v0.4.13 23060 1938 917 2.997 0.31 8.101 0.745 0.18 149 188 21

RxNetty Προβλήματα Σχεδίασης Version God Data 0.1 0 1 0.1.1 0 1 0.2.0 0 1 0.2.1 0 1 0.2.2 0 5 0.2.3 0 5 0.2.4 0 5 0.2.5 0 4 0.2.6 0 4 0.2.7 1 4 0.2.8 1 4 0.2.9 1 5 0.3.0 1 8 0.3.1 4 14 0.3.2 4 14 0.3.3 4 11 0.3.4 6 11 0.3.5 6 11 0.3.6 6 13 0.3.7 6 19 0.3.8 4 19 0.3.9 4 19 0.3.10 4 19 0.3.11 4 19 0.3.12 6 20 0.3.13 6 20 0.3.14 6 21 0.3.15 6 21 22

of smells Παραδοτέο 3.1: Έκθεση με στατιστική ανάλυση δεδομένων από την εμπειρική μελέτη 0.3.16 6 21 0.3.17 6 22 0.3.18 6 22 v0.4.0 6 22 v0.4.1 6 22 v0.4.2 6 22 v0.4.3 6 22 v0.4.4 6 22 v0.4.5-rc.1 6 22 v0.4.5-rc.2 6 22 v0.4.6 6 22 v0.4.7 6 22 v0.4.8 6 22 v0.4.9 6 22 v0.4.10 6 22 v0.4.11 6 22 v0.4.12 6 22 v0.4.13 6 22 23 RxNetty 18 13 God Data 8 3-2 Versions Figure 2 Smell Evolution of RxNetty 23

RxNetty Στατιστική παρουσίαση και ανάλυση τάσεων επιλεγμένων μετρικών Ticht Cohesion Weighted Method Complexity 0.3 9 0.25 8 0.2 0.15 7 6 5 y = 0.074x + 5.3031 R² = 0.6322 0.1 0.05 y = 0.0049x + 0.0899 R² = 0.8056 y = -0.0011x + 0.2293 R² = 0.8935 1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 4 3 1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 TCC1 TCC2 Linear (TCC2) Linear (TCC1) Weighted Method Complexity Linear (Weighted Method Complexity) Lines Code Coupling Between Objects 30000 3.5 25000 3 20000 15000 10000 y = 568.04x + 1294.1 R² = 0.8989 2.5 2 y = 0.0371x + 1.7093 R² = 0.765 5000 1.5 0 1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 1 1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 Lines of Code Linear (Lines of Code) Coupling Between Objects Linear (Coupling Between Objects) Η χρονική ανάλυση του έργου RxNetty κρίθηκε σκόπιμο να χωριστεί σε δύο περιόδους. Μία πρώτη περίοδο ως την 21 η γενιά, και τη δεύτερη περίοδο από την 22 η γενιά έως σήμερα. Οδηγός σε αυτήν την απόφαση ήταν το διάγραμμα συνεκτικότητας που φαίνεται στην πάνω αριστερή 24

γωνία. Ο διαχωρισμός του σε 2 περιόδους είχε ως αποτέλεσμα οι 2 χωριστές γραμμές παλινδρόμησης να έχουν πολύ καλύτερη προσαρμογή η κάθε μία χωριστά, από ότι είχε μια ευθεία μόνη της (R 2 = 0.52). Φαίνεται λοιπόν πως στην πρώτη περίοδο η συνεκτικότητα αυξάνεται με σταθερή τάση έως ότου κορυφωθεί και έπειτα στη δεύτερη περίοδο σταθεροποιείται με μία πολύ ελαφρά τάση μείωσης. Οι γραμμές κώδικα αυξάνονται και αυτές με σταθερό ρυθμό ως την 21 η γενιά και έπειτα ο ρυθμός αύξησης σταθεροποιείται. Το ίδιο ισχύει και για την πολυπλοκότητα και την συνεκτικότητα. MySql-Connector Μετρικές Πηγαίου Κώδικα Version Lines of Code Fields Coupling Between Objects Lack Cohesion Weighted Method Complexity Weight Tight Cohesion Public Attributes Accessor 5.1.0 101060 2695 1370 1.892 0.247 62.88 0.892 0.203 381 201 5.1.1 113941 3382 1458 2.138 0.257 63.524 0.764 0.201 394 211 5.1.2 114093 3382 1458 2.138 0.257 63.561 0.764 0.201 394 211 5.1.3 116166 3425 1473 2.162 0.255 63.953 0.751 0.199 394 214 5.1.4 115651 3894 1493 2.169 0.256 65.497 0.744 0.2 394 214 5.1.5 115916 3894 1493 2.164 0.256 65.533 0.744 0.2 394 214 5.1.6 118382 4364 1514 2.151 0.249 66.749 0.753 0.216 394 219 5.1.7 120084 4440 1536 2.15 0.248 67.475 0.744 0.215 395 224 5.1.8 132754 4479 1575 2.296 0.242 67.562 0.732 0.228 395 229 5.1.9 132814 4489 1576 2.305 0.244 67.591 0.729 0.228 396 230 5.1.10 132826 4489 1576 2.305 0.244 67.591 0.729 0.228 396 230 5.1.11 133647 4533 1581 2.353 0.242 66.981 0.731 0.236 396 232 5.1.12 133682 4533 1581 2.353 0.242 66.995 0.731 0.236 396 232 5.1.13 137597 5304 1621 2.461 0.25 67.361 0.76 0.235 396 245 5.1.14 138763 5340 1633 2.491 0.252 68.232 0.756 0.226 399 248 5.1.15 139585 5378 2043 2.48 0.251 68.213 0.757 0.229 806 248 5.1.16 139676 5378 2034 2.482 0.253 67.874 0.755 0.227 806 249 5.1.17 139783 5387 2033 2.482 0.253 68.14 0.753 0.227 818 250 5.1.18 140255 5388 2036 2.482 0.253 68.171 0.753 0.227 819 250 5.1.19 141351 5454 2115 2.513 0.254 67.553 0.757 0.225 828 250 25

Version Lines of Code Fields Coupling Between Objects Lack Cohesion Weighted Method Complexity Weight Tight Cohesion Public Attributes Accessor 5.1.20 141499 5455 2116 2.522 0.254 67.544 0.756 0.225 828 250 5.1.21 147255 5519 2157 2.6 0.252 65.502 0.75 0.217 828 220 5.1.22 148373 5521 2160 2.6 0.252 66 0.75 0.217 829 220 5.1.23 149317 5554 2326 2.591 0.25 66.27 0.75 0.215 985 219 5.1.24 149749 5565 2329 2.588 0.249 66.076 0.747 0.214 985 214 5.1.25 149972 5576 2345 2.588 0.249 66.399 0.751 0.214 995 214 5.1.26 155353 5611 2351 2.619 0.249 66.385 0.763 0.213 995 214 5.1.27 167202 5696 2384 2.585 0.256 65.268 0.754 0.221 996 227 5.1.28 167064 5728 2394 2.593 0.257 65.504 0.755 0.22 996 228 5.1.29 167056 5738 2398 2.593 0.257 65.606 0.755 0.22 996 227 5.1.30 170568 6368 2530 2.551 0.25 58.551 0.706 0.223 1015 317 5.1.31 171773 6421 2625 2.546 0.249 58.264 0.633 0.223 1100 319 5.1.32 171579 6450 2673 2.559 0.249 59.339 0.634 0.224 1114 318 5.1.33 152001 6451 2675 2.559 0.249 59.227 0.634 0.224 1115 318 5.1.34 152113 6471 2677 2.554 0.248 59.007 0.636 0.223 1116 318 5.1.35 151802 6564 2693 2.572 0.248 58.689 0.715 0.22 1115 316 5.1.36 152069 6576 2696 2.575 0.25 58.799 0.702 0.222 1117 317 26

MySql-Connector Προβλήματα Σχεδίασης Version God Data 5.1.0 23 8 5.1.1 23 9 5.1.2 23 9 5.1.3 23 9 5.1.4 23 9 5.1.5 23 9 5.1.6 22 10 5.1.7 22 10 5.1.8 23 10 5.1.9 23 10 5.1.10 23 10 5.1.11 23 10 5.1.12 23 10 5.1.13 21 10 5.1.14 21 11 5.1.15 21 11 5.1.16 21 9 5.1.17 21 10 5.1.18 21 10 5.1.19 21 11 5.1.20 21 11 5.1.21 22 11 5.1.22 22 11 5.1.23 22 11 5.1.24 22 11 5.1.25 22 11 5.1.26 22 11 5.1.27 22 11 27

Version God Data 5.1.28 23 11 5.1.29 23 11 5.1.30 27 20 5.1.31 27 20 5.1.32 27 20 5.1.33 27 20 5.1.34 27 20 5.1.35 27 20 5.1.36 27 20 30 Mysql-Connector-Java 25 of smells 20 15 10 5 God Data 0 Versions Figure 3 Smell Evolution of MySql-Connector 28

MySql-Connector Στατιστική παρουσίαση και ανάλυση τάσεων επιλεγμένων μετρικών Weighted Method Complexity Tight Cohesion 70 0.24 68 0.235 0.23 66 0.225 0.22 64 0.215 62 60 y = -0.1621x + 68.048 R² = 0.284 0.21 0.205 0.2 0.195 y = 0.0003x + 0.213 R² = 0.1307 58 1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 0.19 1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 Weighted Method Complexity Linear (Weighted Method Complexity) Tight Cohesion Linear (Tight Cohesion) Lines of Code Coupling Between Objects 180000 2.9 170000 160000 2.7 150000 2.5 140000 130000 120000 110000 100000 y = 1547.8x + 111749 R² = 0.8399 2.3 2.1 1.9 y = 0.0154x + 2.1332 R² = 0.7809 90000 1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 1.7 1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 Lines of Code Linear (Lines of Code) Coupling Between Objects Linear (Coupling Between Objects) 29

Το έργο MySql-Connector είναι η βιβλιοθήκη την οποία χρησιμοποιούν οι εφαρμογές Java για να συνδεθούν με βάσεις δεμένων MySQL. Το έργο παρουσιάζει σταθερή τάση στην αύξηση του μεγέθους του όπως αυτό αποτυπώνεται στις γραμμές κώδικα. Η τάση αυτή φαίνεται να ανακόπτεται στις τελευταίες γενιές και συγκεκριμένα μετά την 33 η γενιά. Η πολυπλοκότητα μετά από μια αρχική αύξηση, στο μέσον της εξέλιξης πήρε αρνητική φορά και στις τελευταίες γενιές μειώθηκε έντονα. Η συνεκτικότητα βαίνει σχετικά αύξουσα, αν και με κάποια σκαμπανεβάσματα. Αύξουσα με ξεκάθαρη τάση βαίνει και η σύζευξη, αν και με πολύ ασθενή ρυθμό. MessagePack Μετρικές Πηγαίου Κώδικα Versio n msgpa ck- 0.6.0 msgpa ck- 0.6.1 msgpa ck- 0.6.2 msgpa ck- 0.6.3 msgpa ck- 0.6.4 msgpa ck- 0.6.5 msgpa ck- 0.6.6 Lines of Code Fields Coupling Between Objects Lack Cohesion Weighted Method Complexity Weight Tight Cohesion Public Attributes Accessor 11101 1112 241 3.748 0.185 15.266 1.051 0.268 21 36 11101 1112 241 3.748 0.185 15.266 1.051 0.268 21 36 11174 1119 242 3.755 0.187 15.36 1.059 0.267 21 37 11332 1144 246 3.723 0.187 15.447 1.033 0.267 21 39 11613 1155 246 3.723 0.187 15.553 1.033 0.267 21 39 11613 1155 246 3.723 0.187 15.553 1.033 0.267 21 39 11795 1164 246 3.723 0.187 15.823 1.155 0.266 21 39 30

Versio n msgpa ck- 0.6.7 msgpa ck- 0.6.8 0.7.0- M1 0.7.0- M2 0.7.0- M3 0.7.0- M4 0.7.0- p1 0.7.0- p2 0.7.0- p3 0.7.0- p4 0.7.0- p5 0.7.0- p6 0.7.0- p7 0.7.0- p8 0.7.0- p9 Lines of Code Fields Coupling Between Objects Lack Cohesion Weighted Method Complexity Weight Tight Cohesion Public Attributes Accessor 18666 1388 370 3.435 0.206 23.388 1.072 0.251 36 93 18911 1399 381 3.395 0.21 23.262 1.064 0.253 36 96 6869 774 188 3.551 0.19 17.218 0.533 0.214 41 48 6944 789 190 3.557 0.197 17.266 0.538 0.222 42 51 6956 791 190 3.557 0.197 17.405 0.538 0.219 42 51 6988 797 192 3.557 0.201 17.506 0.534 0.21 42 51 6996 797 192 3.557 0.201 17.57 0.534 0.21 42 51 9816 882 209 3.477 0.208 17.398 0.537 0.206 42 59 9808 884 209 3.477 0.209 17.477 0.533 0.206 42 59 10441 909 213 3.422 0.204 17.444 0.533 0.202 42 59 10501 909 216 3.422 0.204 17.478 0.533 0.202 42 59 10629 910 218 3.422 0.205 17.489 0.533 0.202 42 59 10222 912 217 3.422 0.205 17.522 0.533 0.202 42 59 10430 915 219 3.396 0.202 17.451 0.527 0.2 42 61 10434 915 219 3.396 0.202 17.462 0.527 0.2 42 61 31

Versio n Lines of Code Fields Coupling Between Objects Lack Cohesion Weighted Method Complexity Weight Tight Cohesion Public Attributes Accessor 0.7.1 25768 781 205 2.847 0.127 15.122 0.553 0.172 42 37 MessagePack Προβλήματα Σχεδίασης Version God Data msgpack-0.6.0 4 1 msgpack-0.6.1 4 1 msgpack-0.6.2 4 1 msgpack-0.6.3 4 1 msgpack-0.6.4 4 1 msgpack-0.6.5 4 1 msgpack-0.6.6 4 1 msgpack-0.6.7 7 5 msgpack-0.6.8 7 5 0.7.0-M1 2 2 0.7.0-M2 2 2 0.7.0-M3 2 2 0.7.0-M4 2 2 0.7.0-p1 2 2 0.7.0-p2 3 2 0.7.0-p3 3 2 0.7.0-p4 3 2 0.7.0-p5 3 2 0.7.0-p6 3 2 0.7.0-p7 3 2 0.7.0-p8 3 2 32

0.7.0-p9 3 2 0.7.1 3 2 of smells 10 8 6 4 2 0 Message Pack - Java God Versions Figure 4 Smell Evolution of MessagePack-Java 33

MessagePack Στατιστική παρουσίαση και ανάλυση τάσεων επιλεγμένων μετρικών Weighted Method Complexity Tight Cohesion 24 0.29 23 22 21 20 19 18 y = 0.0481x + 16.671 R² = 0.0231 0.27 0.25 0.23 0.21 17 16 15 0.19 0.17 y = -0.0043x + 0.2796 R² = 0.8873 14 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 0.15 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 Weighted Method Complexity Linear (Weighted Method Complexity) Tight Cohesion Linear (Tight Cohesion) Lines of Code Coupling Between Objects 30000 3.9 25000 3.7 20000 15000 10000 y = 55.674x + 10641 R² = 0.0074 3.5 3.3 3.1 2.9 y = -0.0238x + 3.8085 R² = 0.651 5000 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 2.7 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 Lines of Code Linear (Lines of Code) Coupling Between Objects Linear (Coupling Between Objects) 34

Το έργο MessagePack παρουσιάζει μια σχετική σταθερότητα στην εξέλιξη των γραμμών κώδικα και της πολυπλοκότητας, χωρίς να εμφανίζει έντονους ρυθμούς αλλαγών στις δύο αυτές μετρικές. Εξαίρεση αποτελεί η περίοδος μεταξύ 7 ης και 10 ης γενιάς, όπου βλέπουμε πως η απότομη αύξηση των γραμμών κώδικα αντικατοπτρίστηκε άμεσα στην πολυπλοκότητα. Αναλύοντας τη γραμμική συσχέτιση των δύο μεταβλητών της παραπάνω σχέσης, βρίσκουμε πως εμφανίζουν μεταξύ τους θετική συσχέτιση με συντελεστή 0.61. Σύζευξη και συνεκτικότητα βαίνουν μειούμενες και οι δύο παρουσιάζοντας ένα κάπως περίεργο φαινόμενο καθώς στο λογισμικό έχουμε συνηθίσει τις δύο αυτές μετρικές να εμφανίζουν αντίθετη μεταξύ τους συμπεριφορά. JSoup Source Code Metris Version jsoup- 1.6.2 jsoup- 1.6.3 jsoup- 1.7.1 jsoup- 1.7.2 jsoup- 1.7.3 jsoup- 1.8.1.a jsoup- 1.8.2 jsoup- 1.8.3 jsoup- 1.8.3a Lines of Code Fields Coupling Between Objects Lack Cohesion Weighted Method Complexity Weight Tight Cohesion Public Attributes Accessor 20858 836 175 3.3 0.199 15 1.642 0.256 0 74 18875 842 173 3.3 0.198 15.43 1.652 0.265 0 74 19085 855 178 3.284 0.194 15.578 1.645 0.258 0 79 29860 900 188 3.259 0.178 14.759 1.541 0.241 0 80 30169 916 204 3.325 0.18 15.06 1.305 0.242 1 84 30435 922 206 3.333 0.181 15.265 1.306 0.241 1 85 32247 969 238 3.336 0.185 16.303 1.485 0.248 2 88 32371 976 241 3.333 0.182 16.325 1.473 0.249 2 89 32371 976 241 3.333 0.182 16.325 1.473 0.249 2 89 35

JSoup Προβλήματα Σχεδίασης Version God Data jsoup-1.6.2 3 0 jsoup-1.6.3 3 0 jsoup-1.7.1 3 0 jsoup-1.7.2 4 0 jsoup-1.7.3 4 0 jsoup-1.8.1.a 4 0 jsoup-1.8.2 4 0 jsoup-1.8.3 4 0 jsoup-1.8.3a 4 0 36

JSoup Στατιστική παρουσίαση και ανάλυση τάσεων επιλεγμένων μετρικών Weighted Method Complexity Tight Cohesion 16.7 16.2 0.27 0.265 0.26 y = -0.0016x + 0.2579 R² = 0.2758 15.7 15.2 14.7 y = 0.1657x + 14.732 R² = 0.5432 0.255 0.25 0.245 0.24 14.2 1 2 3 4 5 6 7 8 9 0.235 1 2 3 4 5 6 7 8 9 Weighted Method Complexity Linear (Weighted Method Complexity) Tight Cohesion Linear (Tight Cohesion) Lines of Code Coupling Between Objects 40000 3.36 35000 3.34 30000 25000 y = 1890.7x + 17910 R² = 0.7648 3.32 3.3 3.28 y = 0.0068x + 3.2774 R² = 0.4689 20000 3.26 15000 1 2 3 4 5 6 7 8 9 3.24 1 2 3 4 5 6 7 8 9 Lines of Code Linear (Lines of Code) Coupling Between Objects Linear (Coupling Between Objects) Το σχετικά μικρό- έργο JSoup εμφανίζει μια κλασική συμπεριφορά με σταθερή αύξηση μεγέθους και πολυπλοκότητας, τα οποία συνοδεύονται από αύξηση της σύζευξης και πτώση της συνεκτικότητας. 37