test.tex 33.9 KB
Newer Older
1
\documentclass[diploma]{softlab-thesis}
2 3 4 5 6 7 8 9 10 11 12 13


%%%
%%%  The document
%%%

\begin{document}

%%%  Title page

\frontmatter

14
%%% TODO change
15
\title{Σχεδίαση και Επέκταση ενός Συστήματος Αυτόματης Αξιολόγησης Προγραμματιστικών Ασκήσεων}
16 17
\author{Αντώνιος Αγγελάκης}
\date{Μάρτιος 2018}
18
%%% TODO change
19
\datedefense{17}{3}{2018}
20

21
\supervisor{Νικόλαος Παπασπύρου}
22 23
\supervisorpos{Αν. Καθηγητής Ε.Μ.Π.}

24
%%% TODO change middle names?
25
\committeeone{Νικόλαος Παπασπύρου}
26
\committeeonepos{Αν. Καθηγητής Ε.Μ.Π.}
27 28 29 30
\committeetwo{Αριστείδης Παγουρτζής}
\committeetwopos{Αν. Καθηγητής Ε.Μ.Π.}
\committeethree{Γεώργιος Στάμου}
\committeethreepos{Αν. Καθηγητής Ε.Μ.Π.}
31

32
%%% TODO change
33
\TRnumber{CSD-SW-TR-42-18}  % number-year, ask nickie for the number
34
\department{Τομέας Τεχνολογίας Πληροφορικής και Υπολογιστών}
35 36 37 38

\maketitle


39 40
%%%  Abstract, in Greek

41
%%% TODO change
42
\begin{abstractgr}%
43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88
  Σκοπός της παρούσας εργασίας είναι αφενός η σχεδίαση μίας απλής
  γλώσσας υψηλού επιπέδου με υποστήριξη για προγραμματισμό με
  αποδείξεις, αφετέρου η υλοποίηση ενός μεταγλωττιστή για τη γλώσσα
  αυτή που θα παράγει κώδικα για μία γλώσσα ενδιάμεσου επιπέδου
  κατάλληλη για δημιουργία πιστοποιημένων εκτελέσιμων.

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

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

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

  Επιτύχαμε να διατηρήσουμε τη γλώσσα κοντά στο ύφος των ευρέως
  διαδεδομένων συναρτησιακών γλωσσών, καθώς και να διαχωρίσουμε τη
  φάση προγραμματισμού από τη φάση απόδειξης της ορθότητας των
  προγραμμάτων. Έτσι ένας μέσος προγραμματιστής μπορεί εύκολα να
  προγραμματίζει στη γλώσσα που προτείνουμε με τον τρόπο που ήδη
  γνωρίζει, και ένας γνώστης μαθηματικής λογικής να αποδεικνύει σε
  επόμενη φάση την μερική ορθότητα των προγραμμάτων. Ως απόδειξη της
  πρακτικότητας της προσέγγισης αυτής, παραθέτουμε ένα σύνολο
  παραδειγμάτων στη γλώσσα με απόδειξη μερικής ορθότητας.
89
%%% TODO change
90
\begin{keywordsgr}
91 92
Γλώσσες προγραμματισμού, Προγραμματισμός με αποδείξεις, Ασφαλείς γλώσσες
προγραμματισμού, Πιστοποιημένος κώδικας.
93 94 95 96 97 98
\end{keywordsgr}
\end{abstractgr}


%%%  Abstract, in English

