Επίδραση των Προτύπων Σχεδίασης στην Ποιότητα Λογισμικού

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

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

Στόχοι της Πτυχιακής

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

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

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

ΗΥ562 Προχωρημένα Θέματα Βάσεων Δεδομένων Efficient Query Evaluation over Temporally Correlated Probabilistic Streams

Αρχιτεκτονική Λογισμικού

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

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

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

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

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

Μεθοδολογία Έρευνας Διάλεξη 1 η : Εισαγωγή στη Μεθοδολογία Έρευνας

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

Στρατηγική Αξιολόγησης κατά την Υλοποίηση Εκπαιδευτικού Λογισμικού

Στόχος της ψυχολογικής έρευνας:

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

Περιεχόμενο του μαθήματος

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

1 Συστήματα Αυτοματισμού Βιβλιοθηκών

ΚΕΦΑΛΑΙΟ 5. Κύκλος Ζωής Εφαρμογών ΕΝΟΤΗΤΑ 2. Εφαρμογές Πληροφορικής. Διδακτικές ενότητες 5.1 Πρόβλημα και υπολογιστής 5.2 Ανάπτυξη εφαρμογών

Μεθοδολογία Έρευνας Διάλεξη 6 η : Μέθοδοι Δειγματοληψίας

Σχεδιαστικά Προγράμματα Επίπλου

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

Μεθοδολογία ερευνητικής εργασίας

Διερευνητική μάθηση We are researchers, let us do research! (Elbers and Streefland, 2000)

Τεχνολογία Λογισμικού. Ενότητα 1: Εισαγωγή στην UML Καθηγητής Εφαρμογών Ηλίας Γουνόπουλος Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά)

ΚΕΦΑΛΑΙΟ Εισαγωγή Μεθοδολογία της Έρευνας ΕΙΚΟΝΑ 1-1 Μεθοδολογία της έρευνας.

Διαδικασίες παραγωγής λογισμικού. Βασικές αρχές Τεχνολογίας Λογισμικού, 8η αγγ. έκδοση

Τμήμα Επιστημών της Θάλασσας Σύντομες οδηγίες συγγραφής της Πτυχιακής Εργασίας

ΑΝΙΧΝΕΥΣΗ ΠΡΟΤΥΠΩΝ ΣΧΕΔΙΑΣΗΣ ΣΕ ΛΟΓΙΣΜΙΚΟ ΑΝΟΙΧΤΟ ΚΩΔΙΚΑ ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑ ΓΚΟΥΝΤΙΝΑΣ ΛΑΖΑΡΟΣ(ΑΜ:708) ΕΠΙΒΛΕΠΩΝ : ΑΛΕΞΑΝΔΡΟΣ ΛΑΖΑΡΙΔΗΣ

Πληροφοριακά Συστήματα Διοίκησης. Διοικητική Επιστήμη και Λήψη Αποφάσεων

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

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

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

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

Θεμελιώδεις αρχές επιστήμης και μέθοδοι έρευνας

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

Συγγραφή ερευνητικής πρότασης

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

Διαχείριση έργων. Βασικές αρχές Τεχνολογίας Λογισμικού, 8η αγγ. έκδοση

Η συμβολή στην επιτυχία ενός οργανισμού, παρουσιάζοντας σχετικά δεδομένα με τη χρήση τεχνικών 2Δ ή 3Δ τεχνολογίας. Αρμοδιότητα

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

ΣΧΕΔΙΑΣΜΟΣ ΕΝΟΣ INTERNET MARKETING PLAN

Οικονομία - Επιχειρήσεις Μάρκετινγκ 1

ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΙΓΑΙΟΥ

Μοτίβα Σχεδίασης (Design Patterns)

Ελεγχος, Αξιοπιστία και Διασφάλιση Ποιότητας Λογισµικού

Εναλλακτικά του πειράματος

Εισαγωγή Ιστορική Αναδρομή Μεθοδολογικό Πλαίσιο Προϋποθέσεις εφαρμογής Στόχοι Πρότυπα Αξιολόγησης Κύκλου Ζωής Στάδια

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

Μοντελοποίηση δεδομένων με UML Χρήση σε πολυμεσικές εφαρμογές

Λογιστική Θεωρία και Έρευνα

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

ΔΙΟΙΚΗΣΗ ΒΙΟΜΗΧΑΝΙΚΩΝ ΕΠΙΧΕΙΡΗΣΕΩΝ I ΟΙΚΟΝΟΜΙΚΗ ΤΩΝ ΕΠΙΧΕΙΡΗΣΕΩΝ

Κεφάλαιο 2ο. Κατανοώντας την αντικειμενοστρέφεια

Εργαλεία CASE. Computer Assisted Systems Engineering. Δρ Βαγγελιώ Καβακλή. Τμήμα Πολιτισμικής Τεχνολογίας και Επικοινωνίας Πανεπιστήμιο Αιγαίου

Διάλεξη 2. Εργαλεία θετικής ανάλυσης Ή Γιατί είναι τόσο δύσκολο να πούμε τι συμβαίνει; Ράπανος-Καπλάνογλου 2016/7

Η θέση ύπνου του βρέφους και η σχέση της με το Σύνδρομο του αιφνίδιου βρεφικού θανάτου. ΤΕΧΝΟΛΟΓΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΣΧΟΛΗ ΕΠΙΣΤΗΜΩΝ ΥΓΕΙΑΣ

Ανάλυση Απαιτήσεων Απαιτήσεις Λογισµικού

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

Σχεδιαστής Ιστοσελίδων

ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΙΓΑΙΟΥ

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

ΕΠΙΧΕΙΡΗΣΙΑΚΗ ΕΡΕΥΝΑ ΘΕΩΡΙΑ ΚΑΙ ΕΦΑΡΜΟΓΗ ΤΟΥ ΓΡΑΜΜΙΚΟΥ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ ΣΤΗ ΛΗΨΗ ΑΠΟΦΑΣΕΩΝ (1)

Προγραμματισμός και Επιλογή Συστημάτων

ΠΛΗΡΟΦΟΡΙΑΚΑ ΣΥΣΤΗΜΑΤΑ

Ρετσινάς Σωτήριος ΠΕ 1703 Ηλεκτρολόγων ΑΣΕΤΕΜ

Διδάκτορας Οικονομικού Πανεπιστημίου Αθηνών

Συγγραφή Τεχνικών Κειμένων

Θεωρία του Έργου. Διαχείριση Έργου Κύκλος Ζωής. Μαρίνα Α.Τσιρώνη Πολιτικός Μηχανικός, MSc ΕΔΑ Περιφέρειας Κεντρικής Μακεδονίας.

ΑΚΑΔΗΜΙΑ ΤΩΝ ΠΟΛΙΤΩΝ

Το Ευρωπαϊκό Πρόγραμμα. Motor Challenge

Ενότητα 1: Εισαγωγή. ΤΕΙ Στερεάς Ελλάδας. Τμήμα Φυσικοθεραπείας. Προπτυχιακό Πρόγραμμα. Μάθημα: Βιοστατιστική-Οικονομία της υγείας Εξάμηνο: Ε (5 ο )

Μάθημα «Υπηρεσίες Ηλεκτρονικής Υγείας»

Περιεχόμενα. ΚΕΦΑΛΑΙΟ 1 Κατευθύνσεις στην έρευνα των επιστημών υγείας. ΚΕΦΑΛΑΙΟ 2 Έρευνα και θεωρία

Ποσοτικές Μέθοδοι στη Διοίκηση Επιχειρήσεων Ι Σύνολο- Περιεχόμενο Μαθήματος

Συνάφεια μεταξύ ποιοτικών μεταβλητών. Εκδ. #3,

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

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

ΕΙΔΗ ΕΡΕΥΝΑΣ I: ΠΕΙΡΑΜΑΤΙΚΗ ΕΡΕΥΝΑ & ΠΕΙΡΑΜΑΤΙΚΟΙ ΣΧΕΔΙΑΣΜΟΙ

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

ΕΝΟΤΗΤΑ 1 - Νέες Τεχνολογίες Πληροφοριών και Επικοινωνίας. 1ο ΥΠΟΚΕΦΑΛΑΙΟ: ΤΠΕ (Τεχνολογία Πληροφοριών και Επικοινωνιών)

Ενότητα 2. Πηγές Λογισμικού. Πληροφοριακά Συστήματα Διοίκησης ΙI Νίκος Καρακαπιλίδης 2-1

iii ΠΕΡΙΕΧΟΜΕΝΑ Πρόλογος

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

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

Σημειώσεις στο μάθημα «Στοιχεία Προγραμματισμού σε Γραφικό Περιβάλλον»

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

Τα Διδακτικά Σενάρια και οι Προδιαγραφές τους. του Σταύρου Κοκκαλίδη. Μαθηματικού

Θέματα ποιότητας (1/5)

Προτεινόμενα Θέματα Διπλωματικών Εργασιών

Διαχείριση Ειδοποιήσεων με Κινητές Συσκευές

Διαδικασίες παραγωγής λογισμικού. I. Sommerville 2006 Βασικές αρχές Τεχνολογίας Λογισμικού, 8η αγγ. έκδοση Κεφ. 4

Μεθοδολογία Επιστημονικής Έρευνας

«Αξιολόγηση ατόμων με αφασία για Επαυξητική και Εναλλακτική Επικοινωνία, σύμφωνα με το μοντέλο συμμετοχής»

Ζητήματα μεθοδολογίας στη διαπολιτισμική έρευνα

ΑΞΙΟΛΟΓΗΣΗ (THE MATRIX)

Έρευνα Μάρκετινγκ Ενότητα 5

Transcript:

ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΑΜΠΑΤΖΟΓΛΟΥ ΑΠΟΣΤΟΛΟΣ Επίδραση των Προτύπων Σχεδίασης στην Ποιότητα Λογισμικού ΔΙΔΑΚΤΟΡΙΚΗ ΔΙΑΤΡΙΒΗ ΘΕΣΣΑΛΟΝΙΚΗ 2012

2

ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΑΜΠΑΤΖΟΓΛΟΥ ΑΠΟΣΤΟΛΟΣ Επίδραση των Προτύπων Σχεδίασης στην Ποιότητα Λογισμικού ΔΙΔΑΚΤΟΡΙΚΗ ΔΙΑΤΡΙΒΗ Υποβλήθηκε στο Τμήμα Πληροφορικής Ημερομηνία Εξέτασης: 23/01/2012 Επταμελής Εξεταστική Επιτροπή: Αναπληρωτής Καθηγητής, Ιωάννης Σταμέλος (Επιβλέπων) Επίκουρος Καθηγητής, Νικόλαος Νικολαΐδης Επίκουρος Καθηγητής, Αλέξανδρος Χατζηγεωργίου Καθηγητής, Ιωάννης Βλαχάβας Καθηγητής, Ιωάννης Μανωλόπουλος Αναπληρωτής Καθηγητής, Ελευθέριος Αγγελής Επίκουρος Καθηγητής, Ιωάννης Μαυρίδης 3

