From b190c0fe729ace3a84cde71b1b45e440040b21a8 Mon Sep 17 00:00:00 2001 From: "alextselegidis@gmail.com" Date: Mon, 4 Nov 2013 13:50:29 +0000 Subject: [PATCH] * Syntactic corrections in thesis. --- doc/thesis/includes/conclusions.tex | 18 ++++++++++-------- doc/thesis/includes/implementation.tex | 6 +++--- doc/thesis/includes/unit-testing.tex | 16 ++++++++-------- doc/thesis/thesis.pdf | Bin 1198188 -> 1198723 bytes 4 files changed, 21 insertions(+), 19 deletions(-) diff --git a/doc/thesis/includes/conclusions.tex b/doc/thesis/includes/conclusions.tex index befb2f25..3fd9c4a1 100644 --- a/doc/thesis/includes/conclusions.tex +++ b/doc/thesis/includes/conclusions.tex @@ -1,27 +1,29 @@ \chapter{Συμπεράσματα} -Το αποτέλεσμα της εκπόνησης της εργασίας αυτής είναι ένα πλήρης σύστημα διαχείρισης ραντεβού, το οποίο μπορεί να παραμετροποιηθεί επαρκώς έτσι ώστε να καλύψει τις ανάγκες οποιασδήποτε επιχείρισης ανεξαρτήτου ειδικότητας και μεγέθους. Ο αρχικός σχεδιασμός αποδείχθηκε σωστός και έτσι το τελικό προϊόν πληροί τις απαιτήσεις για τις οποίες αναπτύχθηκε. +Το αποτέλεσμα της εκπόνησης της εργασίας είναι ένα πλήρης σύστημα διαχείρισης ραντεβού το οποίο μπορεί να παραμετροποιηθεί επαρκώς έτσι ώστε να καλύψει τις ανάγκες οποιασδήποτε επιχείρισης ανεξαρτήτου ειδικότητας και μεγέθους. Ο αρχικός σχεδιασμός αποδείχθηκε σωστός και έτσι το τελικό προϊόν λογισμικού πληροί τις απαιτήσεις για τις οποίες αναπτύχθηκε. \section{Προβλήματα} +Σε αυτήν την ενότητα περιγράφονται τα σημαντικότερα προβλήματα που αντιμετωπίστηκαν κατά την διάρκεια της ανάπτυξης του Easy!Appointments. Επεξηγούνται οι αποφάσεις που πάρθηκαν στην κάθε περίπτωση και αναλύονται οι λύσεις που χρησιμοποιήθηκαν. + \subsection{Διαχείριση χρόνου} -Σημαντικότερο πρόβλημα σχετικά με την υλοποίηση της εφαρμογής ήταν η χρονική καθυστέρηση μιας και ανάμεσα στην ανάληψη της εργασίας και την περαίωση της, πραγματοποιήθηκε η πρακτική άσκηση σε εταιρεία πληροφορικής, καθώς και εργασία εκτός σχολής με άλλες εταιρείες πληροφορικής. Οι εξωτερικές υποχρεώσεις αυτές αποσπούσαν την συνεχή και ομαλή ανάπτυξη, κάτι που συνεχώς διασπούσε τον ειρμό και τον δημιουργικό οίστρο. Συμπέρασμα αυτού του σημαντικού προβλήματος είναι ότι θα πρέπει να γίνεται σαφής και ορθός προγραμματισμός του χρόνου υλοποίησης ενός έργου γιατί διαφορετικά οι πιθανότητες για χαμηλότερη ποιότητα υπηρεσίας ή ακόμα και αποτυχίας του έργου αυξάνονται εκθετικά. +Σημαντικότερο πρόβλημα σχετικά με την υλοποίηση της εφαρμογής ήταν η χρονική καθυστέρηση μιας και ανάμεσα στην ανάληψη της εργασίας και την περαίωση της, πραγματοποιήθηκε η πρακτική άσκηση σε εταιρεία πληροφορικής καθώς και εργασία εκτός σχολής με άλλες εταιρείες του ίδιου τομέα. Οι εξωτερικές υποχρεώσεις αυτές αποσπούσαν την συνεχή και ομαλή ανάπτυξη, κάτι που συνεχώς διασπούσε τον ειρμό και τον δημιουργικό οίστρο. Συμπέρασμα αυτού του σημαντικού προβλήματος είναι ότι θα πρέπει να γίνεται σαφής και ορθός προγραμματισμός του χρόνου υλοποίησης ενός έργου γιατί διαφορετικά οι πιθανότητες για χαμηλότερη ποιότητα υπηρεσίας ή ακόμα και αποτυχίας του έργου αυξάνονται εκθετικά. Σε αυτό μπορεί να συντελέσει και η πληθώρα των εφαρμογών οι οποίες αποσκοπούν στην αποδοτικότερη διαχείριση έργων λογισμικού οι οποίες είναι διαθέσιμες είτε δωρεάν, είτε έναντι αμοιβής. \subsection{Συγχρονισμός δεδομένων με το Google Calendar} -Όσον αφορά την συνεργασία του συστήματος με την υπηρεσία Google Calendar, αλλά και γενικότερα με άλλες πιθανές υπηρεσίες το ζήτημα παραμένει στο πως θα παραμείνουν τα δεδομένα ακέραια και ενημερωμένα και στα δύο συστήματα, όταν δεν υπάρχει ένα κοινό μέσο αποθήκευσης. Το θέμα γιγαντώνεται μάλιστα όταν δεν υπάρχει πρόσβαση στον κώδικα του ενός από τα δύο συστήματα έτσι ώστε να δημιουργηθεί μια "γέφυρα δεδομένων". Για την επίλυση αυτού του θέματος ήταν αναγκαίο να δημιουργηθεί ένας αλγόριθμος συγχρονισμού ο οποίος θα ενεργοποιούνταν από την πλευρά του Easy!Appointments και θα αναλάμβανε την ενημέρωση και τον δύο συστημάτων με τα τελευταία δεδομένα. Για αυτόν τον σκοπό θα έπρεπε να καταγραφούν και να υλοποιηθούν κάποιοι κανόνες συγχρονισμού οι οποίοι θα μετέφεραν επιτυχώς τα ραντεβού αμφίδρομα και στα δύο συστήματα. Στις περιπτώσεις όπου η μεταφορά αυτή θα ήταν αδύνατη (σύγκρουση δεδομένων) ο χρήστης θα έπρεπε να αποφασίσει ποια εκδοχή των δεδομένων θα υπερισχύσει στο τέλος. +Όσον αφορά την συνεργασία του συστήματος με την υπηρεσία Google Calendar αλλά και γενικότερα με άλλες πιθανές υπηρεσίες το ζήτημα παραμένει στο πως θα παραμείνουν τα δεδομένα ακέραια και ενημερωμένα και στα δύο συστήματα, όταν δεν υπάρχει ένα κοινό μέσο αποθήκευσης. Το θέμα γιγαντώνεται μάλιστα όταν δεν υπάρχει πρόσβαση στον κώδικα του ενός από τα δύο συστήματα έτσι ώστε να δημιουργηθεί μια "γέφυρα δεδομένων". Για την επίλυση αυτού του θέματος ήταν αναγκαίο να δημιουργηθεί ένας αλγόριθμος συγχρονισμού ο οποίος θα ενεργοποιούνταν από την πλευρά του Easy!Appointments και θα αναλάμβανε την ενημέρωση και τον δύο συστημάτων με τα τελευταία δεδομένα. Για αυτόν τον σκοπό θα έπρεπε να καταγραφούν και να υλοποιηθούν κάποιοι κανόνες συγχρονισμού οι οποίοι θα μετέφεραν επιτυχώς τα ραντεβού αμφίδρομα και στα δύο συστήματα. Στις περιπτώσεις όπου η μεταφορά αυτή θα ήταν αδύνατη (σύγκρουση δεδομένων) ο χρήστης θα έπρεπε να αποφασίσει ποια εκδοχή των δεδομένων θα υπερισχύσει στο τέλος. \subsection{Διαχωρισμός δικαιωμάτων χρηστών} -Ένα ακόμα πρόβλημα που αντιμετωπίστηκε κατά την διάρκεια την ανάπτυξης του έργου ήταν ο διαχωρισμός των δικαιωμάτων των χρηστών μέσα στο σύστημα. Ο κάθε χρήστης αναλόγως το είδος του (διαχειριστής, πάροχως, γραμματέας) έχει διαφορετικές δυνατότητες και δικαιώματα στα δεδομένα που αποθηκεύονται από το σύστημα. Αυτό συμβαίνει γιατί στις περισσότερες περιπτώσεις θα πρέπει να τηρηθεί η ιεραρχία της επιχείρησης, αλλά και επίσης γιατί θα πρέπει να διασφαλιστεί η ακεραιότητα των δεδομένων από τυχόν εσφαλμένες ενέργειες χρηστών σε βασικές ρυθμίσεις του συστήματος. Για τις κυριότερες ρυθμίσεις απαιτούνται τα δικαιώματα διαχειριστή και έτσι το σύστημα χρειάζεται απαραιτήτως πάντα έναν χρήστη διαχειριστή (ο χρήστης που δημιουργείται κατά την εγκατάσταση είναι ουσιαστικά ο πρώτος διαχειριστής της εφαρμογής). Για να λυθεί αυτό το πρόβλημα η εγγραφή του κάθε χρήστης στην βάση δεδομένων συνδέεται με έναν ρόλο, ο οποίος περιέχει τα δικαιώματα που του αντιστοιχούν. Έτσι για παράδειγμα ένας χρήστης που προορίζεται για πάροχος υπηρεσίας, θα έχει τα δικαιώματα που αντιστοιχούν στον ρόλο "Πάροχος Υπηρεσίας", όπως αυτά είναι αποθηκευμένα στην βάση δεδομένων. Έτσι κάθε φορά που συνδέεται ένας χρήστης στο διαχειριστικό κομμάτι της εφαρμογής τα δεδομένα σχετικά με τα δικαιώματα του και τον ρόλο του διαβάζονται από σελίδα σε σελίδα και η εφαρμογή μπορεί και γνωρίζει με ποιόν τρόπο θα πρέπει να εμφανιστούν τα δεδομένα και ποιες ενέργειες είναι διαθέσιμες στην κάθε περίπτωση. +Ένα ακόμα πρόβλημα που αντιμετωπίστηκε κατά την διάρκεια την ανάπτυξης του έργου ήταν ο διαχωρισμός των δικαιωμάτων των χρηστών μέσα στο σύστημα. Ο κάθε χρήστης αναλόγως το είδος του (διαχειριστής, πάροχος, γραμματέας) έχει διαφορετικές δυνατότητες και δικαιώματα στα δεδομένα που αποθηκεύονται από το σύστημα. Αυτό συμβαίνει γιατί στις περισσότερες περιπτώσεις θα πρέπει να τηρηθεί η ιεραρχία της επιχείρησης αλλά και επίσης γιατί θα πρέπει να διασφαλιστεί η ακεραιότητα των δεδομένων από τυχόν εσφαλμένες ενέργειες χρηστών σε βασικές ρυθμίσεις του συστήματος. Για τις κυριότερες ρυθμίσεις απαιτούνται τα δικαιώματα διαχειριστή και έτσι το σύστημα χρειάζεται απαραιτήτως πάντα έναν χρήστη διαχειριστή (ο χρήστης που δημιουργείται κατά την εγκατάσταση είναι ουσιαστικά ο πρώτος διαχειριστής της εφαρμογής). Για να λυθεί αυτό το πρόβλημα η εγγραφή του κάθε χρήστη στην βάση δεδομένων συνδέεται με έναν ρόλο ο οποίος περιέχει τα δικαιώματα που του αντιστοιχούν. Έτσι για παράδειγμα ένας χρήστης που προορίζεται για πάροχος υπηρεσίας, θα έχει τα δικαιώματα που αντιστοιχούν στον ρόλο "Πάροχος Υπηρεσίας" όπως αυτά είναι αποθηκευμένα στην βάση δεδομένων. Έτσι κάθε φορά που συνδέεται ένας χρήστης στο διαχειριστικό κομμάτι της εφαρμογής τα δεδομένα σχετικά με τα δικαιώματα του και τον ρόλο του διαβάζονται από σελίδα σε σελίδα και η εφαρμογή μπορεί και γνωρίζει με ποιόν τρόπο θα πρέπει να εμφανιστούν τα δεδομένα και ποιες ενέργειες είναι διαθέσιμες στην κάθε περίπτωση. \section{Εξέλιξη της εφαρμογής} -Όπως και σε κάθε έργο λογισμικού, υπάρχουν πολλά πράγματα τα οποία μπορούν να εξελιχθούν και να βελτιωθούν, καθώς και δυνατότητες οι οποίες μπορούν να προστεθούν για να κάνουν την εφαρμογή πιο εύχρηστη και αποδοτικότερη. Οι βελτιώσεις αυτές γίνονται στην φάση της συντήρησης και επέκτασης, σταδιακά, με σκοπό την ύπαρξη ενός ενημερωμένου προϊόντος στην αγορά. Με αυτόν τον τρόπο οι εταιρείες θα μπορούν να εμπιστεύονται την εν λόγω εφαρμογή και να την χρησιμοποιούν ως το δικό τους εργαλείο διαχείρισης των ραντεβού. Παρακάτω περιγράφονται κάποια σημεία στα οποία θα μπορούσε να εξελιχθεί μελλοντικά το σύστημα που παράχθηκε. +Όπως και σε κάθε έργο λογισμικού, υπάρχουν πολλά πράγματα τα οποία μπορούν να εξελιχθούν και να βελτιωθούν καθώς και δυνατότητες οι οποίες μπορούν να προστεθούν για να κάνουν την εφαρμογή πιο εύχρηστη και αποδοτικότερη. Οι βελτιώσεις αυτές γίνονται στην φάση της συντήρησης και επέκτασης σταδιακά, με σκοπό την ύπαρξη ενός ενημερωμένου προϊόντος στην αγορά. Με αυτόν τον τρόπο οι εταιρείες θα μπορούν να εμπιστεύονται την εν λόγω εφαρμογή και να την χρησιμοποιούν ως το δικό τους εργαλείο διαχείρισης των ραντεβού. Παρακάτω περιγράφονται κάποια σημεία στα οποία θα μπορούσε να εξελιχθεί μελλοντικά το σύστημα που παράχθηκε. \subsection{Mobile design} -Με την πάροδο του χρόνου όλο και περισσότερες "έξυπνες" συσκευές βρίσκονται στα χέρια των καταναλωτών και έτσι δημιουργείται η ανάγκη για χρήση των διαδικτυακών εφαρμογών από οθόνες που έχουν διαφορετικά μεγέθη οθονών. Εφόσον οι διαστάσεις για τις οθόνες του υπολογιστή έχουν καλυφθεί, το επόμενο βήμα είναι να σχεδιαστεί όλο το σύστημα για κινητές συσκευές και tablet. Με αυτόν τον τρόπο θα μπορούν οι χρήστες του Easy!Appointments να χρησιμοποιούν το σύστημα από το κινητό του πολύ πιο άνετα και έτσι να είναι πάντα ενημερωμένοι σχετικά με τα ραντεβού τους όπου και αν βρίσκονται. Προϋπόθεση για αυτό πάντα είναι μια ενεργή σύνδεση με το διαδίκτυο. Για να υλοποιηθεί αυτή η δυνατότητα θα χρειαστεί να γραφεί CSS κώδικας ο οποίος να εμφανίζει την εφαρμογή διαφορετικά σε κινητές συσκευές. +Με την πάροδο του χρόνου όλο και περισσότερες "έξυπνες" συσκευές βρίσκονται στα χέρια των καταναλωτών και έτσι δημιουργείται η ανάγκη για χρήση των διαδικτυακών εφαρμογών από οθόνες που έχουν διαφορετικά μεγέθη οθονών. Εφόσον η σχεδίαση για όλες τις διαστάσεις οθονών υπολογιστή έχουν καλυφθεί, το επόμενο βήμα είναι να σχεδιαστεί το σύστημα για κινητές συσκευές και tablet. Με αυτόν τον τρόπο θα μπορούν οι χρήστες του Easy!Appointments να χρησιμοποιούν το σύστημα από το κινητό τους πολύ πιο άνετα και έτσι να είναι πάντα ενημερωμένοι σχετικά με τα ραντεβού τους όπου και αν βρίσκονται. Προϋπόθεση για αυτό πάντα είναι μια ενεργή σύνδεση με το διαδίκτυο. Για να υλοποιηθεί αυτή η δυνατότητα θα χρειαστεί να γραφεί CSS κώδικας ο οποίος να εμφανίζει την εφαρμογή διαφορετικά σε κινητές συσκευές. \subsection{Μετάφραση της διεπαφής χρήστη} -Η πρώτη υλοποίηση του συστήματος έχει γίνει εξολοκλήρου στην αγγλική γλώσσα, όπως και με τα περισσότερα συστήματα που απευθύνονται σε ένα ευρύ καταναλωτικό κοινό. Το Easy!Appointments δέχεται κείμενο και σε άλλες γλώσσες (χρησιμοποιείται το encoding UTF-8) αλλά η διεπαφή, τα μηνύματα και τα αντικείμενα ελέγχου είναι όλα στα Αγγλικά. Για να γίνει πιο εύκολη η χρήση της εφαρμογής και από ανθρώπους οι οποίοι δεν είναι τόσο εξοικειωμένοι με αυτήν την γλώσσα θα πρέπει να μεταφραστεί όλο το σύστημα και σε άλλες κοινές γλώσσες. Για να επιτευχθεί αυτό στην συγκεκριμένη περίπτωση θα πρέπει να χρησιμοποιηθεί η ενσωματωμένη τεχνική του CodeIgniter. +Η πρώτη υλοποίηση του συστήματος έχει γίνει εξολοκλήρου στην αγγλική γλώσσα όπως και με τα περισσότερα συστήματα που απευθύνονται σε ένα ευρύ καταναλωτικό κοινό. Το Easy!Appointments δέχεται κείμενο και σε άλλες γλώσσες (χρησιμοποιείται το encoding UTF-8) αλλά η διεπαφή, τα μηνύματα και τα αντικείμενα ελέγχου είναι όλα στα Αγγλικά. Για να γίνει πιο εύκολη η χρήση της εφαρμογής και από ανθρώπους οι οποίοι δεν είναι τόσο εξοικειωμένοι με αυτήν την γλώσσα θα πρέπει να μεταφραστεί όλο το σύστημα και σε άλλες κοινές γλώσσες. Για να επιτευχθεί αυτό στην συγκεκριμένη περίπτωση θα πρέπει να χρησιμοποιηθεί μια συγκεκριμένη τεχνική, όπως ενδεικνύεται από τον ιστότοπο του κατασκευαστή του CodeIgniter. \subsection{Αναφορές δεδομένων} -Το σύστημα μέσω της λειτουργίας του κρατάει διάφορα δεδομένα (ραντεβού, πελάτες, πάροχοι κτλ). Καλό θα ήταν αυτά τα δεδομένα να μπορούν να εξαχθούν με κάποιον τρόπο έτσι ώστε να μπορέσουν να χρησιμοποιηθούν και με άλλους τρόπους. Μια περίπτωση χρήσης θα ήταν η εξαγωγή των σημερινών ραντεβού ενός πάροχου σε μια εκτυπώσιμη αναφορά, έτσι ώστε να μπορεί ο χρήστης να την τυπώσει και να την έχει ως λίστα στο γραφείο. Μια άλλη περίπτωση χρήσης θα ήταν να εκτυπωθούν τα στοιχεία ενός πελάτη, καθώς και το ιστορικό των ραντεβού του. Οι αναφορές αυτές είναι πολύ χρήσιμες γιατί μπορούν να αναδείξουν γρήγορα δεδομένα και μάλιστα σε εκτυπώσιμη μορφή, κάτι που ακόμα χρειάζονται πολλές εταιρείες. +Το σύστημα μέσω της λειτουργίας του κρατάει διάφορα δεδομένα (ραντεβού, πελάτες, πάροχοι κτλ). Καλό θα ήταν αυτά τα δεδομένα να μπορούν να εξαχθούν με κάποιον τρόπο έτσι ώστε να μπορέσουν να χρησιμοποιηθούν και με άλλους τρόπους. Μια περίπτωση χρήσης θα ήταν η εξαγωγή των σημερινών ραντεβού ενός πάροχου σε μια εκτυπώσιμη αναφορά έτσι ώστε να μπορεί ο χρήστης να την τυπώσει και να την έχει ως λίστα στο γραφείο. Μια άλλη περίπτωση χρήσης θα ήταν να εκτυπωθούν τα στοιχεία ενός πελάτη καθώς και το ιστορικό των ραντεβού του. Οι αναφορές αυτές είναι πολύ χρήσιμες γιατί μπορούν να αναδείξουν γρήγορα δεδομένα και μάλιστα σε εκτυπώσιμη μορφή, κάτι που χρειάζονται ακόμα πολλές εταιρείες. \subsection{Στατιστικές πληροφορίες} Μια χρήσιμη μελλοντική δυνατότητα θα ήταν η συλλογή στατιστικών πληροφοριών σχετικά με τα ραντεβού που κλίνονται στο σύστημα. Από αυτήν την διαδικασία θα μπορούσαν να βγουν σημαντικές πληροφορίες όπως το ποια υπηρεσία ή πάροχος προτιμάται πιο συχνά, ποιες μέρες έχουν τα περισσότερα ραντεβού, πόσο συχνά ακυρώνονται τα ραντεβού και σε πόσο χρονικό διάστημα πριν. Αυτές οι πληροφορίες είναι πολύ σημαντικές για μια εταιρεία η οποία λειτουργεί με κρατήσεις ραντεβού γιατί έτσι μπορεί να γνωρίζει με ποιόν τρόπο λειτουργεί το πελατειακό κοινό της και έτσι να λειτουργεί αναλόγως για να παρέχει καλύτερη εξυπηρέτηση. Ένα παράδειγμα θα ήταν η περίπτωση ενός μεγάλου κομμωτηρίου στην οποία οι πελάτες θα κρατούσαν πάρα πολλά ραντεβού το Σάββατο κάθε εβδομάδας, γιατί πιθανόν έχουν περισσότερο χρόνο. Τα στατιστικά (εκτός της πείρας) θα έδειχναν την αυξημένη κίνηση του Σαββάτου και έτσι ο διαχειριστής θα είχε διαθέσιμους όλους του πάροχους προς ραντεβού, για να μπορέσει να καλυφθεί το κοινό όσο καλύτερα γίνεται. diff --git a/doc/thesis/includes/implementation.tex b/doc/thesis/includes/implementation.tex index 81f100d8..9d28605c 100644 --- a/doc/thesis/includes/implementation.tex +++ b/doc/thesis/includes/implementation.tex @@ -119,7 +119,7 @@ Αυτήν την εργασία αναλαμβάνει το επόμενο κομμάτι κώδικα το οποίο χρησιμοποιώντας την βιβλιοθήκη Google API μπορεί να διαβάσει τα συμβάντα τα οποία βρίσκονται στο Google Calendar. Η διαδικασία ξεκινάει με την λήψη αυτών των συμβάντων τα οποία στην συνέχεια εξετάζονται ένα προς ένα για το αν υπάρχουν στο Easy!Appointments. Αν όχι τότε προστίθενται και συγχρονίζονται και στα δύο συστήματα και έτσι διασφαλίζεται η ακεραιότητα των δεδομένων και στα δύο συστήματα (γραμμές 137 - 159). -Τέλος η συνάρτηση επιστρέφει την σταθερά AJAX\_SUCCESS την οποία θα διαβάσει η JavaScript και έτσι να γνωρίζει ότι η διαδικασία έχει ολοκληρωθεί με επιτυχία. Διαφορετικά αν προκύψουν σφάλματα αυτά επιστρέφονται σε JSON μορφή και εμφανίζονται με ένα φιλικό μήνυμα προς τον χρήστη. +Τέλος η συνάρτηση επιστρέφει την σταθερά AJAX\_SUCCESS την οποία θα διαβάσει η JavaScript και έτσι θα γνωρίζει ότι η διαδικασία έχει ολοκληρωθεί με επιτυχία. Διαφορετικά αν προκύψουν σφάλματα αυτά επιστρέφονται σε JSON μορφή και εμφανίζονται με ένα φιλικό μήνυμα προς τον χρήστη. \subsection{Υπολογισμός διαθέσιμων ωρών πάροχου} Ένα κομβικό σημείο στον κώδικα της εφαρμογής είναι ο υπολογισμός των διαθέσιμων ωρών ενός πάρoχου, στις οποίες μπορεί ένας πελάτης να κλείσει ένα ραντεβού για μια υπηρεσία, χωρίς να υπάρχει σύγκρουση με άλλα συμβάντα. Για να επιτευχθεί ο υπολογισμός αυτός χρειάζεται να γίνουν αρκετοί έλεγχοι έτσι ώστε τα αποτελέσματα να είναι σωστά και να μην δημιουργούνται προβλήματα με τα πλάνα των πάροχων υπηρεσιών. Η διαδικασία χωρίζεται σε δύο μεθόδους με την πρώτη να υπολογίζει τα ελεύθερα χρονικά διαστήματα του πάροχου και την δεύτερη να υπολογίζει τις ακριβείς ώρες στις οποίες θα μπορεί ο πελάτης να κλείσει ραντεβού. @@ -132,9 +132,9 @@ \lstinputlisting{snippets/provider_appointment_hours.php} -Η δεύτερη μέθοδος αποτελεί απάντηση σε κλήση της JavaScript με χρήση της τεχνικής AJAX. Όταν ο client καλεί αυτήν την μέθοδο, παρέχει τα στοιχεία του πάροχου, την διάρκεια της επιλεγμένης υπηρεσίας (σε λεπτά) και το αν ο χρήστης επεξεργάζεται το συγκεκριμένο ραντεβού ή όχι (παράμετρος manage\_mode). Αυτό που εκτελείται αρχικά είναι η λήψη των ελεύθερων χρονικών διαστημάτων του πάροχου χρησιμοποιώντας την προαναφερθέντα μέθοδο get\_provider\_available\_time\_periods (γραμμές 30 - 36). +Η δεύτερη μέθοδος αποτελεί απάντηση σε κλήση της JavaScript με χρήση της τεχνικής AJAX. Όταν ο client καλεί αυτήν την μέθοδο, παρέχει τα στοιχεία του πάροχου, την διάρκεια της επιλεγμένης υπηρεσίας (σε λεπτά) και το αν ο χρήστης επεξεργάζεται το συγκεκριμένο ραντεβού ή όχι (παράμετρος manage\_mode). Αυτό που εκτελείται αρχικά είναι η λήψη των ελεύθερων χρονικών διαστημάτων του πάροχου χρησιμοποιώντας την προαναφερθέντα μέθοδο get\_provider\_available\_time\_periods (γραμμές 28 - 34). -Έπειτα θα υπολογιστούν οι διαθέσιμες ώρες στις οποίες θα μπορέσει ο χρήστης να κλείσει ραντεβού. Αυθαίρετα και για λόγους ευχρηστίας έχει τεθεί το χρονικό διάστημα μεταξύ των ελεύθερων ωρών να είναι τα 15 λεπτά. Αυτό που κάνει το συγκεκριμένο κομμάτι κώδικα είναι ουσιαστικά ο διαχωρισμός των ελεύθερων χρονικών διαστημάτων του πάροχου σε ώρες τις οποίες χωρίζουν 15 λεπτά τουλάχιστον και οι οποίες μπορούν να χωρέσουν την διάρκεια της υπηρεσίας για την οποία ενδιαφέρεται ο πελάτης, πριν την λήξη του διαθέσιμου χρονικού διαστήματος (γραμμές 43 - 76). +Έπειτα θα υπολογιστούν οι διαθέσιμες ώρες στις οποίες θα μπορέσει ο πελάτης να κλείσει ραντεβού. Αυθαίρετα και για λόγους ευχρηστίας έχει τεθεί το χρονικό διάστημα μεταξύ των ελεύθερων ωρών να είναι τα 15 λεπτά. Αυτό που κάνει το συγκεκριμένο κομμάτι κώδικα είναι ουσιαστικά ο διαχωρισμός των ελεύθερων χρονικών διαστημάτων του πάροχου σε ώρες τις οποίες χωρίζουν 15 λεπτά τουλάχιστον και οι οποίες μπορούν να χωρέσουν την διάρκεια της υπηρεσίας για την οποία ενδιαφέρεται ο πελάτης, πριν την λήξη του διαθέσιμου χρονικού διαστήματος (γραμμές 41 - 74). Στο τελευταίο μέρος αυτής της μεθόδου ελέγχεται αν η επιλεγμένη ημερομηνία αντιστοιχεί στην σημερινή και αν αυτό ισχύει αφαιρούνται οι παρελθοντικές διαθέσιμες ώρες έτσι ώστε να μην μπορεί ο πελάτης να κλείσει ραντεβού σε μια παρελθοντική χρονική στιγμή. Το σύστημα στο frontend δεν επιτρέπει ούτως ή άλλος την επιλογή παρελθοντικής ημερομηνίας, αλλά απαιτείται στην συγκεκριμένη περίπτωση να ελεγχθούν οι παρελθοντικές ώρες του ραντεβού. Επίσης είναι σημαντικό να αναφερθεί ότι η εφαρμογή παρέχει μια παράμετρο η οποία ορίζει το χρονικό διάστημα που θα πρέπει να χωρίζει ένα ραντεβού από την ώρα που αυτό γίνεται κράτηση ή επεξεργάζεται. Ο λόγος γίνεται για την ρύθμιση του συστήματος με το όνομα "book\_advance\_timeout" η οποία μετράται σε λεπτά και λαμβάνεται υπόψιν στον υπολογισμό των διαθέσιμων ωρών. diff --git a/doc/thesis/includes/unit-testing.tex b/doc/thesis/includes/unit-testing.tex index 8316ce7b..d45020f7 100644 --- a/doc/thesis/includes/unit-testing.tex +++ b/doc/thesis/includes/unit-testing.tex @@ -6,23 +6,23 @@ \chapter{Έλεγχος Συστήματος} Σε κάθε τομέα παραγωγής προϊόντων είναι πολύ σημαντικό να παράγονται προϊόντα τα οποία να τηρούν πάντα τις προδιαγραφές τους και να μπορούν να αντεπεξέλθουν στις απαιτήσεις του καταναλωτικού κοινού. Η φήμη και η εμπιστοσύνη που προσδίδει μια εταιρεία είναι κομβικά χαρακτηριστικά για την βιωσιμότητας της. Κάθε επαγγελματίας είναι απαραίτητο να είναι σε θέση να εγγυηθεί για την ποιότητα του προϊόντος ή της υπηρεσίας που παρέχει ως αντάλλαγμα της αμοιβής του. -Ο τρόπος διασφάλισης της ποιότητας διαφέρει ανάλογα με την φύση του προϊόντος ή της υπηρεσίας και μπορεί να εκτελεστεί με διάφορους μεθόδους. Για παράδειγμα αν το προϊόν ήταν κάποιο τρόφιμο, η εταιρία θα έπρεπε να είναι σίγουρη ότι είναι σε άριστη κατάσταση πριν φτάσει στο τραπέζι του καταναλωτή, διότι αν δεν το έκανε αυτό θα υπήρχαν επιπλοκές στην υγεία των καταναλωτών. Αντίστοιχα μια εταιρία που παρέχει μια υπηρεσία πρέπει να διασφαλίσει και να ελέγξει την ποιότητα παροχής της υπηρεσίας με διάφορους τρόπους. Ένας από αυτούς θα ήταν να λαμβάνει τις παρατηρήσεις των καταναλωτών αφότου λάβουν την υπηρεσία ή να περνάει από εσωτερικές εξετάσεις και εκπαίδευση τους υπαλλήλους της έτσι ώστε να είναι σίγουρη ότι αυτοί θα μπορούν να παρέχουν σωστά και αξιόπιστα την υπηρεσία στους πελάτες. +Ο τρόπος διασφάλισης της ποιότητας διαφέρει ανάλογα με την φύση του προϊόντος ή της υπηρεσίας και μπορεί να εκτελεστεί με διάφορους μεθόδους. Για παράδειγμα αν το προϊόν ήταν κάποιο τρόφιμο η εταιρία θα έπρεπε να είναι σίγουρη ότι είναι σε άριστη κατάσταση πριν φτάσει στο τραπέζι του καταναλωτή, διότι αν δεν το έκανε αυτό θα υπήρχαν επιπλοκές στην υγεία των καταναλωτών. Αντίστοιχα μια εταιρία που παρέχει μια υπηρεσία πρέπει να διασφαλίσει και να ελέγξει την ποιότητα παροχής της υπηρεσίας με διάφορους τρόπους. Ένας από αυτούς θα ήταν να λαμβάνει τις παρατηρήσεις των καταναλωτών αφότου λάβουν την υπηρεσία ή να περνάει από εσωτερικές εξετάσεις και εκπαίδευση τους υπαλλήλους της έτσι ώστε να είναι σίγουρη ότι αυτοί θα μπορούν να παρέχουν σωστά και αξιόπιστα την υπηρεσία στους πελάτες. -Στην διαδικασία ανάπτυξης λογισμικού υπάρχουν αντίστοιχα διάφοροι τρόποι ελέγχου ότι το λογισμικό που αναπτύσσεται τηρεί τις προδιαγραφές του. Κάποιοι από αυτούς τους τρόπους είναι τα unit testing, fuzz testing, δημοσίευση δοκιμαστική έκδοσης (beta version) κ.α. Το πιο κοντινό εργαλείο ελέγχου στον προγραμματιστή είναι η διαδικασία unit testing, η οποία εφαρμόζεται αποκλειστικά σε αντικειμενοστραφή κώδικα. Παρακάτω θα γίνει μια ανάλυση αυτής της τεχνικής ελέγχου και θα αναφερθούν οι μέθοδοι και η διαδικασία ελέγχου πάνω στο Easy!Appointments. +Στην διαδικασία ανάπτυξης λογισμικού υπάρχουν αντίστοιχα διάφοροι τρόποι ελέγχου ότι το λογισμικό που αναπτύσσεται τηρεί τις προδιαγραφές του. Κάποιοι από αυτούς τους τρόπους είναι τα unit testing, fuzz testing, δημοσίευση δοκιμαστική έκδοσης (beta version) κ.α. Το πιο κοντινό εργαλείο ελέγχου στον προγραμματιστή είναι η διαδικασία unit testing η οποία εφαρμόζεται αποκλειστικά σε αντικειμενοστραφή κώδικα. Παρακάτω θα γίνει μια ανάλυση αυτής της τεχνικής ελέγχου και θα αναφερθούν οι μέθοδοι και η διαδικασία ελέγχου πάνω στο Easy!Appointments. \section {Unit testing} Για την υλοποίηση unit tests πάνω στον κώδικα είναι απαραίτητο να τηρούνται δύο πράγματα: (1) η αντικειμενοστραφείς δομή και (2) η χρήση κάποιας βιβλιοθήκης ή εργαλείου το οποίο μπορεί να βοηθήσει στην οργάνωση και καλύτερη υλοποίηση των tests. -Με τον όρο unit testing εννοείται η δοκιμή μίας “λειτουργικής μονάδας” του λογισμικού που αναπτύσσεται. Η κάθε λειτουργική μονάδα απομονώνεται από τις υπόλοιπες και δοκιμάζεται ξεχωριστά σε διάφορες κατάστασης. Για αυτόν τον λόγο είναι απαραίτητο ο κώδικας να έχει αντικειμενοστραφής δομή. Η διαδικασία χωρίζεται στην συγγραφή πολλαπλών unit test, συναρτήσεων δηλαδή που δοκιμάζουν μια διαδικασία για συγκεκριμένες τιμές εισόδου. Σε κάθε περίπτωση στόχος είναι να υπάρχει ελεγχόμενη έξοδος έτσι ώστε να μπορέσει ο προγραμματιστής να είναι σίγουρος ότι το σύστημα θα λειτουργήσει σωστά σε οποιαδήποτε κατάσταση και αν βρίσκεται. Κατά την διαδικασία αυτήν μπορούν να βρεθούν πολύ εύκολα πολλά προβλήματα και ασυνέπειες στον κώδικα ενός συστήματος, τα οποία χρειάζεται να αντιμετωπιστούν. +Με τον όρο unit testing εννοείται η δοκιμή μίας “λειτουργικής μονάδας” του λογισμικού που αναπτύσσεται. Η κάθε λειτουργική μονάδα απομονώνεται από τις υπόλοιπες και δοκιμάζεται ξεχωριστά σε διάφορες καταστάσεις. Για αυτόν τον λόγο είναι απαραίτητο ο κώδικας να έχει αντικειμενοστραφής δομή. Η διαδικασία χωρίζεται στην συγγραφή πολλαπλών unit test, συναρτήσεων δηλαδή που δοκιμάζουν μια διαδικασία για συγκεκριμένες τιμές εισόδου. Σε κάθε περίπτωση στόχος είναι να υπάρχει ελεγχόμενη έξοδος έτσι ώστε να μπορέσει ο προγραμματιστής να είναι σίγουρος ότι το σύστημα θα λειτουργήσει σωστά σε οποιαδήποτε κατάσταση και αν βρίσκεται. Κατά την διαδικασία αυτήν μπορούν να βρεθούν πολύ εύκολα πολλά προβλήματα και ασυνέπειες στον κώδικα ενός συστήματος, τα οποία χρειάζεται να αντιμετωπιστούν. -Για να μπορέσουν να υλοποιηθούν αυτά τα test είναι απαραίτητο να χρησιμοποιηθεί κάποια βιβλιοθήκη ή εργαλείο, το οποίο θα κατέχει τις βασικές συναρτήσεις ελέγχου αποτελεσμάτων και επιπρόσθετα λειτουργίες για την παραγωγή αναφορών, οι οποίες περιέχουν τα αποτελέσματα των δοκιμών. Υπάρχουν πάρα πολλά εργαλεία που κάνουν αυτήν την δουλειά, το καθένα για μια συγκεκριμένη γλώσσα προγραμματισμού. Τα πιο διαδεδομένα εργαλεία είναι αυτά που ανήκουν στην οικογένεια xUnit (Junit, CppUnit, NUnit κ.α). +Για να μπορέσουν να υλοποιηθούν αυτά τα test είναι απαραίτητο να χρησιμοποιηθεί κάποια βιβλιοθήκη ή εργαλείο το οποίο θα κατέχει τις βασικές συναρτήσεις ελέγχου αποτελεσμάτων και επιπρόσθετα λειτουργίες για την παραγωγή αναφορών, οι οποίες περιέχουν τα αποτελέσματα των δοκιμών. Υπάρχουν πάρα πολλά εργαλεία που κάνουν αυτήν την δουλειά, το καθένα για μια συγκεκριμένη γλώσσα προγραμματισμού. Τα πιο διαδεδομένα εργαλεία είναι αυτά που ανήκουν στην οικογένεια xUnit (JUnit, CppUnit, NUnit κ.α). Τα εργαλεία αυτά μπορούν συνήθως κάλλιστα να συνεργαστούν μαζί με άλλα εργαλεία ανάπτυξης έτσι ώστε να είναι πολύ εύκολο για τον προγραμματιστή να συμπεριλάβει την διαδικασία unit testing στην υλοποίηση του κάθε συστήματος. \section {Easy!Appointments testing} -Η συγγραφή των unit tests για το Easy!Appointments έγινε με την χρήση της ενσωματωμένης βιβλιοθήκης που παρέχει το CodeIginter. Η βιβλιοθήκη παρέχει τις βασικές λειτουργίες ελέγχου και παραγωγής αναφορών για τα tests του κώδικα. Προτιμήθηκε έναντι του phpunit λόγω της καλύτερης απόδοσης σε σχέση με το CodeIgniter Framework. +Η συγγραφή των unit tests για το Easy!Appointments έγινε με την χρήση της ενσωματωμένης βιβλιοθήκης που παρέχει το CodeIgniter. Η βιβλιοθήκη παρέχει τις βασικές λειτουργίες ελέγχου και παραγωγής αναφορών για τα tests του κώδικα. Προτιμήθηκε έναντι του phpunit λόγω της καλύτερης απόδοσης σε σχέση με το CodeIgniter Framework. -Η διαδικασία της δοκιμής του συστήματος ξεκίνησε από τα models, τις λειτουργικές μονάδες που διαχειρίζονται την κίνηση προς και από την βάση δεδομένων. Είναι απαραίτητο για το σύστημα να κατέχει ακέραια δεδομένα μιας και όλη η εφαρμογή βασίζεται σε αυτά. Η κάθε μέθοδος του κάθε model δοκιμάστηκε ξεχωριστά από τις υπόλοιπες για 3-5 διαφορετικές περιπτώσεις. Όσο αναπτύσσεται το σύστημα τόσο αυξάνονται και unit tests. +Η διαδικασία της δοκιμής του συστήματος ξεκίνησε από τα models, τις λειτουργικές μονάδες που διαχειρίζονται την κίνηση των δεδομένων προς και από την βάση δεδομένων. Είναι απαραίτητο για το σύστημα να κατέχει ακέραια δεδομένα μιας και όλη η εφαρμογή βασίζεται σε αυτά. Η κάθε μέθοδος του κάθε model δοκιμάστηκε ξεχωριστά από τις υπόλοιπες για 3-5 διαφορετικές περιπτώσεις. Όσο αναπτύσσεται το σύστημα τόσο αυξάνονται και unit tests. \begin{figure}[h] \centering @@ -36,11 +36,11 @@ \lstinputlisting{snippets/unit_test_automation.php} \section {Παραδείγματα} -Στον παρακάτω κώδικα δοκιμάζεται η βασική ροή της περίπτωσης χρήσης “προσθήκη ραντεβού”. Σε αυτό το test case η είσοδος της μεθόδου add() είναι σωστή και έτσι περιμένουμε ότι και το αποτέλεσμα της διαδικασίας θα είναι επιτυχία. Στο τέλος αφαιρούμε την εγγραφή που προστέθηκε για να μην μείνουν κατάλοιπα στην βάση. Σε κάθε unit test χρησιμοποιείται μόνο μια μέθοδος του model. Έτσι το κάθε test δεν επηρεάζεται από τυχόν προβλήματα σε άλλες μεθόδους του model. +Στον παρακάτω κώδικα δοκιμάζεται η βασική ροή της περίπτωσης χρήσης “προσθήκη ραντεβού”. Σε αυτό το test case η είσοδος της μεθόδου add() είναι σωστή και αναμένεται ότι και το αποτέλεσμα της διαδικασίας θα είναι επιτυχές. Στο τέλος αφαιρείται η εγγραφή που προστέθηκε για να μην μείνουν κατάλοιπα στην βάση. Σε κάθε unit test χρησιμοποιείται μόνο μια μέθοδος του model. Έτσι το κάθε test δεν επηρεάζεται από τυχόν προβλήματα σε άλλες μεθόδους του model. \lstinputlisting{snippets/unit_test_insert_example.php} -Στο παρακάτω unit test δοκιμάζεται η μέθοδος get\_value() η οποία επιστρέφει την τιμή ενός πεδίου από την βάση. Στο συγκεκριμένο test case δίνεται ως παράμετρος ένα id εγγραφής, το οποίο δεν υπάρχει στην βάση. Η αναμενόμενη συμπεριφορά από το model είναι να εμφανιστεί ένα exception το οποίο να ειδοποιεί ότι η εγγραφή με το συγκεκριμένο id δεν βρέθηκε στην βάση. +Στο παρακάτω unit test δοκιμάζεται η μέθοδος get\_value() η οποία επιστρέφει την τιμή ενός πεδίου από την βάση. Στο συγκεκριμένο test case δίνεται ως παράμετρος ένα id εγγραφής το οποίο δεν υπάρχει στην βάση. Η αναμενόμενη συμπεριφορά από το model είναι να εμφανιστεί ένα exception το οποίο να ειδοποιεί ότι η εγγραφή με το συγκεκριμένο id δεν βρέθηκε στην βάση. \lstinputlisting{snippets/unit_test_get_value_example.php} diff --git a/doc/thesis/thesis.pdf b/doc/thesis/thesis.pdf index 267b3a7373521f896ba9c4dbfe5063d92c73d515..28f6b3fffe96a5b6e0fd1f0ed3bf6822bc423141 100644 GIT binary patch delta 37309 zcmY(IQ+J>X(`~zB+qP|YC+XNWI<~DRwr$(CZCf4NcD_B%#TnzhnDrB?R?T%0D-n<+ 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 delta 36706 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