99
%%% TODO change
100
\begin{abstracten}%
101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142
  The purpose of this diploma dissertation is on one hand the design
  of a simple high-level language that supports programming with
  proofs, and on the other hand the implementation of a compiler for
  this language. This compiler will produce code for an
  intermediate-level language suitable for creating certified
  binaries.

  The need for reliable and certifiably secure code is even more
  pressing today than it was in the past. In many cases, security and
  software compatibility issues put in danger the operation of large
  systems, with substantial financial consequences. The lack of a
  formal way of specifying and proving the correctness of programs that
  characterizes current programming languages is one of the main reasons
  why these issues exist. In order to address this problem, a number of
  frameworks with support for certified binaries have recently been
  proposed. These frameworks offer the possibility of specifying and
  providing a formal proof of the correctness of programs. Such a proof
  can easily be checked for validity before running the program.

  The frameworks that have been proposed are intermediate-level in
  nature, thus the process of programming in these is rather cumbersome.
  The high-level languages that accompany some of these frameworks,
  while very expressive, are hard to use. A simpler high-level language,
  like the one proposed in this dissertation, would enable further use
  of this programming idiom.

  In the language we propose, the programmer specifies the partial
  correctness of a program by annotating function definitions with pre-
  and post-conditions that must hold for their parameters and results.
  The programmer also provides a set of theorems, based on which proofs
  of the proper implementation and use of the functions are constructed.
  An implementation in OCaml of a compiler from this language to the
  NFLINT certified binaries framework was also completed as part of this
  dissertation.

  We managed to keep the language close to the feel of the current
  widespread functional languages, and also to fully separate the
  programming stage from the correctness-proving stage. Thus an average
  programmer can program in a familiar way in our language, and later an
  expert on formal logic can prove the semi-correctness of a program.
  As evidence of the practicality of our design, we provide a number of
  examples in our language with full semi-correctness proofs.
143
\begin{keywordsen}
144 145
Programming languages, Programming with proofs, Secure programming
languages, Certified code.
146 147
\end{keywordsen}
\end{abstracten}
148 149 150 151


%%%  Acknowledgements

152
%%% TODO change
153
\begin{acknowledgementsgr}
154 155 156 157 158 159 160 161 162 163 164 165
Ευχαριστώ θερμά τον επιβλέποντα καθηγητή αυτής της διατριβής,
κ.~Γιάννη Παπαδάκη, για τη συνεχή καθοδήγηση και εμπιστοσύνη
του. Ευχαριστώ επίσης τα μέλη της συμβουλευτικής επιτροπής,
κ.κ.~Νίκο Παπαδόπουλο και Γιώργο Νικολάου για την πρόθυμη και
πάντα αποτελεσματική βοήθειά τους, τις πολύτιμες συμβουλές και
τις χρήσιμες συζητήσεις που είχαμε.  Θέλω να ευχαριστήσω ακόμα
τον συμφοιτητή και φίλο Πέτρο Πετρόπουλο, ο οποίος με βοήθησε σε
διάφορα στάδια αυτής της εργασίας.  Θα ήθελα τέλος να ευχαριστήσω
την οικογένειά μου και κυρίως τους γονείς μου, οι οποίοι με
υποστήριξαν και έκαναν δυνατή την απερίσπαστη ενασχόλησή μου τόσο
με την εκπόνηση της διπλωματικής μου, όσο και συνολικά με τις
σπουδές μου.
166
\end{acknowledgementsgr}
167 168 169 170 171 172 173 174 175 176 177 178 179


%%%  Various tables

\tableofcontents
\listoftables
\listoffigures


%%%  Main part of the book

\mainmatter

180 181
\chapter{Εισαγωγή}

182
\section{Σκοπός}
183

184
Ο σκοπός της παρούσας διπλωματικής εργασίας είναι ο σχεδιασμός
185
και η υλοποίηση νέων δυνατοτήτων σε ένα σύστημα αυτόματης αξιολόγησης
186 187 188 189
προγραμματιστικών ασκήσεων. Το σύστημα που τροποποιήθηκε, όπως θα περιγραφεί
παρακάτω, χρησιμοποιείται τόσο από το Εργαστήριο Τεχνολογίας Λογισμικού (ΤODO links edw??)
όσο και από την Ελληνική Εταιρεία Επιστημόνων και Επαγγελματιών Πληροφορικής
και Επικοινωνιών (ΕΠΥ) για τη διοργάνωση των Πανελλήνιων Διαγωνισμών Πληροφορικής.
190

191 192
\bigskip

193
Το σύστημα αυτόματης αξιολόγησης (grader) δέχεται τις υποβολές των
194 195 196 197 198
διαγωνιζομένων σε συγκεκριμένα προβλήματα που ανήκουν σε διαγωνισμούς,
ώστε να τις χαρακτηρίσει ενεργές ή όχι, αξιολογώντας
το αποτέλεσμα και την απόδοση τους σε συγκεκριμένα αρχεία ελέγχου.
Έπειτα, αφού κλείσουν οι υποβολές, επαναξιολογεί όλες τις ενεργές
υποβολές αυτόματα, ώστε να παράξει τα τελικά αποτελέσματα.
199