4

στο μωρό που περιμένουμε 5

6

Αμπατζόγλου Απόστολος ΑΠΘ «Η έγκριση της παρούσης Διδακτορικής Διατριβής από το Τμήμα Πληροφορικής του Αριστοτέλειου Πανεπιστημίου Θεσσαλονίκης δεν υποδηλώνει αποδοχή των γνωμών του συγγραφέως» (Ν. 5343/1932, άρθρο 202, παρ.2) 7

8

Περίληψη Η παρούσα διδακτορική διατριβή πραγματεύεται την επίδραση των προτύπων σχεδίασης στην ποιότητα του λογισμικού. Τα πρότυπα σχεδίασης αποτελούν καταγεγραμμένες λύσεις που έχουν προταθεί στη βιβλιογραφία για την επίλυση συχνά εμφανιζόμενων σχεδιαστικών προβλημάτων. Η επίδραση των προτύπων στην ποιότητα του λογισμικού έχει μελετηθεί εκτενώς στη διεθνή αρθρογραφία. Τα αποτελέσματα όμως των μελετών είναι διχασμένα, καθώς κάποιοι μελετητές υποστηρίζουν πως τα πρότυπα βελτιώνουν την ποιότητα του λογισμικού ενώ άλλοι υποστηρίζουν ότι έχουν αρνητικές επιπτώσεις. Στο πλαίσιο της συγκεκριμένης διατριβής μελετήσαμε με εμπειρικές μεθόδους την επαναχρησιμοποίηση των προτύπων, την επίδραση τους στη δομική ποιότητα καθώς και στην αποσφαλμάτωση του λογισμικού. Τα αποτελέσματα των συγκεκριμένων μελετών επιβεβαίωσαν πως τα πρότυπα σχεδίασης δεν έχουν ομοιόμορφη επίδραση στα χαρακτηριστικά ποιότητας. Ταυτόχρονα όμως, εντοπίστηκαν κάποιοι κανόνες που μπορούν να χρησιμοποιηθούν σαν οδηγός ώστε η χρήση των προτύπων να έχει όσο το δυνατόν περισσότερες θετικές συνέπειες. Στη συνέχεια, και στην προσπάθεια να εντοπιστούν κάποιοι παράγοντες που καθιστούν τη χρήση του προτύπου ευεργετική ή όχι, μελετήσαμε την επίδραση του μεγέθους του προτύπου σχεδίασης, δηλαδή το πλήθος των κλάσεων που συμμετέχουν σε κάθε στιγμιότυπο, στον τρόπο επίδρασης του προτύπου στην ποιότητα. Η συγκεκριμένη μελέτη διενεργήθηκε με χρήση αναλυτικής μεθοδολογίας που έδωσε τη δυνατότητα εξεύρεσης συγκεκριμένων ορίων τα οποία οριοθετούν τις περιοχές θετικής και αρνητικής επίδρασης ενός προτύπου σχεδίασης. Τα αποτελέσματα της μελέτης θεωρούνται ιδιαιτέρως σημαντικά καθώς προσφέρουν μια πιο ολιστική λύση στη μελέτη της επίδρασης των προτύπων σχεδίασης, διότι δε σχετίζεται με συγκεκριμένα στιγμιότυπα προτύπων, αλλά με τα γενικότερα δομικά χαρακτηριστικά τους. Ως πεδία εφαρμογής των μελετών και των αποτελεσμάτων χρησιμοποιήθηκαν το ανοιχτό λογισμικό και τα παιχνίδια για ηλεκτρονικούς υπολογιστές. Το ανοιχτό λογισμικό αποτελεί ένα ραγδαία αναπτυσσόμενο είδος λογισμικού, τόσο σε ερευνητικό όσο και σε επιχειρηματικό επίπεδο. Αντίστοιχα, τα παιχνίδια για ηλεκτρονικούς υπολογιστές αποτελούν βασικό μέρος του σύγχρονου τρόπου ζωής, με τις βιομηχανίες λογισμικού παιχνιδιών να αποτελούν κάποιες από τις πλέον κερδοφόρες επιχειρήσεις. Επιπλέον, η φύση και η πολυπλοκότητα της διαδικασίας ανάπτυξης παιχνιδιών καθιστούν τα παιχνίδια ιδανικό πεδίο εφαρμογής των προτύπων σχεδίασης. Τέλος, τα αποτελέσματα της διατριβής βρήκαν πρακτικές εφαρμογές με δύο κύριους τρόπους. Αρχικά, τα αποτελέσματα της αναλυτικής μεθοδολογίας αποτελέσαν τη βάση για τη δημιουργία ενός εργαλείου υποβοήθησης σχεδίασης συστημάτων, σε περιπτώσεις όπου 9

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

Abstract This thesis deals with the effect of object oriented design patterns in software quality. Design patterns are documented solutions that are proposed as common solutions to common design problems. The effect of patterns on software quality has been rigorously studied in many journal and conference papers. However, the results appear to be controversial, i.e. some researchers suggest that design patterns are beneficial while other suggest that they are harmful. In this thesis we present the results of some empirical studies that investigate the effect of design pattern application on software reusability, debugging efficiency and structural quality. The results suggest that patterns are not universally good or bad, with respect to software quality characteristics. Additionally, the results point out that there are several rules that can be used as guidelines of pattern application. Next, in order to identify factors that constitute a pattern either beneficial or harmful, we investigated the effect of design pattern size, i.e. the number of classes that participate in a pattern instance, in software quality. The specific research effort was analytical in the sense that the solutions under consideration were not related to a specific pattern instance, but on the structural characteristics of each pattern. The results of the study suggest that there are certain thresholds that when surpassed pattern application becomes beneficial. The domains that the results have been applied to and extracted from are open source software and computer games. Open source software is a highly active software engineering area from both an academic and an industrial point of view. Similarly, computer games play a very important role in current lifestyle and computer game industry is thriving. Additionally, the complexity and the nature of computer games constitute them as an extremely fitting domain for using design patterns. Eventually, the results of this thesis have been applied within two major practical considerations. Firstly, the results of the analytical methodology have been used in a decision support tool that aids developers in cases when they could use a design pattern, but they are not sure on the effects of their decision on the quality of the end product. Secondly, a web repository of design pattern instances has been created. In this repository both researcher and practitioners can easily identify pieces of source code that implement certain functionality by applying a design pattern instance. 11

12

Ευχαριστίες Στο σημείο αυτό θα ήθελα να ευχαριστήσω κάποιους ανθρώπους, χωρίς τη βοήθεια των οποίων η συγκεκριμένη διατριβή δε θα είχε ολοκληρωθεί ή δε θα είχε καν αρχίσει Αρχικά, θα ήθελα να ευχαριστήσω τον επιβλέποντα της διδακτορικής μου διατριβής, τον Αναπληρωτή Καθηγητή κ. Ιωάννη Σταμέλο, για την ευκαιρία που μου έδωσε να ξεκινήσω αυτό το εγχείρημα, χωρίς να με γνωρίζει ως φοιτητή του τμήματος και παρά τις δεδομένες συνθήκες εργασίας μου. Θέλω επίσης να τον ευχαριστήσω για την καθοδήγηση, τις ιδέες που μου προσέφερε και τους νέους ορίζοντες που άνοιξε στην έρευνα μου μέσω του ανοιχτού λογισμικού και των εμπειρικών μελετών. Τέλος, ένα μεγάλο ευχαριστώ για την υπομονή και την ευελιξία που έδειξε στο περίεργο και ασταθές ωράριο εργασίας μου. Επίσης, θα ήθελα να ευχαριστήσω τον Επίκουρο Καθηγητή κ. Αλέξανδρο Χατζηγεωργίου για την πολύ ενδιαφέρουσα πρώτη μου επαφή με την Τεχνολογία Λογισμικού και τα πρότυπα σχεδίασης. Εκτιμώ τη μεγάλη του βοήθεια στις πρώτες ερευνητικές μου δημοσιεύσεις και κυρίως τη στήριξη του σε μια πολύ δύσκολη και αβέβαιη χρονική περίοδο πριν από την έναρξη της διδακτορικής διατριβής, όπου εκτός από εξαιρετικός δάσκαλος έμεινε δίπλα μου και ως άνθρωπος. Σε προσωπικό επίπεδο, θα ήθελα να ευχαριστήσω τα τέσσερα και σε λίγο καιρό πέντε πιο σημαντικά άτομα της ζωής μου. Αρχικά, θέλω να ευχαριστήσω τη σύζυγο μου Λεμονιά, η οποία αποτελεί τη συνεχή πηγή δύναμης, αισιοδοξίας και χαλάρωσης στη ζωή μου τα τελευταία δέκα χρόνια. Χωρίς τη Λεμονιά, ούτως ή άλλως δε θα ήμουν ο ίδιος άνθρωπος και φυσικά, ό,τι πετύχαμε αυτά τα χρόνια το πετύχαμε μαζί. Την ευχαριστώ για την ψυχική γαλήνη που μου προσφέρει και τη στήριξη στις δύσκολες στιγμές. Τέλος, θέλω να την ευχαριστήσω για την οικογένεια που χτίζουμε μαζί και για το παιδάκι που περιμένουμε και αποτελεί την πιο ευχάριστη προσμονή της ζωής μου. Επιπλέον, θα ήθελα να ευχαριστήσω τους γονείς μου Πρόδρομο και Ευαγγελία, που με στήριξαν σε όλη τη διάρκεια των σπουδών μου με κάθε τρόπο. Τον πατέρα μου ο οποίος αποτέλεσε και ακόμη αποτελεί παράδειγμα εργατικότητας, αφοσίωσης, που μου δίδαξε πως τίποτα δε μας δίνεται αλλά τα πάντα στη ζωή πρέπει να παλεύουμε για να τα αποκτάμε και τη μητέρα μου για την απαράμιλλη ψυχολογική στήριξη της, ακόμη και για τις ερευνητικές μας συζητήσεις, παρότι δε γνωρίζει το αντικείμενο Τέλος θα ήθελα να ευχαριστήσω την αδερφή μου Αρετή, τόσο για την ψυχική και συναισθηματική υποστήριξη της όλα αυτά τα χρόνια, όσο και για την πρακτική της βοήθεια στη συγγραφή της διατριβής. Τέλος, θα ήθελα να ευχαριστήσω όλους τους συνεργάτες, είτε σε ερευνητικά άρθρα, είτε απλά στο γραφείο με τους οποίους πέρασα πολλές ευχάριστες, δυσάρεστες, δημιουργικές και χαλαρωτικές στιγμές. Ανδροκλή, Στέφανε, Σοφία, Όλια, Απόστολε, Γιώργο, Γεωργία, Ελβίρα, Αντώνη, Ελένη και Ματίνα σας ευχαριστώ όλους για το μικρό ή το μεγαλύτερο λιθαράκι που προσθέσατε σε αυτή την προσπάθεια. 13

