mirror of
https://github.com/alextselegidis/easyappointments.git
synced 2024-11-25 09:23:08 +03:00
* Completed thesis document.
This commit is contained in:
parent
e3e4063de3
commit
9ac22614a7
14 changed files with 70 additions and 37 deletions
|
@ -7,7 +7,7 @@ call:cleanupq
|
|||
|
||||
:: Run XeLaTex on main file.
|
||||
xelatex thesis.tex --quiet
|
||||
bibtex thesis.aux
|
||||
biber thesis --quiet
|
||||
|
||||
:: If you are using multibib the following will run bibtex on all aux files
|
||||
:: FOR /R . %%G IN (*.aux) DO bibtex %%G
|
||||
|
@ -34,6 +34,7 @@ del *.log
|
|||
del *.bcf
|
||||
del *.xml
|
||||
del *.toc
|
||||
del *.lof
|
||||
|
||||
del includes\*.log
|
||||
del includes\*.dvi
|
||||
|
|
BIN
doc/thesis/images/backend-calendar.jpg
Normal file
BIN
doc/thesis/images/backend-calendar.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 366 KiB |
BIN
doc/thesis/images/book-appointment.jpg
Normal file
BIN
doc/thesis/images/book-appointment.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 160 KiB |
BIN
doc/thesis/images/ea-unit-testing.png
Normal file
BIN
doc/thesis/images/ea-unit-testing.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 32 KiB |
BIN
doc/thesis/images/google-calendar-api.png
Normal file
BIN
doc/thesis/images/google-calendar-api.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 49 KiB |
|
@ -32,19 +32,3 @@
|
|||
\subsection{Βελτίωση κώδικα}
|
||||
Τελευταίο αλλά και όχι λιγότερο σημαντικό είναι η συνεχής βελτίωση και ενημέρωση του κώδικα έτσι ώστε να είναι πάντα στην καλύτερη δυνατή κατάσταση. Καθώς εξελίσσεται ένα σύστημα λογισμικού είναι απαραίτητο να βελτιώνεται ο κώδικας και η δομή του. Επίσης είναι απαραίτητο να ενημερώνονται και τα εξωτερικά εργαλεία τα οποία χρησιμοποιούνται έτσι ώστε να διασφαλίζεται η ασφάλεια και η ποιότητα του συστήματος. Κατά καιρούς εμφανίζονται διάφορες ενημερώσεις ασφαλείας αλλά και διορθώσεων σφαλμάτων σε αυτά τα framework (CodeIgniter, jQuery κτλ) τα οποία θα χρειαστεί να συμπεριληφθούν και στο Easy!Appointments. Κάθε φορά που ο χρήστης λαμβάνει μια νέα έκδοση της εφαρμογής θα πρέπει ο κώδικας που την απαρτίζει να βρίσκεται σε πολύ καλή κατάσταση, να έχει ελεγχθεί και να λειτουργεί σωστά έτσι ώστε να εμπνέει εμπιστοσύνη προς τους χρήστες.
|
||||
|
||||
\begin{thebibliography}{1}
|
||||
|
||||
\bibitem{notes} John W. Dower {\em Readings compiled for History
|
||||
21.479.} 1991.
|
||||
|
||||
\bibitem{impj} The Japan Reader {\em Imperial Japan 1800-1945} 1973:
|
||||
Random House, N.Y.
|
||||
|
||||
\bibitem{norman} E. H. Norman {\em Japan's emergence as a modern
|
||||
state} 1940: International Secretariat, Institute of Pacific
|
||||
Relations.
|
||||
|
||||
\bibitem{fo} Bob Tadashi Wakabayashi {\em Anti-Foreignism and Western
|
||||
Learning in Early-Modern Japan} 1986: Harvard University Press.
|
||||
|
||||
\end{thebibliography}
|
|
@ -10,6 +10,13 @@
|
|||
Όπως και με τα περισσότερα προϊόντα της Google παρέχονται εργαλεία με τα οποία μπορούν οι προγραμματιστές να επικοινωνήσουν και να λάβουν δεδομένα από τις υπηρεσίες της εταιρείας. Με
|
||||
αυτόν τον τρόπο είναι δυνατή η ανάπτυξη εφαρμογών οι οποίες διαχειρίζονται αυτά τα δεδομένα, διευκολύνοντας έτσι τον χρήστη.
|
||||
|
||||
\begin{figure}[h]
|
||||
\centering
|
||||
\includegraphics[width=150mm]{images/google-calendar-api.png}
|
||||
\caption{Ιστότοπος περιγραφής του Google Calendar API}
|
||||
\label{google-calendar-api}
|
||||
\end{figure}
|
||||
|
||||
Το Google Calendar API (Application Programming Interface)
|
||||
είναι μια πλατφόρμα διαχείρισης συμβάντων ενός ημερολογίου από την Google. Επιτρέπει στον προγραμματιστή να πραγματοποιήσει λειτουργίες προσθήκης, επεξεργασίας, διαγραφής και αναζήτησης συμβάντων μέσω ενός RESTful στυλ κλήσεων προς τον server.
|
||||
|
||||
|
@ -28,7 +35,7 @@
|
|||
\section {Περιγραφή του Calendar API}
|
||||
Το Ημερολόγιο της Google είναι ένα πολύ δυνατό και ευέλικτο εργαλείο. Οι χρήστες μπορούν να βλέπουν το ίδιο ημερολόγιο σε οποιαδήποτε συσκευή βρίσκονται έχοντας απλώς σύνδεση με το διαδίκτυο, για να μπορέσουν να ληφθούν τα δεδομένα από την υπηρεσία. Όλες οι εφαρμογές αυτές χρησιμοποιούν το API για να υλοποιήσουν τις βασικές λειτουργίες ενός ημερολογίου, δηλαδή την διαχείριση και την εύκολη εύρεση συμβάντων που είναι καταχωρημένα στο Google Calendar. Αφού γίνουν οι αλλαγές αυτές θα χρειαστεί να εκτελεστεί η διαδικασία του συγχρονισμού έτσι ώστε τα νέα δεδομένα να είναι και στις υπόλοιπες εφαρμογές που έχουν πρόσβαση στο ημερολόγιο.
|
||||
|
||||
Στην ευρεία χρήση της υπηρεσίας συντελεί το ότι η πλατφόρμα του ημερολογίου είναι συμβατή με διάφορες γλώσσες προγραμματισμού και έτσι μπορούν να υλοποιηθούν εφαρμογές για όλες τις συσκευές με εξελιγμένο λειτουργικό σύστημα (Windows, Linux, MacOsX, Android, iOs, Windows Phone κτλ).
|
||||
Στην ευρεία χρήση της υπηρεσίας συντελεί το ότι η πλατφόρμα του ημερολογίου είναι συμβατή με διάφορες γλώσσες προγραμματισμού και έτσι μπορούν να υλοποιηθούν εφαρμογές για όλες τις συσκευές με εξελιγμένο λειτουργικό σύστημα (Windows, Linux, Mac OS, Android, iOS, Windows Phone κτλ).
|
||||
|
||||
Οι βασικές έννοιες του συστήματος ενός ημερολογίου είναι:
|
||||
|
||||
|
@ -68,14 +75,14 @@ https://www.googleapis.com/calendar/v3/users/userID/lists?parameters
|
|||
Αντιθέτως με την χρήση των έτοιμων βιβλιοθηκών οι διαδικασίες επικοινωνίας είναι έτοιμες και ο προγραμματιστής μπορεί να πετύχει την επικοινωνία με τους servers της Google γρηγορότερα και ευκολότερα.
|
||||
Υπάρχουν βιβλιοθήκες για την Java, την PHP, την Python, το .NET περιβάλλον και την Ruby και πολλές άλλες γλώσσες και τεχνολογίες.
|
||||
|
||||
Αφού κατεβάσουμε τις βιβλιοθήκες και τις βάλουμε σε κάποιο σημείο μέσα στο project, μπορούμε να τις χρησιμοποιήσουμε μέσα από τον κώδικα:
|
||||
Αφού γίνει λήψη των βιβλιοθηκών και συμπερίληψη στον κώδικα του project, μπορούν να χρησιμοποιηθούν μέσα από τον κώδικα:
|
||||
|
||||
\begin{lstlisting}
|
||||
require_once "../src/apiClient.php";
|
||||
require_once "../src/contrib/apiCalendarService.php";
|
||||
\end{lstlisting}
|
||||
|
||||
Στην συνέχεια είναι απαραίτητο να ρυθμίσουμε κάποιες παραμέτρους έτσι ώστε να είμαστε σε θέση να χρησιμοποιήσουμε αυτήν την υπηρεσία:
|
||||
Στην συνέχεια είναι απαραίτητο να γίνει ρύθμιση κάποιων παραμέτρων έτσι ώστε να μπορέσει να γίνει χρήση της υπηρεσίας:
|
||||
|
||||
\begin{lstlisting}[breaklines=true]
|
||||
global $apiConfig;
|
||||
|
@ -130,9 +137,9 @@ if (isset($_SESSION['oauth_access_token'])) {
|
|||
Με αυτόν τον τρόπο εκτελούνται οι διαδικασίες ανταλλαγής δεδομένων μεταξύ του Google Calendar και του συστήματος του προγραμματιστή.
|
||||
|
||||
\section{Συγχρονισμός ραντεβού}
|
||||
Ο συγχρονισμός δεδομένων μεταξύ δυο συστημάτων είναι μια περίπλοκη και υποτιμημένη διαδικασία, διότι ο προγραμματιστής έχει κάνει αρκετή δουλειά έτσι ώστε να καταφέρει να γεφυρώσει και τις δυο πηγές δεδομένων με τον καλύτερο τρόπο. Το αποτέλεσμα δεν μπορεί ποτέ να είναι 100\% επιτυχές διότι μερικές φορές τα δεδομένα και οι αλλαγές μπορεί να έρχονται σε σύγκρουση (conflict) και έτσι θα χρειαστεί να παρθούν αποφάσεις είτε με βάση κάποιους κανόνες, είτε από τον ίδιο τον χρήστη για το ποια αλλαγή θα υπερισχύσει. Το πράγμα μάλιστα δυσκολεύει περισσότερο όταν δεν υπάρχει πρόσβαση στον κώδικα του ενός από τα δύο συστήματα (πχ Google Calendar) και όλη η διαδικασία θα πρέπει να τρέξει από το άλλο.
|
||||
Ο συγχρονισμός δεδομένων μεταξύ δυο συστημάτων είναι μια περίπλοκη και πολλές φορές υποτιμημένη διαδικασία, διότι ο προγραμματιστής έχει να κάνει αρκετή δουλειά έτσι ώστε να καταφέρει να γεφυρώσει και τις δυο πηγές δεδομένων με τον καλύτερο τρόπο. Το αποτέλεσμα δεν μπορεί ποτέ να είναι 100\% επιτυχές διότι μερικές φορές τα δεδομένα και οι αλλαγές μπορεί να έρχονται σε σύγκρουση (conflict) και έτσι θα χρειαστεί να παρθούν αποφάσεις είτε με βάση κάποιους κανόνες, είτε από τον ίδιο τον χρήστη για το ποια αλλαγή θα υπερισχύσει. Το πράγμα μάλιστα δυσκολεύει περισσότερο όταν δεν υπάρχει πρόσβαση στον κώδικα του ενός από τα δύο συστήματα (πχ Google Calendar) και όλη η διαδικασία θα πρέπει να τρέξει από την μια πλευρά.
|
||||
|
||||
Στην περίπτωση του Easy!Appointments θα πρέπει να υλοποιηθεί μια διαδικασία η οποία θα συγχρονίζει τα ραντεβού και τα συμβάντα του συστήματος με αυτά του Google Calendar. Η διαδικασία αυτή θα εκτελείτε όταν δημιουργούνται συγκεκριμένα συμβάντα (πχ. προσθήκη ραντεβού) και θα φέρνει και τα δύο πλάνα στην ίδια κατάσταση. Ο συγχρονισμός θα εκτελείται κάθε φορά για το πλάνο ενός πάροχου υπηρεσιών και εφόσον έχει ήδη δοθεί η άδεια στην εφαρμογή να έχει πρόσβαση στα δεδομένα του Google Calendar του συγκεκριμένου χρήστη.
|
||||
Στην περίπτωση του Easy!Appointments θα πρέπει να υλοποιηθεί μια διαδικασία η οποία θα συγχρονίζει τα ραντεβού και τα συμβάντα του συστήματος με αυτά του Google Calendar. Η διαδικασία αυτή θα εκτελείται όταν δημιουργούνται συγκεκριμένα συμβάντα (πχ. προσθήκη ραντεβού) και θα φέρνει και τα δύο πλάνα στην ίδια κατάσταση. Ο συγχρονισμός θα εκτελείται κάθε φορά για το πλάνο ενός πάροχου υπηρεσιών και εφόσον έχει ήδη δοθεί η άδεια στην εφαρμογή να έχει πρόσβαση στα δεδομένα του Google Calendar του συγκεκριμένου χρήστη.
|
||||
|
||||
Με αυτόν τον τρόπο τα ραντεβού και οι αλλαγές που θα γίνονται από τα δυο συστήματα θα συγχωνεύονται και ο χρήστης θα μπορεί να τα διαχειρίζεται και από τις δύο πλευρές. Το μόνο πρόβλημα είναι ότι από την πλευρά του Google Calendar δεν είναι δυνατό να εκκινηθεί η διαδικασία του συγχρονισμού και έτσι αυτό θα πρέπει να γίνεται πάντοτε από την πλευρά του Easy!Appointments.
|
||||
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
\usepackage{hyperref}
|
||||
\usepackage{color}
|
||||
\usepackage{xcolor}
|
||||
\usepackage{biblatex}
|
||||
\usepackage[backend=biber]{biblatex}
|
||||
|
||||
%% ============================================================================
|
||||
%% ΡΥΘΜΙΣΗ ΤΩΝ HYPERLINKS
|
||||
|
@ -68,4 +68,4 @@
|
|||
\renewcommand{\thesisyear}{2013}
|
||||
|
||||
%% ΒΙΒΛΙΟΓΡΑΦΙΑ
|
||||
%\addbibresource{thesis.bib}
|
||||
\addbibresource{thesis.bib}
|
||||
|
|
|
@ -7,6 +7,20 @@
|
|||
\chapter{Σχεδίαση \& Υλοποίηση}
|
||||
Σε αυτό το κεφάλαιο γίνεται ανάλυση του συστήματος στα επιμέρους μέρη που το απαρτίζουν και περιγράφεται η διαδικασία της υλοποίησης τους. Επεξηγούνται επίσης τα σημαντικότερα σημεία στον κώδικα και οι αλγόριθμοι που χρησιμοποιούνται για την επίλυση των κυριότερων λειτουργιών. Έχουν συμπεριληφθεί τμήματα κώδικα αλλά και διαγράμματα τα οποία βοηθούν στην κατανόηση των λύσεων που έχουν χρησιμοποιηθεί.
|
||||
|
||||
\begin{figure}[ht!]
|
||||
\centering
|
||||
\includegraphics[width=130mm]{images/backend-calendar.jpg}
|
||||
\caption{Σελίδα διαχείρισης ραντεβού}
|
||||
\label{backend-calendar}
|
||||
\end{figure}
|
||||
|
||||
\begin{figure}[ht!]
|
||||
\centering
|
||||
\includegraphics[width=130mm]{images/book-appointment.jpg}
|
||||
\caption{Σελίδα κράτησης ραντεβού}
|
||||
\label{book-appointment}
|
||||
\end{figure}
|
||||
|
||||
%% ==================================================
|
||||
%% ΑΝΑΛΥΣΗ ΔΕΔΟΜΕΝΩΝ
|
||||
%% ==================================================
|
||||
|
@ -138,45 +152,45 @@
|
|||
\begin{figure}%% [Η] αυτή η εντολή θα τοποθετήσει το διάγραμμα ακριβώς σε αυτό το σημείο. Το latex όμως πάντα προσπαθεί να αφήσει όσο λιγότερα κενό χόρο γίνεται και έτσι τα διαγράμματα δεν θα εμφανιστούν με την σειρά που γράφονται στον κώδικα.
|
||||
\centering
|
||||
\includegraphics[width=150mm]{images/sd-save-appointment.png}
|
||||
\caption{Στο διάγραμμα ροής εμφανίζεται η διαδικασία που εκτελείται για την αποθήκευση ενός ραντεβού μετά την επιτυχή καταχώρηση του από τον πελάτη.}
|
||||
\caption{Διάγραμμα ροής για την διαδικασία αποθήκευσης ενός ραντεβού.}
|
||||
\label{sd-save-appointment}
|
||||
\end{figure}
|
||||
|
||||
\begin{figure}
|
||||
\centering
|
||||
\includegraphics[width=150mm]{images/sd-sync-appointment.png}
|
||||
\caption{Στο διάγραμμα ροής εμφανίζεται η διαδικασία με την οποία πραγματοποιείται η προσθήκη ενός ραντεβού στο Google Calendar.}
|
||||
\caption{Διάγραμμα ροής για την διαδικασία προσθήκης ενός ραντεβού στο Google Calendar.}
|
||||
\label{sd-save-appointment}
|
||||
\end{figure}
|
||||
|
||||
\subsection{Διαγράμματα δραστηριότητας}
|
||||
Τα διαγράμματα δραστηριότητας αποτελούν γραφικές παρουσιάσεις της δραστηριότητας του που ακολουθεί το σύστημα ανάλογα με τις αποφάσεις που λαμβάνονται μέσα από τον κώδικα. Σε αυτά τα διαγράμματα μπορούν να φανούν τα σημεία στα οποία υπάρχουν βρόγχοι επανάληψης, τα σημεία όπου μπορούν να συμβούν λογικά σφάλματα (οι απαιτήσεις για συνέχιση της εκτέλεσης δεν πληρούνται) όπως και επίσης τις διαδικασίες που τρέχουν ταυτόχρονα και σε ποιο σημείο γίνεται αυτό. Κατά κύριο λόγο τα διαγράμματα δραστηριότητας δείχνει την συνολική ροή του ελέγχου μέσα από την εκτέλεση μιας συγκεκριμένης διαδικασίας.
|
||||
Τα διαγράμματα δραστηριότητας αποτελούν γραφικές παρουσιάσεις της δραστηριότητας του που ακολουθεί το σύστημα ανάλογα με τις αποφάσεις που λαμβάνονται μέσα από τον κώδικα. Σε αυτά τα διαγράμματα μπορούν να φανούν τα σημεία στα οποία υπάρχουν βρόγχοι επανάληψης, τα σημεία όπου παίρνονται αποφάσεις όπως και επίσης τις διαδικασίες που τρέχουν ταυτόχρονα και σε ποιο σημείο χρονικά γίνεται αυτό. Κατά κύριο λόγο τα διαγράμματα δραστηριότητας δείχνει την συνολική ροή του ελέγχου μέσα από την εκτέλεση μιας συγκεκριμένης διαδικασίας.
|
||||
|
||||
\begin{figure}
|
||||
\centering
|
||||
\includegraphics[width=90mm]{images/ad-book-appointment.png}
|
||||
\caption{Αναπαράσταση της διαδικασίας κράτησης ραντεβού.}
|
||||
\caption{Διάγραμμα δραστηριότητας της διαδικασίας κράτησης ραντεβού.}
|
||||
\label{ad-book-appointment}
|
||||
\end{figure}
|
||||
|
||||
\begin{figure}
|
||||
\centering
|
||||
\includegraphics[width=70mm]{images/ad-install-application.png}
|
||||
\caption{Αναπαράσταση της διαδικασίας εγκατάστασης της εφαρμογής.}
|
||||
\caption{Διάγραμμα δραστηριότητας της διαδικασίας εγκατάστασης της εφαρμογής.}
|
||||
\label{ad-install-application}
|
||||
\end{figure}
|
||||
|
||||
\begin{figure}
|
||||
\centering
|
||||
\includegraphics[width=70mm]{images/ad-sync-appointments.png}
|
||||
\caption{Αναπαράσταση της διαδικασίας συγχρονισμού ραντεβού μεταξύ του Easy!Appointments και του Google Calendar. Ο αλγόριθμος συγχρονισμού είναι αμφίδρομος.}
|
||||
\caption{Διάγραμμα δραστηριότητας της διαδικασίας αμφίδρομου συγχρονισμού με το Google Calendar.}
|
||||
\label{ad-sync-appointments}
|
||||
\end{figure}
|
||||
|
||||
\begin{figure}
|
||||
\centering
|
||||
\includegraphics[width=70mm]{images/ad-provider-available-hours.png}
|
||||
\caption{Αναπαράσταση της διαδικασίας υπολογισμού των διαθέσιμων ωρών για κράτηση ραντεβού από τον πελάτη.}
|
||||
\caption{Διάγραμμα δραστηριότητας του υπολογισμού των διαθέσιμων ωρών ενός πάροχου.}
|
||||
\label{ad-provider-available-hours}
|
||||
\end{figure}
|
||||
|
||||
|
@ -186,13 +200,13 @@
|
|||
\begin{figure}
|
||||
\centering
|
||||
\includegraphics[width=150mm]{images/cd-backend-users.png}
|
||||
\caption{Στο διάγραμμα αυτό φαίνεται ο τρόπος με τον οποίον υλοποιείται η λειτουργικότητα της σελίδας διαχείρισης των χρηστών του συστήματος μέσω της JavaScript. Η κάθε ενότητα διαχείρισης (διαχειριστές, πάροχοι και γραμματείς) έχουν την δικιά τους κλάση, η οποία καθορίζει με ποιόν τρόπο θα χρειαστεί να ανταποκριθεί η εφαρμογή.}
|
||||
\caption{Διάγραμμα κλάσεων της δομής JavaScript στην σελίδα διαχείρισης των χρηστών.}
|
||||
\label{cd-backend-users}
|
||||
\end{figure}
|
||||
|
||||
\begin{figure}
|
||||
\centering
|
||||
\includegraphics[width=150mm]{images/cd-backend-settings.png}
|
||||
\caption{Σε αυτό το διάγραμμα κλάσεων φαίνονται οι κλάσεις που συμμετέχουν στον JavaScript κώδικα των κεντρικών ρυθμίσεων της εφαρμογής. Οι κάθε μια κλάση αντιπροσωπεύει την λειτουργία μιας κατηγορίας ρυθμίσεων και μαζί χρησιμοποιούνται για την σωστή λειτουργία της σελίδας.}
|
||||
\caption{Διάγραμμα κλάσεων της δομής JavaScript στην σελίδα ρυθμίσεων της εφαρμογής.}
|
||||
\label{cd-backend-settings}
|
||||
\end{figure}
|
||||
|
|
|
@ -11,6 +11,7 @@
|
|||
\end{Abstract}
|
||||
|
||||
\tableofcontents
|
||||
\listoffigures
|
||||
|
||||
\begin{Definitions}
|
||||
Στο έγγραφο αυτό υπάρχουν κάποιες έννοιες οι οποίες χρησιμοποιούνται
|
||||
|
|
|
@ -24,6 +24,13 @@
|
|||
|
||||
Η διαδικασία της δοκιμής του συστήματος ξεκίνησε από τα models, τις λειτουργικές μονάδες που διαχειρίζονται την κίνηση προς και από την βάση δεδομένων. Είναι απαραίτητο για το σύστημα να κατέχει ακέραια δεδομένα μιας και όλη η εφαρμογή βασίζεται σε αυτά. Η κάθε μέθοδος του κάθε model δοκιμάστηκε ξεχωριστά από τις υπόλοιπες για 3-5 διαφορετικές περιπτώσεις. Όσο αναπτύσσεται το σύστημα τόσο αυξάνονται και unit tests.
|
||||
|
||||
\begin{figure}[h]
|
||||
\centering
|
||||
\includegraphics[width=150mm]{images/ea-unit-testing.png}
|
||||
\caption{Στιγμιότυπο της σελίδας εμφάνισης αποτελεσμάτων των unit tests.}
|
||||
\label{ea-unit-testing}
|
||||
\end{figure}
|
||||
|
||||
Για να γίνει αυτόματη εκτέλεση όλων των unit test που αντιστοιχούν σε ένα συγκεκριμένο model γράφτηκε η παρακάτω μέθοδος η οποία αφού ελέγξει τα ονόματα των test μεθόδων, εκτελεί μόνο εκεί τα οποία ξεκινούν από την λέξη "test". Έτσι αν κάποια μέθοδος δεν είναι έτοιμη ή δεν πρέπει να συμπεριληφθεί στην εκτέλεση των unit test αρκεί να αλλάξει την αρχή του ονοματός της και η μέθοδος δεν θα την λάβει υπόψιν.
|
||||
|
||||
\lstinputlisting{snippets/unit_test_automation.php}
|
||||
|
|
|
@ -1,4 +1,21 @@
|
|||
@misc{ Nobody06,
|
||||
author = "Nobody Jr",
|
||||
title = "My Article",
|
||||
year = "2006" }
|
||||
@misc {
|
||||
google_calendar_api,
|
||||
title = "Google Calendar API",
|
||||
url = "https://developers.google.com/google-apps/calendar/",
|
||||
year = "2013"
|
||||
}
|
||||
|
||||
@misc {
|
||||
codeigniter_reference,
|
||||
author = "",
|
||||
title = "CodeIgniter Reference",
|
||||
url = "http://ellislab.com/codeigniter/user-guide/toc.html",
|
||||
year = "2013"
|
||||
}
|
||||
|
||||
@misc {
|
||||
software_engineering_notes,
|
||||
author = "Νικόλαος Πεταλίδης",
|
||||
title = "Σημειώσεις των μαθημάτων Τεχνολογία Λογισμικού 1 \& 2.",
|
||||
year = "2012"
|
||||
}
|
Binary file not shown.
|
@ -20,5 +20,7 @@
|
|||
\input{includes/implementation.tex}
|
||||
\input{includes/unit-testing.tex}
|
||||
\input{includes/conclusions.tex}
|
||||
\nocite{*}
|
||||
\printbibliography
|
||||
\end{document}
|
||||
|
Loading…
Reference in a new issue