200 201
\bigskip

202 203 204 205
Ο grader, στην πρότερη κατάσταση του, επέτρεπε μόνο τη δημιουργία
μεμονωμένων αρχείων ελέγχου και όχι συνδυαστικών ομάδων καθιστώντας
δύσκολη τη δημιουργία προβλημάτων με δυαδικά αποτελέσματα, π.χ. σωστό/λάθος.
Επιπροσθέτως, δεν υπήρχε η επιλογή για προσθήκη αρχείων ελέγχου αξιολόγησης
206 207 208
χωρίς επιρροή στην αρχική αξιολόγηση μιας υποβολής ως θετική ή αρνητική.

\bigskip
209 210 211

Η αρχική σχεδίαση του grader είχε σκοπό τη δημιουργία ενός συστήματος αυτόματης
αξιολόγησης για διαγωνισμούς πληροφορικής, για να χρησιμοποιηθεί κυρίως από την
212 213
ΕΠΥ. Ως αποτέλεσμα, κάθε πρόβλημα αντιστοιχίζεται σε έναν μόνο διαγωνισμό και τόσο
οι διαγωνιζόμενοι όσο και οι υποβολές τους συνδέονται με το πρόβλημα. Για τη χρήση
214 215
του grader σε εργασίες προγραμματισμού, θα μας ήταν προτιμότερο να υπάρχει
διαχωρισμός προβλήματος και υποβολών ώστε τα προβλήματα να μπορούν να
216
επαναχρησιμοποιηθούν ευκολότερα.
217

218
\bigskip
219

220 221
Επιπλέον, κρίθηκε σημαντικό να προστεθεί η Python στις διαθέσιμες γλώσσες υποβολής
καθώς πρόκειται για μια από τις πλέον δημοφιλείς γλώσσες και χρησιμοποιείται ως
222
εισαγωγική γλώσσα προγραμματισμού σε σημαντικά ακαδημαϊκά ιδρύματα, όπως είναι το
223 224 225 226 227
MIT και το Stanford (TODO citation needed). Τέλος, ήταν απαραίτητο να γίνουν μικρές
βελτιστοποιήσεις στη λογική του grader, να προστεθούν μικρότερες δυνατότητες που
επιδιώκουν τη βελτίωση της ευκολίας χρήσης για διαγωνιζόμενους και διαχειριστές και
να αντικατασταθούν απαρχαιωμένα (TODO obsolete, pws na to pw) εργαλεία/βιβλιοθήκες
για την επίτευξη καλύτερης απόδοσης και ασφάλειας.
228

229
\bigskip
230

231
(TODO μηπως αλλη μια summary παραγραφο εδω;;)
232

233 234
\newpage

235
\section{Δομή Εργασίας}
236

237 238 239
Η εργασία ακολουθεί την παρακάτω δομή:

\begin{itemize}
240
  \item Κεφάλαιο 2: Συστήματα Αυτόματης Αξιολόγησης \\
241 242 243
    Παρουσιάζουμε κάποια γνωστά συστήματα αυτόματης αξιολόγησης με παρόμοια
    λειτουργία και σκοπό όπως ο grader. Γίνεται επίσης μια σύγκριση με τις
    δυνατότητες του παρόντος συστήματος.
244
  \item Κεφάλαιο 3: Υπάρχον Σύστημα \\
245 246
    Περιγράφεται η υπάρχουσα δομή και λειτουργία του grader, αναλύοντας τα
    διαφορετικά μέρη του και τις σχέσεις μεταξύ τους.