14

Πίνακας Περιεχομένων Περίληψη...9 Abstract... 11 Ευχαριστίες... 13 Πίνακας Περιεχομένων... 15 Κατάλογος Σχημάτων... 19 Κατάλογος Πινάκων... 21 Κεφάλαιο 1 Εισαγωγή... 23 1.1 Ανοιχτό Λογισμικό... 23 1.2 Ποιότητα Λογισμικού... 23 1.3 Πρότυπα Σχεδίασης... 26 1.4 Παιχνίδια Ηλεκτρονικών Υπολογιστών... 28 1.5 Κίνητρο... 30 1.6 Συνεισφορά της Διατριβής... 31 1.7 Μεθοδολογία... 31 1.7.1 Μεθοδολογία Συστηματικής Ανασκόπησης της Βιβλιογραφίας... 32 1.7.2 Αναλυτική Μεθοδολογία... 33 1.7.3 Εμπειρικές Μελέτες... 33 Κεφάλαιο 2 Ανασκόπηση της Βιβλιογραφίας... 37 2.1 Ανασκόπηση της Βιβλιογραφίας στα Πρότυπα Σχεδίασης... 37 2.1.1 Περιγραφική Στατιστική... 39 2.1.2 Αποτελέσματα... 41 2.2 Ανασκόπηση της Βιβλιογραφίας: Τεχνολογία Λογισμικού για Παιχνίδια... 69 2.2.1 Αποτελέσματα... 74 2.2.2 Συζήτηση... 77 Κεφάλαιο 3 Εμπειρικές Μελέτες... 85 3.1 Χρήση Προτύπων Σχεδίασης στο Ανοιχτό Λογισμικό... 85 3.1.1 Αποτελέσματα... 87 3.1.2 Συζήτηση... 93 3.2 Αξιολόγηση της Χρήσης Προτύπων Σχεδίασης στην Ανάπτυξη Παιχνιδιών... 95 3.2.1 Πρότυπα Σχεδίασης και Παιχνίδια... 96 3.2.2 Αξιολόγηση... 100 3.3 Εμπειρική Μελέτη Επαναχρησιμοποίησης Προτύπων Σχεδίασης... 105 3.3.1 Υπόβαθρο Έρευνας... 106 15

3.3.2 Μεθοδολογία... 109 3.3.3 Στατιστική Ανάλυση... 112 3.3.4 Συζήτηση... 115 3.3.5 Παράδειγμα... 118 3.3.6 Πρακτικά Οφέλη Μεθοδολογίας... 120 3.4 Εμπειρική Μελέτη της Επίδρασης των Προτύπων Σχεδίασης στα Σφάλματα του Λογισμικού 122 3.4.1 Αποτελέσματα... 124 3.4.2 Συζήτηση... 128 Κεφάλαιο 4 Μεθοδολογία Αξιολόγησης της Επίδρασης των Προτύπων Σχεδίασης στην Ποιότητα του Λογισμικού... 131 4.1 Μεθοδολογία... 131 4.2 Επίδειξη Μεθοδολογίας... 133 4.2.1 Πρότυπο Σχεδίασης «Γέφυρα»... 135 4.3 Συζήτηση... 146 4.3.1 Πρότυπα Σχεδίασης και Συντηρησιμότητα... 149 4.3.2 Πρότυπα Σχεδίασης και Δομική Ποιότητα... 151 4.3.3 Πρότυπα Σχεδίασης και Ποιότητα Σχεδίου... 152 Κεφάλαιο 5 Δημιουργία και Επεξεργασία Αποθετηρίου Στιγμιότυπων Προτύπων Σχεδίασης... 157 5.1 Αποθετήρια Επαναχρησιμοποίησης... 157 5.2 Σχεδίαση Αποθετηρίων... 160 5.2.1 Σχεδιασμός Αποθετηρίου Περιγραφή Δεδομένων... 161 5.2.2 Μέθοδος Αποθήκευσης στο Αποθετήριο... 161 5.2.3 Μέθοδοι Ανάκτησης από το Αποθετήριο... 162 5.3 Εμπειρική Αξιολόγηση... 163 5.3.1 Ορισμός Πειράματος... 163 5.3.2 Πλάνο Πειράματος... 164 5.3.3 Εκτέλεση Πειράματος... 167 5.3.4 Διερμήνευση Αποτελεσμάτων... 168 5.4 Αποτελέσματα... 168 5.4.1 Περιγραφική Στατιστική... 168 5.4.2 Έλεγχος Υποθέσεων... 171 5.5 Συζήτηση... 173 5.5.1 Επίδραση Χρήσης Αποθετηρίου στην Ορθότητα των Εργασιών... 173 5.5.2 Επίδραση Χρήσης Αποθετηρίου στον Χρόνο Εκτέλεσης των Εργασιών... 174 5.5.3 Επίδραση Χρήσης Αποθετηρίου στην Προσπάθεια/Ικανοποίηση... 174 16

6. Επίλογος... 175 6.1 Απειλές της Εγκυρότητας... 175 6.2 Μελλοντική Εργασία... 176 6.3 Σύνοψη...176 Αναφορές... 179 Παράρτημα Α Λίστα Μετρικών Εσωτερικής Ποιότητας... 196 Παράρτημα Β Λίστα Βιβλιογραφικών Πηγών (Ανασκόπηση Πρότυπα Σχεδίασης)... 199 Παράρτημα Γ Λίστα Αναφορών (Ανασκόπηση Πρότυπα Σχεδίασης)... 200 Παράρτημα Δ Λίστα Άρθρων που Μελετήθηκαν (Ανασκόπηση Πρότυπα Σχεδίασης)... 210 Παράρτημα Ε Συχνότητα Εμφάνισης Λέξεων Κλειδιά (Ανασκόπηση Πρότυπα Σχεδίασης)... 218 Παράρτημα ΣΤ Λίστα Αναφορών (Ανασκόπηση Τεχνολογία Λογισμικού για Παιχνίδια)... 221 Παράρτημα Ζ Στοιχεία Αναφορών (Ανασκόπηση Τεχνολογία Λογισμικού για Παιχνίδια)... 228 Παράρτημα Η Wilkoxon Rank test (Επαναχρησιμοποιήσιμότητα Προτύπων Σχεδίασης)... 230 17

18

Κατάλογος Σχημάτων Εικόνα 1: Διάγραμμα κλάσεων προτύπου Abstract Factory...27 Εικόνα 2: Διάγραμμα κλάσεων προτύπου Adapter...27 Εικόνα 3: Διάγραμμα κλάσεων προτύπου State...28 Εικόνα 4: Συνολική Ένταση Ερευνητικής Δραστηριότητας...41 Εικόνα 10: Ερευνητική Δραστηριότητα ανά Χώρα...76 Εικόνα 11: Επιστημονική Δραστηριότητα ανά Πεδίο Έρευνας...77 Εικόνα 12: Ερευνητικά Θέματα...79 Εικόνα 13: Ερευνητικά Θέματα ανά Έτος...79 Εικόνα 14: Ερευνητικές Προσεγγίσεις...82 Εικόνα 15: Εμπειρικές Μέθοδοι Έρευνας...83 Εικόνα 16: Επίπεδα Χρήσης Προτύπων Σχεδίασης...94 Εικόνα 17:Επίπεδα Χρήσης Προτύπων Σχεδίασης ανά Κατηγορία Λογισμικού...95 Εικόνα 18: Αρχιτεκτονική Παιχνιδιών [3]...96 Εικόνα 19: Πρότυπο «Στρατηγική» Σκάκι...98 Εικόνα 20: Πρότυπο «Παρατηρητής» Football manager...99 Εικόνα 21: Πρότυπο «Κατάσταση» First Person Shooter...99 Εικόνα 22: Πρότυπο «Γέφυρα» Τρισδιάστατο Παιχνίδι...100 Εικόνα 23: cannon smash 0.4.5 Υλοποίηση multiplayer...101 Εικόνα 24: cannon smash 0.4.5 προσέγγιση multiplayer πηγαίος κώδικας...102 Εικόνα 25: cannon smash 0.4.6 προσέγγιση multiplayer...103 Εικόνα 26: Ice Hockey Manager έκδοση 0.1.2...104 Εικόνα 27: Ice Hockey Manager έκδοση 0.1.1 πηγαίος κώδικας...104 Εικόνα 28: Διασπορά Μεταβλητής NOFparticipants...112 Εικόνα 29: Διασπορά Μεταβλητής NOFpackageSet...112 Εικόνα 30: Boxplots Μεταβλητών R class, R pattern, R package and R packageset...113 Εικόνα 31: Διάγραμμα Κλάσεων Πακέτου jfreechart.org.jfree.chart.bloc...121 Εικόνα 32: Boxplot πρότυπο «Προσαρμογέας» / Ρυθμός Αποσφαλμάτωσης...127 Εικόνα 33: Boxplot πρότυπο «Παρατηρητής» / Πλήθος Σφαλμάτων...127 Εικόνα 34: Boxplot πρότυπο «Μέθοδος Υπόδειγμα» / Πλήθος Σφαλμάτων...127 Εικόνα 35: Boxplot πρότυπο «Παρατηρητής» / Ρυθμός Αποσφαλμάτωσης...127 Εικόνα 36: Διάγραμμα Κλάσεων Λύση «Ανοιχτού Λογισμικού»...136 Εικόνα 37: Διάγραμμα Κλάσεων Λύση «Πρότυπο Σχεδίασης»...136 Εικόνα 38: Διάγραμμα Κλάσεων Λύση «Βιβλιογραφίας»...138 Εικόνα 39: DePAD Κεντρική Οθόνη Εφαρμογής...147 Εικόνα 40: DePAD Οθόνη Εισόδου...147 19

Εικόνα 41: DePAD Οθόνη Αποτελεσμάτων...148 Εικόνα 42: Γραφική Αναπαράσταση της μετρικής CF...151 Εικόνα 43: Γραφική Αναπαράσταση της μετρικής LCOM...151 Εικόνα 44: Ιεραρχία Προτύπου Σχεδίασης...161 Εικόνα 45: Boxplot χρόνος εκτέλεσης προγραμματιστικής εργασίας...171 Εικόνα 46: Boxplot χρόνος εκτέλεσης ερευνητικής εργασίας...171 Εικόνα 47: Boxplot ορθότητα εκτέλεσης προγραμματιστικής εργασίας...171 Εικόνα 48: Boxplot ορθότητα εκτέλεσης ερευνητικής εργασίας...171 Εικόνα 49: Επικρατούσα Σχεδιαστική Λύση (Πρότυπο Κατάσταση)...177 Εικόνα 50: Σύγκριση Επαναχρησιμοποιησιμότητας Προτύπου Σχεδίασης Επισκέπτης...178 20

Κατάλογος Πινάκων Πίνακας 1: Φάσεις Συμπερίληψης Αποκλεισμού...38 Πίνακας 2: Ερευνητικά Πεδία...40 Πίνακας 3: Εμπειρικές Μέθοδοι...40 Πίνακας 4: Προορισμοί Δημοσιεύσεων...41 Πίνακας 5: Προτύπων Σχεδίασης Χαρακτηριστικά Εξωτερικής Ποιότητας...64 Πίνακας 6: Προτύπων Σχεδίασης Χαρακτηριστικά Εσωτερικής Ποιότητας...65 Πίνακας 7: Ισοδύναμες Εναλλακτικές Σχεδιαστικές Λύσεις...68 Πίνακας 8: Θεματολογία Τεχνολογίας Λογισμικού...73 Πίνακας 9: Εμπειρικές Μέθοδοι...74 Πίνακας 10: Ερευνητική Δραστηριότητα...75 Πίνακας 11: Αριθμός Δημοσιεύσεων (Περιοδικά/Συνέδρια)...75 Πίνακας 12: Αριθμός Δημοσιεύσεων ανά Εκδοτικό Οίκο...76 Πίνακας 13: Θέματα Έρευνας στη Μηχανική Παιχνιδιών...76 Πίνακας 14: Εμπειρικές Μέθοδοι Έρευνας στη Μηχανική Παιχνιδιών...76 Πίνακας 15: Ερευνητικές Προσεγγίσεις στη Μηχανική Παιχνιδιών...76 Πίνακας 16: Μέσος Αριθμός Στιγμιοτύπων Προτύπων Σχεδίασης...88 Πίνακας 17: Στατιστικά Σημαντικές Διαφορές στο Βαθμό Χρήσης Προτύπων Σχεδίασης...89 Πίνακας 18: Μέσος Όρος Στιγμιοτύπων Προτύπων Σχεδίασης ανά Κατηγορία Λογισμικού...90 Πίνακας 19: Βαθμός Χρήσης Προτύπων Σχεδίασης (Κατηγορίες Λογισμικού)...91 Πίνακας 20: Μέγεθος Στιγμιοτύπων Προτύπων Σχεδίασης (Κατηγορίες Λογισμικού) Ι...92 Πίνακας 21: Μέγεθος Στιγμιοτύπων Προτύπων Σχεδίασης (Κατηγορίες Λογισμικού) ΙΙ...92 Πίνακας 22: Μετρικές Συστήματος Cannon Smash...103 Πίνακας 23: Μετρικές Συστήματος Ice Hockey Manager...105 Πίνακας 24: Δομικά Χαρακτηριστικά Ποιότητας Επαναχρησιμοποίηση...107 Πίνακας 25: Επιλογές «Επιλογή Συνόλου Κλάσεων»...110 Πίνακας 26: Μετατροπές Μεταβλητών...112 Πίνακας 27: Περιγραφική Στατιστική...113 Πίνακας 28: Σύγκριση Εναλλακτικών Σημείων Εκκίνησης Επαναχρησιμοποίησης...114 Πίνακας 29: Crosstabs (Βέλτιστη Επιλογή Πρότυπο Σχεδίασης)...114 Πίνακας 30: Crosstabs (Βέλτιστη Επιλογή Μέγεθος Στιγμιοτύπου Προτύπου Σχεδίασης)..115 Πίνακας 31: Crosstabs (Βέλτιστη Επιλογή Πλήθος Πακέτων Προτύπου Σχεδίασης)...115 Πίνακας 32: Ταξινόμηση Επιλογών «Επιλογή Συνόλου Κλάσεων» ανά Πρότυπο Σχεδίασης.117 Πίνακας 33: «Επιλογή Συνόλου Κλάσεων» ανά Μέγεθος Προτύπου Σχεδίασης...118 Πίνακας 34: Παράδειγμα από το πακέτο jfreechart.org.jfree.chart.block...120 Πίνακας 35: Περιγραφική Στατιστική...125 Πίνακας 36: Συσχέτιση Προτύπων με Πλήθος Σφαλμάτων και Αριθμό Αποσφαλμάτωσης...127 21

Πίνακας 37: Αποδοτικότητα Αποσφαλμάτωσης Βαθμός Χρήσης Προτύπων Σχεδίασης...128 Πίνακας 38: Μετρικές Πρόβλεψης Συντηρησιμότητας...137 Πίνακας 39: Μετρικές Συντηρησιμότητας για τις Σχεδιαστικές Επιλογές...144 Πίνακας 40: Κρίσιμα Σημεία Συντηρησιμότητας...146 Πίνακας 41: Σενάρια Μελέτης Περίπτωσης...150 Πίνακας 42: Αποτελέσματα Μελέτης Περίπτωσης...150 Πίνακας 43: Μέσος Όρος Μετρικών Δομικής Ποιότητας...152 Πίνακας 44: Στατιστικά Σημαντικές Διαφορές Μετρικών Δομικής Ποιότητας...152 Πίνακας 45: Σενάρια Μελέτης Περίπτωσης...154 Πίνακας 46: Αποτελέσματα Μελέτης Περίπτωσης...154 Πίνακας 47: Υποθέσεις Έρευνας...165 Πίνακας 48: Μεταβλητές Πειράματος...167 Πίνακας 49: Περιγραφική Στατιστική (Εμπειρία)...169 Πίνακας 50: Περιγραφική Στατιστική (Αποτελέσματα)...169 Πίνακας 51: Πίνακας Συνάφειας...170 Πίνακας 52: Independent Sample t test & Mann Whitney U test για προγραμματιστές...172 Πίνακας 53: Independent Sample t test & Mann Whitney U test για ερευνητές...173 22

Κεφάλαιο 1 Εισαγωγή Στο πρώτο κεφάλαιο της διδακτορικής διατριβής, παρουσιάζονται οι κύριες έννοιες που θα μας απασχολήσουν στα υπόλοιπα κεφάλαια. Κατά σειρά, γίνεται μια εισαγωγή στο ανοιχτό λογισμικό, στην ποιότητα του λογισμικού, στα πρότυπα σχεδίασης και στην κατασκευή λογισμικού παιχνιδιών για ηλεκτρονικούς υπολογιστές. Επίσης παρουσιάζονται το κίνητρο, η βασική συνεισφορά της διατριβής καθώς και οι μεθοδολογικές ερευνητικές προσεγγίσεις. 1.1 Ανοιχτό Λογισμικό Η διαδικασία ανάπτυξης κώδικα ανοιχτού λογισμικού (OSS), που παρουσιάστηκε το 1998 [80], είναι μια σχετικά καινούρια τάση στην παραγωγή λογισμικού. Παρά το μικρό διάστημα ζωής της, η κοινωνία ανοιχτού λογισμικού έχει να επιδείξει ορισμένα πολύ πετυχημένα έργα με μεγάλη αποδοχή από την κοινωνία των υπολογιστών, όπως τα Linux, Apache Server και Mozilla Firefox. Η ανάπτυξη μιας εφαρμογής ανοιχτού λογισμικού βασίζεται στη συνεργασία. Ένας προγραμματιστής ή μία ομάδα προγραμματιστών ξεκινάει μια εφαρμογή και ανακοινώνει, μέσω του διαδικτύου, μια έκδοση που διατίθεται ελεύθερα, τόσο για χρήση όσο και για τροποποίηση. Έπειτα, η κοινωνία ανοιχτού λογισμικού επεκτείνει και συντηρεί την εφαρμογή. Αυτός ο τρόπος ανάπτυξης έχει τόσο πλεονεκτήματα όσο και μειονεκτήματα. Ένα μειονέκτημα της ανάπτυξης λογισμικού ανοιχτού κώδικα είναι η έλλειψη τεκμηρίωσης και τεχνικής υποστήριξης. Από την άλλη πλευρά, τα βασικά πλεονεκτήματα του ανοιχτού λογισμικού είναι το χαμηλό κόστος, η αξιοπιστία και το γεγονός ότι παρέχει τον πηγαίο κώδικά των εφαρμογών στους χρήστες ώστε να μπορούν να προσαρμόσουν το λογισμικό σύμφωνα με τις δικές τους ανάγκες [177]. Επιπλέον, το λογισμικό ανοιχτού κώδικα παρέχει δυνατότητες επαναχρησιμοποίησης, από την άποψη ότι διατίθεται ελεύθερα στους προγραμματιστές παρέχοντας ποικίλα κομμάτια κώδικα. Προκειμένου ένα τμήμα κώδικα να μπορεί να χρησιμοποιηθεί εύκολα και επιτυχώς από μια άλλη εφαρμογή πρέπει να είναι κατανοητό, ευκολοσυντήρητο και ευέλικτο. 1.2 Ποιότητα Λογισμικού Στη βιβλιογραφία εμφανίζονται διάφοροι τρόποι για να ορίσει κανείς την έννοια της ποιότητας λογισμικού. Σύμφωνα με το [120], η ποιότητα είναι μια σύνθετη και πολύπλευρη ιδέα. Η ποιότητα μπορεί να αναγνωριστεί αλλά όχι να οριστεί. Από τη σκοπιά του χρήστη, η ποιότητα αφορά την καταλληλότητα ως προς κάποιο συγκεκριμένο σκοπό. Από κατασκευαστική άποψη, ποιότητα σημαίνει συμμόρφωση με τις προδιαγραφές. Από άποψη προϊόντος, η ποιότητα αφορά τη σύνδεση των έμφυτων χαρακτηριστικών του προϊόντος, ενώ 23