247 248 249 250 251 252 253 254 255 256 257 258 259
  \item Κεφάλαιο 4: Προσθήκη Ομάδων Αρχείων Ελέγχου \\
    Αναλύεται η σχεδιαστική λογική και η υλοποίηση της νέας δυνατότητας του
    συστήματος, για ομαδοποίηση των αρχείων ελέγχου των προβλημάτων.
  \item Κεφάλαιο 5: Σχεδίαση για ανεξαρτητοποίηση Προβλημάτων από Διαγωνισμούς \\
    Περιγράφεται η υλοποίηση της συγκεκριμένης τροποποίησης για την βελτίωση της
    λειτουργίας του grader στο πλαίσιο προγραμματιστικών ασκήσεων.
  \item Κεφάλαιο 6: Λοιπές Προσθήκες \\
    Στο συγκεκριμένο κεφάλαιο παρατίθενται βελτιώσεις και προσθήκες μικρότερου
    μεγέθους, όπως είναι η προσθήκη της Python και η αλλαγή της βιβλιοθήκης
    MySQL σε PDO.
  \item Κεφάλαιο 7: Συμπεράσματα \\
    Στο τελευταίο κεφάλαιο παρουσιάζονται κάποιες παρατηρήσεις σχετικά με τη
    διπλωματική και αναφέρονται ιδέες για περαιτέρω δυνατότητες και βελτιώσεις.
260
\end{itemize}
261

262

263 264 265 266
\chapter{Συστήματα Αυτόματης Αξιολόγησης}

\chapter{Υπάρχον Σύστημα}

267 268 269 270 271 272 273 274 275 276
Το σύστημα αποτελείται από το το σύστημα αξιολόγησης Kewii, το backend της
εφαρμογής μας που λειτουργεί ως δαίμονας στον εξυπηρετητή με σκοπό την
μεταγλώττιση και αξιολόγηση των υποβολών που λαμβάνει, και από τη διαδικτυακή
εφαρμογή grader, η οποία αναλαμβάνει την αλληλεπίδραση με χρήστες και
διαχειριστές, την (έμμεση) επικοινωνία με τον Kewii και τη συνολική υλοποίηση
της λογικής του συστήματος όσον αφορά στον τρόπο λειτουργίας των επιμέρους
στοιχείων του και τον τρόπο αξιολόγησης.

\section{Στοιχεία και έννοιες του συστήματος}

277 278 279
Στην ενότητα αυτή θα περιγραφούν συνοπτικά τα συστατικά στοιχεία του συστήματος
μας. Η γνώση τους είναι απαραίτητη για να γίνει αντιληπτός ο διαχωρισμός μεταξύ
Kewii και Grader, δηλαδή backend και frontend.
280 281 282 283 284 285 286 287 288 289 290 291

\subsection{Προβλήματα}

Προβλήματα είναι οι ανεξάρτητες ασκήσεις που τίθενται προς επίλυση στους διαγωνιζόμενους/χρήστες. Κάθε πρόβλημα έχει χρονικά όρια εκτέλεσης και όρια μνήμης, όπως και ιδιότητες για τον τρόπο εκτέλεσης και αξιολόγησης. Η αξιολόγηση του γίνεται πάνω σε συγκεκριμένα αρχεία εισόδου και εξόδου, τα αρχεία ελέγχου. Προαιρετικά, ένα πρόβλημα μπορεί, επιπλέον, να διαθέτει ένα πρόγραμμα αξιολόγησης των υποβολών.

\bigskip

Τα προβλήματα έχουν νόημα μόνο μέσα σε διαγωνισμούς, καθώς ο διαγωνιζόμενος
παίρνει μέρος σε διαγωνισμούς που περιέχουν προβλήματα και η τελική βαθμολογία
του είναι το άθροισμα των επιδόσεων του στα προβλήματα του διαγωνισμού. Η
αρχική σχεδίαση του συστήματος είχε ως στόχο τη χρήση αυτού σε διαγωνισμούς
πληροφορικής, οπότε τα προβλήματα είναι συνδεδεμένα στενά τόσο με τον
292
διαγωνισμό που ανήκουν όσο και με τις υποβολές που έχουν γίνει σε αυτά. Κάθε
293 294
πρόβλημα μπορεί να ανήκει μόνο σε ένα διαγωνισμό.

295 296 297 298 299 300
\bigskip

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

301 302
\subsection{Διαγωνισμοί}