αναφορικά με την αξία, η ποιότητα εξαρτάται από το ποσό που ένας πελάτης είναι διατεθειμένος να πληρώσει για να το αποκτήσει. Η ποιότητα του λογισμικού διαχωρίζεται σε δυο κατηγορίες, (α) την εσωτερική ποιότητα και (β) την εξωτερική ποιότητα [120]. Η εσωτερική ποιότητα ασχολείται με τα χαρακτηριστικά του λογισμικού που δεν μπορούν να παρατηρηθούν από το χρήστη ή τον προγραμματιστή, όπως για παράδειγμα η συνοχή, η πολυπλοκότητα και η σύζευξη. Η εσωτερική ποιότητα είναι μετρήσιμη, με μετρικές που μπορούν να λαμβάνονται απευθείας είτε από τον πηγαίο κώδικα, είτε από σχεδιαστικά έγγραφα, όπως διαγράμματα κλάσεων ή ακολουθίας. Η εξωτερική ποιότητα ασχολείται με τις πτυχές του λογισμικού που γίνονται αντιληπτές είτε από τον προγραμματιστή είτε από το χρήστη, όπως η ευκολία συντήρησης, η λειτουργικότητα και η χρηστικότητα. Τα χαρακτηριστικά της εξωτερικής ποιότητας είναι μη μετρήσιμα και, προκειμένου να έχουν πρόσβαση σε αυτά, οι προγραμματιστές χρησιμοποιούν κάποιο μοντέλο ποιότητας ώστε να αξιολογήσουν τα χαρακτηριστικά εξωτερικής ποιότητας μέσω χαρακτηριστικών εσωτερικής ποιότητας. Ένα τέτοιο μοντέλο είναι το διεθνές πρότυπο, ISO 9126, που έχει αναπτυχθεί με σκοπό την εκτίμηση της ποιότητας του λογισμικού. Το ISO 9126 προσδιορίζει ορισμένα χαρακτηριστικά ποιότητας και τις μετρικές που τα υπολογίζουν [110]. Τα έξι βασικά χαρακτηριστικά που ορίζει το πρότυπο είναι η λειτουργικότητα, η αξιοπιστία, η χρηστικότητα, η αποτελεσματικότητα, η ευκολία για συντήρηση και η φορητότητα, ενώ ορίζει και 27 υποκατηγορίες που αναλύουν αυτά τα χαρακτηριστικά. Το πρότυπο ορίζει επίσης μετρικές για την μέτρηση των 27 υπο χαρακτηριστικών. Για παράδειγμα, το ποιοτικό χαρακτηριστικό της λειτουργικότητας μπορεί να αναπαρασταθεί από τις τιμές των 5 υποκατηγοριών από τις οποίες συντίθεται και χρησιμοποιώντας μια κατάλληλη μέθοδο σύνθεσης των αποτελεσμάτων να προκύψει μια τιμή που θα προσδιορίζει τη λειτουργικότητα του συστήματος. Επειδή το ποιοτικό μοντέλο που παρέχει το πρότυπο είναι πολύ γενικό, μπορεί να εφαρμοστεί σε οποιοδήποτε λογισμικό. Το βασικό πλεονέκτημά των μετρικών σε επίπεδο κώδικα είναι ότι παρέχουν στους προγραμματιστές διορατικότητα στο εσωτερικό του συστήματος που αναπτύσσουν και τους βοηθούν να κατανοήσουν ποια κομμάτια κώδικα πρέπει να ανακατασκευαστούν ή να ελεγχθούν σχολαστικά. Βοηθούν στην αναγνώριση ενδεχόμενων κινδύνων, στην κατανόηση της εκάστοτε κατάστασης ενός έργου και στην καταγραφή της προόδου κατά την ανάπτυξη του λογισμικού. Η πιο γνωστή ομάδα τέτοιων μετρικών εισήχθη το 1994 από τους Chidamber, Darcy και Kemmerer [51] και περιείχε έξι μετρικές. Αναλυτικά, (1) η WMPC (Weighted Methods Per Class), που υπολογίζει την πολυπλοκότητα μιας κλάσης, μετρώντας τον αριθμό των μεθόδων που την αποτελούν, (2) η DIT (Depth of Inheritance Tree), που συσχετίζει το βάθος μιας κλάσης στην ιεραρχία με την πολυπλοκότητα της, θεωρώντας ότι όσο μεγαλύτερο το βάθος στην ιεραρχία, τόσο πιο πιθανή η κληρονομικότητα κλάσεων υψηλότερων στην ιεραρχία, που έχει ως αποτέλεσμα την αύξηση του αριθμού των μεθόδων 24

στην κλάση και συνεπώς την αύξηση της πολυπλοκότητας, (3) η NOC (Number Of Children) που μετράει πόσες υποκλάσεις πρόκειται να κληρονομήσουν τις μεθόδους των κλάσεων γονέων, (4) η CBO (Coupling Between Object Classes) που υπολογίζει το κατά πόσο οι κλάσεις εξαρτώνται από άλλες κλάσεις για να λειτουργήσουν ή είναι αυτόνομες, γεγονός που επηρεάζει πολύ την δυνατότητα επαναχρησιμοποίησης, (5) η RFC (Response For a Class ), που μετράει τον αριθμό των μεθόδων που ανταποκρίνονται κατά τη λήψη ενός μηνύματος από μια κλάση, θεωρώντας ότι όσο μεγαλύτερος ο αριθμός αυτός, τόσο πιο σύνθετη αναμένεται να είναι η διαδικασία της αποσφαλμάτωσης και του ελέγχου, αφού για τη λειτουργία της κλάσης εμπλέκονται και μέθοδοι που καλούνται από εξωτερικές κλάσεις, αυξάνοντας έτσι την πολυπλοκότητα, (6) η LCOM (Lack of Cohesion in Methods) που μετράει τη συνοχή των μεθόδων μιας κλάσης, και είναι επιθυμητή αφού προωθεί την ενθυλάκωση και μειώνει την πολυπλοκότητα και την πιθανότητα λαθών κατά τη διαδικασία της ανάπτυξης [51]. Οι μετρικές σε επίπεδο κώδικα χαρακτηρίζονται από μεγάλη ακρίβεια, αλλά μπορούν να υπολογιστούν μόνο κατά την φάση εκτέλεσης. Αντίθετα, οι μετρικές σε σχεδιαστικό επίπεδο, δεν είναι τόσο ακριβείς, μπορούν όμως να υπολογιστούν νωρίτερα, και να παρέχουν ενδείξεις για την τελική ποιότητα του λογισμικού. Για να μπορέσουν να χρησιμοποιηθούν πρέπει το αντικειμενοστρεφές σχέδιο να περιέχει πληροφορίες, όπως ορισμό των κλάσεων, ιεραρχία των κλάσεων, διευκρινήσεις για τη λειτουργικότητα των μελών των κλάσεων και διευκρινήσεις σχετικά με τις παραμέτρους, τους τύπους και τις ιδιότητες που χρησιμοποιούνται [22]. Σύμφωνα με μια έρευνα που έχει διεξαχθεί, υπάρχουν ορισμένες μετρικές που μπορούν να τροποποιηθούν και να χρησιμοποιηθούν για την αξιολόγηση των σχεδιαστικών χαρακτηριστικών, όπως η αφαίρεση, η ανταλλαγή μηνυμάτων και η κληρονομικότητα. Υπάρχουν όμως και κάποια σχεδιαστικά χαρακτηριστικά, όπως η ενθυλάκωση και η σύνθεση, για τα οποία δεν υπάρχουν αντικειμενοστρεφείς σχεδιαστικές μετρικές. Οι μετρικές συνοχής και σύζευξης απαιτούν μια σχεδόν ολοκληρωμένη εφαρμογή των κλάσεων για να μπορέσουν να υπολογιστούν. Ορισμένες μετρικές σε επίπεδο σχεδίου είναι οι εξής: (1) η DSC (Design Size in Classes) που μετράει το σύνολο των κλάσεων στο σχέδιο, (2) η NOH (Number Of Hierarchies) που μετράει τον αριθμό των ιεραρχιών των κλάσεων στο σχέδιο, (3) η ANA (Average Number of Ancestors) που επισημαίνει το μέσο όρο των κλάσεων από τις οποίες μια κλάση κληρονομεί πληροφορίες και υπολογίζεται προσδιορίζοντας όλες τις κλάσεις ξεκινώντας από την ρίζα μιας ιεραρχικής δομής, (4) η DAM (Data Access Metric), το ποσοστό δηλαδή των ιδιωτικών ιδιοτήτων προς το σύνολο των ιδιοτήτων μιας κλάσης, όπου επιθυμητά είναι τα μεγάλα ποσοστά της μετρικής, (5) η DCC (Direct Class Coupling) που υπολογίζει των αριθμό των διαφορετικών κλάσεων με τις οποίες σχετίζεται άμεσα μια κλάση και περιλαμβάνει κλάσεις που σχετίζονται άμεσα με κάποια ιδιότητα, δήλωση ή παράμετρο μιας μεθόδου, (6) η CAM (Cohesion Among Methods of Class) που υπολογίζει τη συσχέτιση μεταξύ των μεθόδων μιας κλάσης και της λίστας παραμέτρων της, (7) η MOA (Measure Of Aggregation) που μετράει τον 25

αριθμό των δηλωτικών δεδομένων που οι τύποι τους είναι κλάσεις ορισμένες από τον χρήστη, (8) η MFA (Measure of Functional Abstraction) το ποσοστό δηλαδή των μεθόδων που κληρονομούνται από μια κλάση προς το συνολικό αριθμό των μεθόδων που είναι προσβάσιμες από τις μεθόδους μιας κλάσης, (9) η NOP (Number of Polymorphic Methods) που μετράει τις μεθόδους που εμφανίζουν πολυμορφική συμπεριφορά, (10) η CIS (Class Interface Size) που μετράει των αριθμό των δημόσιων μεθόδων σε μια κλάση, (11) η NOM (Number Of Methods) που μετράει όλες τις μεθόδους που ορίζονται σε μια κλάση. Η πλήρης λίστα των μετρικών που χρησιμοποιούνται στην παρούσα διδακτορική διατριβή παρουσιάζεται στο Παράρτημα Α. 1.3 Πρότυπα Σχεδίασης Τα πρότυπα σχεδίασης παρουσιάστηκαν αρχικά στον τομέα της αρχιτεκτονικής, από τον Christopher Alexander. Ο Alexander παρατήρησε ότι υπάρχουν συγκεκριμένα αρχιτεκτονικά σχεδιαστικά προβλήματα που μπορούν να διαχειριστούν με κοινές λύσεις. Έτσι κατέγραψε αυτά τα ζευγάρια προβλημάτων και λύσεων προτείνοντας την επαναχρησιμοποίηση τους για την επίτευξη καλών ποιοτικά σχεδίων [6]. Στα μέσα της δεκαετίας του 1990, η ιδέα των προτύπων υιοθετήθηκε από προγραμματιστές αντικειμενοστρεφούς λογισμικού. Στο [88] καταγράφονται 23 πρότυπα που επιλύουν συνήθη προβλήματα στη σχεδίαση λογισμικού. Τα τελευταία χρόνια, τα πρότυπα σχεδίασης εξακολουθούν να ελκύουν το ενδιαφέρον των ερευνητών και πλέον θεωρούνται ως ένα αξιοσέβαστο κομμάτι έρευνας της μηχανικής λογισμικού. Στη συνέχεια, παρουσιάζεται ενδεικτικά η δομή τριών προτύπων σχεδίασης, (α) Αφηρημένο Εργοστάσιο (Abstract Factory), (β) Προσαρμογέας (Adapter) και (γ) Κατάσταση (State). Αφηρημένο Εργοστάσιο (Abstract Factory) Το πρότυπο σχεδίασης Abstract Factory έχει ως σκοπό την παροχή μιας διασύνδεσης για τη δημιουργία οικογενειών, συσχετιζόμενων ή εξαρτημένων αντικειμένων, χωρίς να προσδιορίζεται η συγκεκριμένη κλάση τους [88]. Ανήκει στην κατηγορία των κατασκευαστικών προτύπων (creational) και ως εκ τούτου επιτρέπει τη συγγραφή μεθόδων που δημιουργούν νέα αντικείμενα, χωρίς την άμεση χρήση ιδιωμάτων (π.χ. τελεστής new), όπως συμβαίνει στις αντικειμενοστρεφείς γλώσσες προγραμματισμού. Το γεγονός αυτό επιτρέπει την ανάπτυξη μεθόδων που παράγουν ομάδες διαφορετικών αντικειμένων καθώς και την επέκτασή τους για νέα αντικείμενα χωρίς την τροποποίηση του κώδικα των μεθόδων. Το πρότυπο Αφηρημένο Εργοστάσιο χρησιμοποιείται για την αποφυγή εξάρτησης από συγκεκριμένες κλάσεις όταν απαιτείται η δημιουργία αντικειμένων καθώς και για την ομαδοποίηση μεθόδων που δημιουργούν συσχετιζόμενα αντικείμενα σε μια αφηρημένη κλάση. 26