303 304 305 306
Οι διαγωνισμοί αντιστοιχούν σε πραγματικούς διαγωνισμούς, εξετάσεις ή σειρές
ασκήσεων. Εμπεριέχουν προβλήματα και είναι ενεργοί/ορατοί σε ένα χρονικό διάστημα
όπου οι διαγωνιζόμενοι μπορούν να υποβάλλουν τις λύσεις τους. Μόλις ολοκληρωθεί η
διεξαγωγή τους, ο διαχειριστής μπορεί να εκκινήσει την τελική αξιολόγηση, κατά την
307
οποία βαθμολογούνται οι ενεργές υποβολές των διαγωνιζόμενων σε όλα τα προβλήματα του
308
διαγωνισμού. Οι διαγωνισμοί μπορούν να είναι ορατοί μόνο από επιλεγμένους χρήστες ή από όλους.
309 310 311

\subsection{Αρχεία Ελέγχου}

312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335
Τα αρχεία ελέγχου είναι ζευγάρια αρχείων εισόδου και εξόδου και ανήκουν σε
προβλήματα. Μια σωστή υποβολή/λύση θα πρέπει για κάθε αρχείο εισόδου
που δέχεται, να παράγει έξοδο ίδια με αυτή του αντίστοιχου αρχείο εξόδου.
Κάθε αρχείο ελέγχου χαρακτηρίζεται από τον τύπο του, αναφορικά με το πότε
εκτελείται και αν είναι ορατό στους χρήστες. Οι τύποι εκτέλεσης αντιστοιχούν
σε χρώματα. Αυτά είναι τα παρακάτω:

\begin{itemize}
  \item \textit{Πορτοκαλί} TODO μηπως φωτο εδω; \\
      Το αρχείο ελέγχου χρησιμοποιείται σε κάθε υποβολή για το συγκεκριμένο πρόβλημα
      αλλά δεν είναι ορατό στους χρήστες.
    \item \textit{Κίτρινο} \\
      Το αρχείο ελέγχου χρησιμοποιείται σε κάθε υποβολή για το συγκεκριμένο πρόβλημα
      και είναι ορατό στους χρήστες.
    \item \textit{Πράσινο} \\
      Το αρχείο ελέγχου χρησιμοποιείται μόνο κατά την τελική αξιολόγηση.
    \item \textit{Μωβ} \\
      Το αρχείο ελέγχου δεν χρησιμοποιείται.
\end{itemize}

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

336 337 338

\subsection{Χρήστες/Διαγωνιζόμενοι}

339 340 341 342 343 344 345
Οι χρήστες ή διαγωνιζόμενοι είναι τα άτομα που αλληλεπιδρούν με το σύστημα με σκοπό
την υποβολή λύσεων στους διαγωνισμούς που συμμετέχουν. Οι διαχειριστές αποτελούν
κι αυτοί χρήστες, με τη διαφορά ότι έχουν δικαίωμα πρόσβασης στις σελίδες διαχείρισης
διαγωνισμών και προβλημάτων. Οι τελευταίοι έχουν επίσης δικαίωμα να εισάγουν νέους
χρήστες από ένα αρχείο, να ορίσουν την ορατότητα των διαγωνισμών για συγκεκριμένους
διαγωνιζόμενους και να απαντήσουν σε μηνύματα αυτών.

346 347
\subsection{Υποβολές}

348 349 350 351 352 353 354 355 356 357 358
Η υποβολή μιας λύσης εμπεριέχει το "ανέβασμα" του κώδικα του διαγωνιζόμενου για
να γίνει η μεταγλώττιση του στον εξυπηρετητή, να εκτελεστεί από τον Kewii για
κάθε αρχείο ελέγχου που αντιστοιχεί στο είδος της υποβολής και να αξιολογηθεί η
ορθότητα της εξόδου. Οι υποβολές χωρίζονται σε δύο κύριες κατηγορίες, την
κανονική και την τελική. Ουσιαστικά, όλες οι υποβολές των διαγωνιζόμενων είναι
κανονικές και εφόσον υπάρχει, για έναν διαγωνιζόμενο, τουλάχιστον μία υποβολή
που περνάει όλα τα αρχεία ελέγχου στα οποία αξιολογήθηκε, αυτή θεωρείται ενεργή
για αυτόν. Όταν ολοκληρωθεί η περίοδος ανοιχτών υποβολών ενός διαγωνισμού, όλες
οι ενεργές υποβολές για κάθε πρόβλημα του διαγωνισμού επαναυποβάλλονται για την
τελική αξιολόγηση τους.

359
\subsection{Προγράμματα Αξιολόγησης}
360

361 362 363 364 365 366 367 368 369
Οι υποβολές σε κάθε πρόβλημα αξιολογούνται με σύγκριση της εξόδου του υποβληθέντος
προγράμματος με αυτήν του αρχείου ελέγχου για την αντίστοιχη είσοδο. Εξαίρεση σε
αυτό τον τρόπο αξιολόγησης, αποτελούν τα προβλήματα που διαθέτουν το δικό τους
πρόγραμμα αξιολόγησης το οποίο αναλαμβάνει να συγκρίνει την αναμενόμενη έξοδο
με αυτήν που παρήγαγε το υποβληθέν πρόγραμμα και να βαθμολογήσει αυτή την έξοδο
στην κλίμακα [0, 1]. Το πρόγραμμα αξιολόγησης είναι και αυτό αποθηκευμένο στον
εξυπηρετητή και μεταγλωττίζεται και εκτελείται από τον Kewii.


370 371
\section{Σύστημα αξιολόγησης Kewii}

372
Ο Kewii είναι μια εφαρμογή γραμμένη σε γλώσσα C και τρέχει στον εξυπηρετητή
373
ελέγχοντας διαρκώς για νέες υποβολές. Για κάθε νέα υποβολή που εντοπίζει,
374 375
βρίσκει τον πηγαίο κώδικα που έχει αποθηκευτεί από τον grader μαζί με συγκεκριμένα
μεταδεδομένα, μεταγλωττίζει τον κώδικα δημιουργώντας το εκτελέσιμο αρχείο και το
376
εκτελεί χρησιμοποιώντας τα απαραίτητα μέτρα ασφαλείας ώστε να συγκρίνει την έξοδο
377
για κάθε αρχείο ελέγχου με την σωστή. Μόλις τελειώσει η εκτέλεση ή ξεπεραστούν τα
378 379 380 381 382 383 384 385 386 387 388 389 390
όρια της, ενημερώνει τη βάση δεδομένων, με χρήση ενός PHP script, με την έκβαση της
εκτέλεσης και ειδοποιεί το grader καλώντας ένα μοναδικό για κάθε υποβολή σύνδεσμο
(callback) ώστε αυτός να αναλάβει την ανάλυση των αποτελεσμάτων.

\bigskip

Κάθε υποβολή έχει έναν μοναδικό κωδικό, ο οποίος χρησιμοποιείται για την
αλληλεπίδραση με το grader κατά το callback, όπως και έναν αύξοντα αριθμό που
χρησιμεύει στον Kewii για την διατήρηση της κατάστασης των εκτελέσεων. Τα
μεταδεδομένα που εμπεριέχονται σε κάθε υποβολή και είναι απαραίτητα για την
αξιολόγηση της είναι τα παρακάτω:

\begin{itemize}
391 392
  \item Όνομα του προβλήματος
  \item Γλώσσα υποβολής
393 394 395
  \item Αρχεία ελέγχου που θα χρησιμοποιηθούν
  \item Όριο μνήμης και χρόνου εκτέλεσης
  \item Είδος εκτέλεσης
396
  \item Τρόπος αξιολόγησης
397 398 399
\end{itemize}

Κάθε πρόβλημα πρέπει να έχει μοναδικό όνομα και είναι απαραίτητο ώστε να
400
επιλεχθούν τα σωστά αρχεία ελέγχου. Οι γλώσσες υποβολής που υποστηρίζονται
401
είναι: C, C++, Pascal, Pazcal, F\#, OCaml, SML, Java, Fortran και Haskell. Το
402 403 404
είδος εκτέλεσης μπορεί να είναι batch ή interactive/partial. Στην πρώτη
περίπτωση τα προγράμματα που υποβάλλονται αποτελούν ανεξάρτητες λύσεις ενώ στην
δεύτερη ο κώδικάς αλληλεπιδρά με συγκεκριμένες βιβλιοθήκες ή εντάσσεται σε έναν
405 406 407 408 409 410
κοινό κορμό που έχει τεθεί για το συγκεκριμένο πρόβλημα. Ο τρόπος αξιολόγησης
μπορεί να είναι κανονικός ή ειδικός. Στον κανονικό ελέγχεται η ομοιότητα της
εξόδου του προγράμματος της υποβολής με την ορθή απάντηση, ενώ στον ειδική
αξιολόγηση γίνεται χρήση ενός προγράμματος, που θα έχει τεθεί για το
συγκεκριμένο πρόβλημα, ώστε να βαθμολογηθεί η λύση, επιτρέποντας έτσι την
ύπαρξη προβλημάτων βελτιστοποίησης.
411 412 413