Γενική δομή Εικόνα 1: Διάγραμμα κλάσεων προτύπου Abstract Factory Προσαρμογέας (Adapter) Το πρότυπο σχεδίασης Adapter έχει ως στόχο τη μετατροπή της διασύνδεσης μιας κλάσης σε μια άλλη που αναμένει το πρόγραμμα πελάτης. Έτσι, επιτρέπει τη συνεργασία κλάσεων, η οποία σε διαφορετική περίπτωση θα ήταν αδύνατη λόγω ασύμβατων διασυνδέσεων. Συχνά ο κώδικας μιας κλάσης προσφέρεται για επαναχρησιμοποίηση αλλά αυτή δεν είναι δυνατή, λόγω του ότι τα προγράμματα που επιθυμούν να χρησιμοποιήσουν τις λειτουργίες της αναμένουν διαφορετική διασύνδεση. Στη συνήθη περίπτωση οπού τα προγράμματα πελάτες δεν είναι δυνατόν να τροποποιηθούν και η κλάση Σχεδίασης είναι επιθυμητό να χρησιμοποιηθεί χωρίς τροποποίηση, βρίσκει εφαρμογή το πρότυπο Adapter. Ένας προσαρμογέας κλάσης χρησιμοποιεί πολλαπλή κληρονομικότητα για να προσαρμόσει μια διασύνδεση σε μια άλλη, ενώ ένας προσαρμογέας αντικειμένου βασίζεται στη σύνθεση αντικειμένων και στη διαβίβαση μηνυμάτων. Το πρότυπο αυτό χρησιμοποιείται όταν θέλουμε να χρησιμοποιήσουμε μια υπάρχουσα κλάση αλλά η διασύνδεσή της δε συμβαδίζει με τις υπάρχουσες ανάγκες [88]. Γενική δομή Εικόνα 2: Διάγραμμα κλάσεων προτύπου Adapter 27

Κατάσταση (State) Το πρότυπο Κατάσταση ενθυλακώνει την κατάσταση ενός αντικειμένου, ώστε να μπορεί να αλλάξει τη συμπεριφορά του, όταν αλλάξει η εσωτερική του κατάσταση [88]. Το πρότυπο Κατάσταση δίνει τη δυνατότητα σε ένα αντικείμενο να συμπεριφέρεται σαν να αλλάζει η κλάση του, κάτι που στις περισσότερες αντικειμενοστρεφείς γλώσσες είναι αδύνατο. Στο πρότυπο, η κλάση πελάτης περιέχει μια αφηρημένη κλάση, η οποία όμως δεν αντιπροσωπεύει μια στρατηγική αλλά μια κατάσταση. Οι παράγωγες κλάσεις υλοποιούν τις διάφορες καταστάσεις και κατά συνέπεια η κλάση πελάτης μπορεί να εναλλάξει την κατάστασή της αλλάζοντας την τιμή του δείκτη αναφοράς προς την επιθυμητή περιεχόμενη κατάσταση. Γενική δομή Εικόνα 3: Διάγραμμα κλάσεων προτύπου State 1.4 Παιχνίδια Ηλεκτρονικών Υπολογιστών Η κατασκευή τρισδιάστατων εφαρμογών αποτελεί ένα από τα πιο σύγχρονα και ταχέως αναπτυσσόμενα πεδία λογισμικού, από βιομηχανικής άποψης. Η πιο δημοφιλής κατηγορία τρισδιάστατων εφαρμογών θεωρούνται τα παιχνίδια για ηλεκτρονικούς υπολογιστές. Το 2007, τα έσοδα της βιομηχανίας παραγωγής ηλεκτρονικών παιχνιδιών ανήλθαν περίπου στα 60 δισεκατομμύρια δολάρια, σχεδόν ισόποσα προς τα έξοδα για έρευνα του Υπουργείου Άμυνας των Η.Π.Α. [220]. Επιπλέον, η βιομηχανία παιχνιδιών είναι τόσο καινοτόμος, ώστε σε πολλές περιπτώσεις τα αποτελέσματα της προόδου στην τεχνολογία υλικού και λογισμικού εφαρμόζονται στα παιχνίδια πριν υιοθετηθούν από άλλα επιστημονικά πεδία [126 και 171]. Επιπρόσθετα, οι νέοι σήμερα περνούν περισσότερο χρόνο παίζοντας στον υπολογιστή παρά ακούγοντας μουσική ή παρακολουθώντας τηλεόραση. Τέλος, σε ότι αφορά τις κοινότητες ανοιχτού λογισμικού, τα παιχνίδια φαίνεται να ακμάζουν [189]. Η δημιουργία παιχνιδιών για υπολογιστές είναι μία πολύπλοκη διαδικασία που χρειάζεται τη συμμετοχή εξαιρετικά ικανών επαγγελματιών από ένα ευρύ φάσμα της επιστήμης των υπολογιστών [60]. Τα παιχνίδια για ηλεκτρονικούς υπολογιστές απαιτούν υψηλής ποιότητας επιδόσεις σε πραγματικό χρόνο. Τα κυριότερα ζητήματα επίδοσης αφορούν το ρυθμό μετάδοσης καρέ, την αναπαραγωγή ήχου σε πραγματικό χρόνο και την ανταπόκριση του 28

επεξεργαστή. Ο προγραμματισμός ενός παιχνιδιού είναι τόσο πολύπλοκος, ώστε απαιτούνται χιλιάδες γραμμές κώδικα για την υλοποίηση ενός εμπορικά βιώσιμου παιχνιδιού. Το μέγεθος τέτοιου είδους προγραμμάτων, σε συνδυασμό με την εξελισσόμενη φύση του λογισμικού, απαιτεί ευέλικτη και διατηρήσιμη σχεδίαση, και ξεκάθαρη τεκμηρίωση, ούτως ώστε να υπάρχει κατανόηση των προδιαγραφών από την ομάδα ανάπτυξης και να διευκολύνεται η μελλοντική ανάπτυξη. Συνεπώς, οι προγραμματιστές παιχνιδιών οφείλουν να εφαρμόζουν συγκεκριμένες τεχνικές της τεχνολογίας λογισμικού για να πετύχουν υψηλά επίπεδα ποιότητας. Ο McShaffry [150] παρουσιάζει την προσέγγιση ενός επαγγελματία για τα ζητήματα που διαφοροποιούν την ανάπτυξη λογισμικού για παιχνίδια από την κλασική ανάπτυξη λογισμικού. Πιο συγκεκριμένα, τα παιχνίδια είναι προϊόντα με πολύ περιορισμένο κύκλο ζωής σε σχέση με τα συμβατικά προϊόντα λογισμικού. Τα παιχνίδια συνήθως αναπτύσσονται σε μικρότερο χρονικό διάστημα και όλες οι φάσεις του κύκλου ζωής συρρικνώνονται. Επιπρόσθετα, η κύρια δραστηριότητα συντήρησης για τα παιχνίδια υπολογιστών είναι η αποσφαλμάτωση, καθώς για τα περισσότερα παιχνίδια ο μέσος όρος παραμονής στην αγορά είναι έξι μήνες και στη συνέχεια κυκλοφορεί η νέα έκδοση. Στο μεσοδιάστημα, η κύρια δραστηριότητα συντήρησης είναι η αποσφαλμάτωση, η οποία συνήθως παρέχεται χωρίς χρέωση στους τελικούς χρήστες. Συνεπώς, οι εταιρίες ανάπτυξης λογισμικού για παιχνίδια δεν έχουν έσοδα από υπηρεσίες συντήρησης [150]. Παρ όλα αυτά, τα επιτυχημένα παιχνίδια συνήθως αποτελούν τη βάση για μία ή περισσότερες συνέχειες. Αν η επόμενη έκδοση περιλαμβάνει αναθεωρήσεις της διασύνδεσης χρήστη ή του χειρισμού, που έχουν προέλθει από σχόλια των χρηστών, αυτό αποτελεί μία μορφή τελειοποιητικής συντήρησης (perfective maintenance). Η διαδικασία αυτή αποφέρει άμεσα κάποιο εισόδημα στην εταιρία ανάπτυξης του λογισμικού η οποία παρέχει μία επιπρόσθετη ροή εσόδων στους προγραμματιστές παιχνιδιών. Επιπλέον, ένα ακόμη ενδιαφέρον χαρακτηριστικό των παιχνιδιών είναι το γεγονός ότι σε πολλές περιπτώσεις οι εταιρίες ανάπτυξης παιχνιδιών κυκλοφορούν στην αγορά εμπορεύσιμες προεκτάσεις. Οι κυκλοφορίες αυτές χρησιμοποιούν τον ίδιο πυρήνα του παιχνιδιού, ώστε η «νέα ιστορία» να ειπωθεί μέσα από την «παλιά» μηχανή παιχνιδιών (game engine), η οποία έχει ήδη αγοραστεί από τον τελικό χρήστη. Η διαδικασία αυτή μπορεί επίσης να χαρακτηριστεί ως προσαρμοστική συντήρηση (adaptive maintenance). Η απώλεια εισοδήματος που προκύπτει στη φάση της συντήρησης ισοσκελίζεται με τις προεκτάσεις των παιχνιδιών και τις εκστρατείες μάρκετινγκ που στοχεύουν στην πώληση παλιών τίτλων παιχνιδιών σε χαμηλή τιμή. Οι υπερβολικές απαιτήσεις του τομέα μάρκετινγκ στη βιομηχανία παιχνιδιών για υπολογιστές κάποιες φορές αναγκάζουν τις εταιρίες ανάπτυξης σε περαιτέρω συρρίκνωση των χρονοδιαγραμμάτων ανάπτυξής τους. Συχνά τα χρονοδιαγράμματα δεν τηρούνται και έτσι προκύπτουν θέματα κακής εκτίμησης της ημερομηνίας κυκλοφορίας των νέων προϊόντων. Λαμβάνοντας υπόψη όλα τα παραπάνω, 29

συμπεραίνεται ότι η διαχείριση έργου λογισμικού παιχνιδιών για υπολογιστές είναι μια πολύπλοκη διαδικασία που διαφέρει από την παραδοσιακή διαχείριση έργων λογισμικού. 1.5 Κίνητρο Στην εποχή της οικονομικής κρίσης, οι εταιρίες ανάπτυξης λογισμικού επιθυμούν να μειώσουν το κόστος λειτουργίας τους, χωρίς όμως να επηρεαστεί ο χρόνος παράδοσης των προϊόντων τους στην αγορά και χωρίς να μειώσουν την ποιότητα παροχής υπηρεσιών προς τους πελάτες τους. Αρκετές μικρομεσαίες επιχειρήσεις κατασκευής λογισμικού (SMEs) χάνουν πελάτες λόγω της αδυναμίας τους να τροποποιήσουν το ήδη υπάρχον λογισμικό τους, εξαιτίας της προσπάθειας που αφιερώνεται στην αποσφαλμάτωση προηγούμενων εκδόσεων. Επιπλέον, υπάρχουν αρκετές κατηγορίες λογισμικού, όπως τα παιχνίδια, των οποίων η βιομηχανία βασίζεται εξαιρετικά στις αναβαθμίσεις και τη διανομή νέων εκδόσεων με μικρές αλλαγές σε σχέση με την προηγούμενη. Όλες οι προαναφερθείσες λειτουργίες αποτυπώνουν τις κύριες λειτουργίες συντήρησης σε μια τυπική εταιρία λογισμικού. Η μέση προσπάθεια μιας εταιρίας στη συντήρηση αγγίζει το 50% της συνολικής προσπάθειας της εταιρίας. Επομένως, αναμενόμενο είναι το γεγονός ότι εάν οι εταιρίες παράγουν πιο συντηρήσιμο λογισμικό, θα έχουν την ευχέρεια να επενδύσουν περισσότερο χρόνο στη κατασκευή νέων προϊόντων, χωρίς να χάνουν έσοδα από την εξυπηρέτηση των ήδη υπαρχόντων πελατών τους, μέσω αναβαθμίσεων και εξατομικεύσεων προϊόντων (software customization). Ένα από τα κύρια χαρακτηριστικά που επηρεάζουν τη συντηρησιμότητα ενός προϊόντος είναι η δομική του ποιότητα. Η δομική ποιότητα ενός προϊόντος λογισμικού βασίζεται σε χαρακτηριστικά όπως η κατανοησιμότητα, η επεκτασιμότητα και η ευελιξία, τα οποία είναι πολύ σημαντικά κατά την συντήρηση του λογισμικού. Τα πρότυπα σχεδίασης (design patterns) έχουν προταθεί σαν κοινές λύσεις σε κοινά προβλήματα σχεδίασης λογισμικού. Μέχρι σήμερα, η μελέτη των προτύπων έδειξε ότι τα πρότυπα δεν μπορούν να αξιολογηθούν ενιαία ως προς την επίδραση τους στη δομική ποιότητα. Ως κύριος παράγοντας για το αν τα πρότυπα έχουν θετική ή αρνητική επίδραση έχει προταθεί η εμπειρία των προγραμματιστών, η διαισθητική άποψη του σχεδιαστή για το εάν στο πρόβλημα ταιριάζει το πρότυπο κ.ά. Μία σύνοψη των εμπειρικών μελετών στο αντικείμενο, αποδεικνύει ότι οι ερευνητές έχουν εντοπίσει αρκετά στιγμιότυπα προτύπων που δείχνουν διαφορετική επίδραση των προτύπων, ακόμη και στο ίδιο χαρακτηριστικό. Για παράδειγμα, το πρότυπο Επισκέπτης (Visitor) έχει προταθεί από δύο μελέτες ως θετικά συσχετισμένο με την συντηρησιμότητα, ενώ από δυο άλλες ως αρνητικά. Το ερώτημα που εύλογα προκύπτει από την παραπάνω διαπίστωση, και αποτελεί το κύριο κίνητρο της διατριβής, είναι το εξής: «Υπάρχει κάποιος αντικειμενικός κανόνας με τον οποίο ο σχεδιαστής μπορεί να επιλέξει αν θα χρησιμοποιήσει ένα πρότυπο σχεδίασης;» 30

1.6 Συνεισφορά της Διατριβής Η διατριβή προσπαθώντας να απαντήσει στο παραπάνω ερώτημα, μελέτησε την επίδραση των προτύπων σχεδίασης από διάφορες οπτικές και με διάφορες μεθοδολογικές προσεγγίσεις. Αρχικά, η διατριβή καταγράφει τη μέχρι τώρα ερευνητική δραστηριότητα σχετικά με την επίδραση των προτύπων σχεδίασης στη εσωτερική και την εξωτερική ποιότητα του λογισμικού και εξάγει ενδιαφέροντα συμπεράσματα για ανοιχτά πεδία έρευνας, καθώς και τις ανάγκες της συγκεκριμένης ερευνητικής περιοχής. Στη συνέχεια μελετά, κάνοντας χρήση εμπειρικών μεθοδολογιών, το βαθμό χρήσης των προτύπων σχεδίασης με σκοπό την επικύρωση της χρησιμότητας της διατριβής, καθώς αναδεικνύει την εκτενή χρήση των προτύπων σχεδίασης στην ανάπτυξη λογισμικού. Επιπλέον, αξιολογείται εμπειρικά η επίδραση των προτύπων σχεδίασης στην επαναχρησιμοποιησιμότητα του λογισμικού, ένα χαρακτηριστικό ποιότητας από τη πλευρά των κατασκευαστών λογισμικού. Επιπρόσθετα, το εμπειρικό κομμάτι της διατριβής, αξιολογεί την επίδραση της χρήσης προτύπων σχεδίασης στον αριθμό των λαθών και το ρυθμό αποσφαλμάτωσης του λογισμικού, ένα χαρακτηριστικό ποιότητας από τη πλευρά των χρηστών λογισμικού. Βάσει των αποτελεσμάτων των εμπειρικών μελετών, καθώς και από την μελέτη της αρθρογραφίας, προκύπτει η ανάγκη εύρεσης κανόνων που θα καθοδηγούν τους σχεδιαστές λογισμικού στη χρήση των προτύπων σχεδίασης. Για το λόγο αυτό, η διατριβή εισάγει μια νέα μεθοδολογία σύγκρισης σχεδίων λογισμικού και την εφαρμόζει στα πρότυπα σχεδίασης. Από τα αποτελέσματα της εφαρμογής της μεθοδολογίας, προκύπτει το μέγεθος του στιγμιοτύπου κάθε προτύπου σχεδίασης, το οποίο μπορεί να χρησιμοποιηθεί ως αντικειμενικός παράγοντας, επιλογής ή όχι της χρήσης του προτύπου σχεδίασης. Τα αποτελέσματα της έρευνας ενσωματώθηκαν σε δύο αυτοματοποιημένα εργαλεία υποβοήθησης της χρήσης των προτύπων σχεδίασης. Συνοψίζοντας, μέσω της παρούσας διδακτορικής διατριβής αναγνωρίστηκαν και αποδείχθηκαν οι παρακάτω καινοτόμες παρατηρήσεις ως προς τη μελέτη των προτύπων σχεδίασης: η επίδραση των προτύπων σχεδίασης στη ποιότητα του λογισμικού διέπεται από αντικειμενικούς κανόνες η επίδραση ενός προτύπου στη ποιότητα δεν εξαρτάται αποκλειστικά από τις ικανότητες του σχεδιαστή που τα εφαρμόζει το μέγεθος του προτύπου (πλήθος κλάσεων που συμμετέχουν στο πρότυπο) αποτελεί κρίσιμο παράγοντα για την επίδραση των προτύπων στην ποιότητα του λογισμικού υπάρχουν και αναγνωρίζονται όρια μεγέθους για κάθε πρότυπο σχεδίασης τα οποία όταν ξεπεραστούν το πρότυπο έχει θετική επίδραση στη ποιότητα. 31

1.7 Μεθοδολογία Οι μέθοδοι έρευνας που χρησιμοποιήθηκαν για την διενέργεια της διδακτορικής διατριβής, παρουσιάζονται σε αυτή την ενότητα. Αρχικά, με στόχο την όσο το δυνατόν καλύτερη κατανόηση των εννοιών που θα μας απασχολήσουν εκτελέστηκαν δυο συστηματικές ανασκοπήσεις της βιβλιογραφίας. Στη συνέχεια, διενεργήθηκαν εμπειρικές μελέτες και πιο συγκεκριμένα μελέτες περίπτωσης. Τέλος, εισάχθηκε και εφαρμόστηκε μια αναλυτική μεθοδολογία με σκοπό την σύγκριση της ποιότητας αντικειμενοστρεφών σχεδίων. 1.7.1 Μεθοδολογία Συστηματικής Ανασκόπησης της Βιβλιογραφίας Στο [39] προτείνεται ότι οι συστηματικές ανασκοπήσεις της βιβλιογραφίας πρέπει αποτελούνται από τρία βήματα: το σχεδιασμό, τη διενέργεια και την τεκμηρίωση της ανασκόπησης. Κατά τη φάση του σχεδιασμού, πρέπει να καθοριστούν τα ερευνητικά ερωτήματα, να αναπτυχθεί ένα πρωτόκολλο ανασκόπησης και στο τέλος να επικυρωθεί. Ο καθορισμός των ερευνητικών ερωτημάτων αποτελεί το πιο κρίσιμο στοιχείο της συστηματικής ανασκόπησης. Τα ερευνητικά ερωτήματα χρησιμοποιούνται για τον εντοπισμό των λέξεων κλειδιά που πρέπει να χρησιμοποιηθούν για την αυτόματη αναζήτηση των σχετικών ερευνών. Οι λέξεις αυτές, ουσιαστικά καθορίζουν τα δεδομένα που πρέπει να εξαχθούν από κάθε πρωταρχική μελέτη και περιορίζουν τη συνολική διαδικασία. Τα ερωτήματα της έρευνας είναι το κομμάτι του πρωτοκόλλου που δεν μπορεί να τροποποιηθεί μετά την αποδοχή του πρωτοκόλλου. Το πρωτόκολλο ανασκόπησης που αναπτύσσεται δίνει πληροφορίες για το σχεδιασμό της ανασκόπησης, συμπεριλαμβάνοντας την προδιαγραφή της διαδικασίας που θα ακολουθηθεί, τις συνθήκες και τις μετρικές ποιότητας που θα εφαρμοστούν όταν επιλεγεί μια πρωτογενής μελέτη και την κατανομή ορισμένων ενεργειών. Η επικύρωση του πρωτοκόλλου θεωρείται απαραίτητη, αφού το πρωτόκολλο αποτελεί κρίσιμο στοιχείο της ανασκόπησης. Στη φάση της διενέργειας της ανασκόπησης, και εφόσον το πρωτόκολλο έχει τελειοποιηθεί, πρέπει να καταστρωθεί μια στρατηγική έρευνας για να εντοπιστούν οι σχετικές έρευνες που έχουν διεξαχθεί. Αμέσως μετά πρέπει να επιλεχθούν όσες κρίνονται κατάλληλες. Η διαδικασία επιλογής αποτελείται συνήθως από δυο στάδια. Αρχικά εξετάζεται ο τίτλος και στη συνέχεια η περίληψη των άρθρων που προκύπτουν από την αρχική αναζήτηση. Τα άρθρα που κρίνεται ότι δεν είναι σχετικά απορρίπτονται. Στην επόμενη φάση της διαδικασίας, εξετάζεται ολόκληρο το κείμενο των άρθρων που δεν έχουν απορριφθεί. Η ανασκόπηση γίνεται με βάση τα κριτήρια συμπερίληψης ή αποκλεισμού των άρθρων. Έπειτα, πρέπει να αξιολογηθεί η ποιότητα των ερευνών, προκειμένου να ελαχιστοποιηθούν οι πιθανές προκαταλήψεις και να μεγιστοποιηθεί η εσωτερική και εξωτερική εγκυρότητα. Τέλος, πρέπει να εξαχθούν τα απαιτούμενα δεδομένα ούτως ώστε να καταγραφούν με ακρίβεια οι πληροφορίες που θέλουν να αποσπάσουν οι ερευνητές από τις πρωτογενείς μελέτες και να ανασυντεθούν με τρόπο τέτοιο, ώστε να απαντούν στα ερωτήματα της έρευνας. 32