\bigskip

414 415 416 417 418 419 420 421 422 423
Οι υποβολές που στέλνονται στον Kewii αποθηκεύονται σε μια ουρά σύμφωνα με τον
αύξοντα αριθμό που παίρνουν και ο Kewii γνωρίζει κάθε στιγμή ποιος θα είναι ο
επόμενος αριθμός υποβολής που θα αξιολογήσει. Το πρόγραμμα κοιμάται έως ότου
βρει μια νέα υποβολή ελέγχοντας για αρχεία με τον συγκεκριμένο αριθμό. Επίσης,
αν η διαδικασία της αξιολόγησης διακοπεί ενδιάμεσα, μπορεί να συνεχίσει από το
σημείο που σταμάτησε.  Μια ακριβέστερη περιγραφή της ροής φαίνεται στο παρακάτω
σχήμα:

(TODO σχημα εδώ)

424
\bigskip
425

426 427 428 429 430 431 432 433 434 435
Γενικά, ο Kewii περιορίζεται στο να δέχεται υποβολές για συγκεκριμένα προβλήματα
με συγκεκριμένα αρχεία ελέγχου (και σε μερικές περιπτώσεις συγκεκριμένο πρόγραμμα
αξιολόγησης). Αξιολογεί την κάθε υποβολή με 0 - λάθος και 1 - σωστό για κάθε αρχείο
ή αναθέτει την αξιολόγηση στο αρμόδιο πρόγραμμα που θα επιστρέψει μια τιμή ανάμεσα
στα 0 και 1. Τότε οι "ευθύνες" του τελειώνουν, δηλαδή δεν ασχολείται με την συνολική
αξιολόγηση των διαγωνισμών και των προβλημάτων και ποια υποβολή θεωρείται ενεργή,
ούτε με το ποια αρχεία ελέγχου θα επιλεγούν κατά την υποβολή. Τα παραπάνω κρίνονται
σημαντικά γιατί θα μας επιτρέψουν να επανασχεδιάσουμε τον αλγόριθμο της υποβολής,
δημιουργώντας ομάδες αρχείων ελέγχου, όπως και άλλα κομμάτια του Grader χωρίς να
χρειαστεί να τροποποιήσουμε τον Kewii.
436

437 438
\section{Διαδικτυακή εφαρμογή Grader}

439 440 441 442 443 444 445
Ο Grader είναι μια web εφαρμογή υλοποιημένη σε PHP και HTML/CSS/JS, η οποία αποτελεί
το frontend και μέρος του backend του συστήματος μας. Ως frontend εφαρμογή
αναλαμβάνει να παρουσιάσει σε διαγωνιζόμενους και διαχειριστές τις σελίδες
διαχείρισης, υποβολών και αποτελεσμάτων, ενώ ως backend αναλαμβάνει την υλοποίηση της
λογικής του συστήματος, των διάφορων αλγορίθμων και ροών και την επικοινωνία με τη
βάση δεδομένων και τον Kewii.

446
\chapter{Προσθήκη Ομάδων Αρχείων Ελέγχου}
447

448

449 450
\chapter{Σχεδίαση για διαχωρισμό Προβλημάτων - Διαγωνισμών}

451

452 453 454 455 456 457
\chapter{Λοιπές Προσθήκες}

\section{Προσθήκη γλώσσας προγραμματισμού Python}

\section{Προσθήκη blue tag για μη απαραίτητα αρχεία ελέγχου}

458

459 460
\chapter{Συμπεράσματα}

461
\section{Καταληκτικές Παρατηρήσεις}
462 463

\section{Μελλοντική Έρευνα}
464

465

466 467
%%%  Bibliography

468
\bibliographystyle{softlab-thesis}
469 470 471 472 473
\bibliography{test}

%%%  End of document

\end{document}