Η τελευταία φάση μιας συστηματικής ανασκόπησης είναι η διαδικασία της τεκμηρίωσης, κατά την οποία μετά την ολοκλήρωση της συστηματικής ανασκόπησης της βιβλιογραφίας, γράφεται μια λεπτομερής αναφορά για την ανασκόπηση και έπειτα αξιολογείται. Σύμφωνα με τα [117 και 118] το σχεδιάγραμμα της ανασκόπησης αποτελείται από έξι μέρη: (α) ορισμό των ερευνητικών ερωτημάτων, (β) ορισμό της διαδικασίας αναζήτησης, (γ) ορισμό των κριτηρίων συμπερίληψης και αποκλεισμού, (δ) ορισμό της ποιοτικής αξιολόγησης, (ε) ορισμό της διαδικασίας συλλογής δεδομένων και (στ) ορισμό της ανάλυσης δεδομένων. 1.7.2 Αναλυτική Μεθοδολογία Σύμφωνα με το [93], υπάρχουν τρεις βασικές ερευνητικές μέθοδοι, η επιστημονική (scientific), η μηχανική (engineering), η εμπειρική (empirical) και η αναλυτική (analytical). Η επιστημονική μέθοδος παρατηρεί το περιβάλλον, προτείνει ένα μοντέλο ή μια θεωρία συμπεριφοράς, μετράει και αναλύει, επαληθεύει τις υποθέσεις του μοντέλου ή της θεωρίας και, αν είναι δυνατόν, επαναλαμβάνεται. Η μηχανική μέθοδος, παρατηρεί ήδη υπάρχουσες λύσεις, προτείνει βελτιωμένες λύσεις, χτίζει ή κατασκευάζει, μετρά και αναλύει, επαναλαμβάνει μέχρι να μην είναι δυνατή η περαιτέρω βελτίωση. Η εμπειρική μέθοδος, προτείνει ένα μοντέλο, το μελετά στατιστικά ή μέσω άλλων μεθόδων, το εφαρμόζει σε πραγματικές περιπτώσεις, μετρά και αναλύει, επικυρώνει το μοντέλο και επαναλαμβάνει. Τέλος, η αναλυτική μέθοδος, προτείνει μια τυπική θεωρία ή σύνολο αξιωμάτων, αναπτύσσει μια θεωρία, εξάγει αποτελέσματα και, αν είναι δυνατόν, τα συγκρίνει με εμπειρικές παρατηρήσεις. Στην πληροφορική, οι αναλυτικές μέθοδοι εμφανίζονται ως μαθηματικές μελέτες ενός προβλήματος ή μιας λύσης και εξάγουν αναλυτικά αποτελέσματα τα οποία μπορούν να υποστηρίξουν μια τυπική (formal) θεωρία. Μεθοδολογίες αυτού του τύπου είναι οι πιο συχνές στην ευρύτερη ερευνητική περιοχή της πληροφορικής, πιθανώς λόγω του μαθηματικού υπόβαθρου των περισσότερων επιστημόνων πληροφορικής σε τυπικές θεωρίες και αξιώματα. Παρ όλα αυτά, ειδικά στην τεχνολογία λογισμικού, τέτοιου τύπου έρευνες δεν παρουσιάζονται συχνά. Επίσης, εξαιρετικά σπάνια είναι η ύπαρξη μελετών που συνδυάζουν αναλυτικά αποτελέσματα που συγκρίνονται και επικυρώνονται από εμπειρικές μελέτες. 1.7.3 Εμπειρικές Μελέτες Σύμφωνα με το [212], υπάρχουν τρεις βασικές προσεγγίσεις εμπειρικής έρευνας: οι μελέτες πεδίου, οι μελέτες περίπτωσης και τα πειράματα. Η επιλογή της προσέγγισης που θα ακολουθηθεί γίνεται συνήθως λαμβάνοντας υπόψη τη φύση και το αντικείμενο της εκάστοτε έρευνας. Η τεχνική των μελετών περίπτωσης χρησιμοποιείται για την παρακολούθηση έργων, ενεργειών ή εργασιών. Καθ όλη τη διάρκεια της μελέτης συλλέγονται δεδομένα για ένα συγκεκριμένο σκοπό τα οποία συνήθως περνούν από στατιστική ανάλυση για την εξαγωγή αποτελεσμάτων. Τα πειράματα διεξάγονται συνήθως σε εργαστηριακό περιβάλλον, που 33

παρέχει υψηλά επίπεδα ελέγχου. Τα υποκείμενα του πειράματος που έχουν επιλεγεί με βάση ορισμένα κριτήρια, εξετάζονται τυχαία σε κάποια καθήκοντα. Έπειτα ακολουθεί στατιστική ανάλυση των αποτελεσμάτων του πειράματος, ενώ υπολογίζεται και ο βαθμός χειραγώγησης ορισμένων μεταβλητών. Η διαφορά μεταξύ μιας μελέτης περίπτωσης και ενός πειράματος είναι ότι το δείγμα των μεταβλητών που χρησιμοποιούνται σε ένα πείραμα μπορεί να χειραγωγηθεί, ενώ σε μια μελέτη περίπτωσης το δείγμα των μεταβλητών προέρχεται από την αναπαράσταση μιας πραγματικής κατάστασης. Τέλος, μια μελέτη πεδίου, χρησιμοποιείται συνήθως για την διεξαγωγή μιας αναδρομικής εξέτασης, όταν για παράδειγμα ένα εργαλείο ή μια τεχνική χρησιμοποιείται για ένα χρονικό διάστημα. Η μελέτη γίνεται με χρήση ερωτηματολογίων που διανέμονται σε ένα αντιπροσωπευτικό δείγμα πληθυσμού που θέλουμε να μελετήσουμε. Τα αποτελέσματα της έρευνας αναλύονται και στην τελική φάση γενικεύονται για τον πληθυσμό απ όπου προερχόταν το δείγμα. Μελέτες Περίπτωσης Μια μελέτη περίπτωσης συντάσσεται για να μελετήσει μια οντότητα ή ένα φαινόμενο μέσα σε συγκεκριμένα χρονικά πλαίσια [212]. Ο ερευνητής συγκεντρώνει λεπτομερείς πληροφορίες, εφαρμόζοντας διάφορες διαδικασίες συλλογής πληροφοριών. Οι μελέτες περίπτωσης είναι ιδανικές για την βιομηχανική αξιολόγηση μεθόδων και εργαλείων της μηχανικής λογισμικού, γιατί μπορούν να αποφύγουν κλιμακωτά αυξανόμενα προβλήματα. Ένα πλεονέκτημα των μελετών περίπτωσης είναι ότι προσφέρουν ευκολία στη φάση του σχεδιασμού και προγραμματισμού των εργασιών, ενώ μειονεκτήματα είναι ότι τα αποτελέσματα που προκύπτουν είναι δύσκολο να γενικευθούν και ακόμα δυσκολότερο να αποκωδικοποιηθούν. Στην περίπτωση που η επίδραση μιας διαδικασίας αλλαγής είναι πολύ διαδεδομένη, τότε μια μελέτη περίπτωσης είναι πιο κατάλληλη. Αυτό συμβαίνει επειδή η επίδραση μιας αλλαγής μπορεί να αξιολογηθεί μόνο σε υψηλό επίπεδο αφαίρεσης, γιατί μια διαδικασία τροποποίησης περιλαμβάνει μικρότερες και πιο λεπτομερείς αλλαγές πέραν της διαδικασίας ανάπτυξης και επειδή τα αποτελέσματα μιας αλλαγής δεν μπορούν πάντα να είναι άμεσα ορατά. Η έρευνα μέσω μελετών περίπτωσης είναι μια καθιερωμένη μέθοδος που χρησιμοποιείται για εμπειρικές μελέτες σε διάφορες επιστήμες. Στα πλαίσια της μηχανικής λογισμικού, οι μελέτες περίπτωσης χρησιμοποιούνται όχι μόνο για να αξιολογήσουν πώς και γιατί συμβαίνουν συγκεκριμένα φαινόμενα, αλλά και για να αξιολογήσουν διαφορές, όπως για παράδειγμα μεταξύ δυο σχεδιαστικών μεθόδων. Μεθοδολογία Διενεργείας Μελέτης Περίπτωσης Σύμφωνα με το [120] τα βήματα που απαιτούνται για να συντάξει κανείς μια μελέτη περίπτωσης περιλαμβάνουν: (α) ορισμό μιας υπόθεσης, (β) επιλογή ορισμένων εφαρμογών, (γ) επιλογή της μεθόδου σύγκρισης, (δ) ελαχιστοποίηση των συγκεχυμένων παραγόντων 34