Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in
Toggle navigation
S
softlab-thesis
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Antonios Angelakis
softlab-thesis
Commits
c430e460
Commit
c430e460
authored
Mar 17, 2018
by
Antonios Angelakis
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Finish editing in 5,6,7 and bibliography
parent
caf94ce9
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
223 additions
and
178 deletions
+223
-178
thesis.bib
thesis.bib
+40
-4
thesis.tex
thesis.tex
+183
-174
No files found.
thesis.bib
View file @
c430e460
@misc{
website:
popularpython,
@misc{popularpython,
author = "Philip Guo",
title = "Python Is Now the Most Popular Introductory Teaching Language at Top U.s. Universities",
month = "July",
...
...
@@ -6,7 +6,7 @@
note = "https://cacm.acm.org/blogs/blog-cacm/176450-python-is-now-the-most-popular-introductory-teaching-language-at-top-u-s-universities/fulltext"
}
@misc{
website:
pythongrowth,
@misc{pythongrowth,
author = "David Robinson",
title = "The Incredible Growth of Python",
month = "September",
...
...
@@ -14,7 +14,7 @@
note = "https://stackoverflow.blog/2017/09/06/incredible-growth-python/"
}
@misc{w
ebsite:w
hypython,
@misc{whypython,
author = "David Robinson",
title = "Why is Python Growing So Quickly?",
month = "September",
...
...
@@ -92,7 +92,6 @@
year={2015},
}
@MastersThesis{Rozhkov,
author={Рожков М.},
title={Система автоматического тестирования программ и организации соревнований по программированию},
...
...
@@ -100,3 +99,40 @@
address={Russia},
year={2004},
}
@misc{deprecation,
author={Adam Harvey},
title={Request for Comments: ext/mysql deprecation},
month={December},
year={2012},
howpublished={https://wiki.php.net/rfc/mysql\_deprecation},
note={Accessed: 2018-03-17},
}
@misc{mysqlapis,
author = "PHP Contributors",
title = "Choosing an API",
note = "https://secure.php.net/manual/en/mysqlinfo.api.choosing.php"
}
@misc{pdo,
author = "PHP Contributors",
title = "PHP Data Objects",
note = "https://secure.php.net/manual/en/book.pdo.php"
}
@misc{dsn,
author = "Wikipedia contributors",
title = "Data source name --- Wikipedia{,} The Free Encyclopedia",
year = "2017",
url = "https://en.wikipedia.org/w/index.php?title=Data_source_name&oldid=796073781",
note = "[Online; accessed 17-March-2018]"
}
@misc{pep8,
author={Guido van Rossum <guido at python.org>, Barry Warsaw <barry at python.org>, Nick Coghlan <ncoghlan at gmail.com>},
title={PEP 8 -- Style Guide for Python Code},
month={July},
year={2001},
howpublished={https://www.python.org/dev/peps/pep-0008/},
note={Accessed: 2018-03-17},
}
thesis.tex
View file @
c430e460
...
...
@@ -127,7 +127,7 @@ Software development, Free and open source software.
Επιπλέον, κρίθηκε σημαντικό να προστεθεί η Python στις διαθέσιμες γλώσσες
υποβολής καθώς πρόκειται για μια από τις πλέον δημοφιλείς γλώσσες και
χρησιμοποιείται ως εισαγωγική γλώσσα προγραμματισμού σε σπουδαία ακαδημαϊκά
ιδρύματα, όπως είναι το MIT και το Stanford
\cite
{
website:
popularpython
}
.
ιδρύματα, όπως είναι το MIT και το Stanford
\cite
{
popularpython
}
.
Τέλος, ήταν απαραίτητο να γίνουν μικρές βελτιστοποιήσεις στη λογική του Grader,
να προστεθούν μικρότερες δυνατότητες που επιδιώκουν τη βελτίωση της ευκολίας
χρήσης για διαγωνιζόμενους και διαχειριστές και να αντικατασταθούν
...
...
@@ -265,7 +265,7 @@ Public License), η οποία επιτρέπει εμπορική χρήση,
\bigskip
Όλες οι παραπάνω λειτουργίες αλληλεπιδρούν μεταξύ τους με τον τρόπο που φαίνεται
στ
ην εικόν
α 2.1.
στ
ο σχήμ
α 2.1.
\begin{figure}
\centering
...
...
@@ -904,7 +904,7 @@ Grader για διοργανώσεις και όχι για ακαδημαϊκο
\bigskip
Οι αλλαγές που αφορούν στο frontend κομμάτι έγιναν κυρίως στη σελίδα της
διαχείρισης αρχείων ελέγχων. Όπως φαίνεται στ
ην εικόν
α 4.1, δίπλα σε κάθε
διαχείρισης αρχείων ελέγχων. Όπως φαίνεται στ
ο σχήμ
α 4.1, δίπλα σε κάθε
αρχείο ελέγχου είναι τα χρωματικά tags και χάρη στη CSS διακρίνεται το
επιλεγμένο. Για την προσθήκη του blue tag, χρησιμοποιήθηκε η εικόνα από το
hellenico, και αυτή προστέθηκε μετά το κίτρινο tag. Αντίστοιχα, προστέθηκε η
...
...
@@ -1017,7 +1017,7 @@ testcase groups και τα χαρακτηριστικά τους (όνομα,
τα πεδία testcaseID και groupID, πεδίο για τον τύπο εκτέλεσης του αρχείου
ελέγχου στη συγκεκριμένο group, επιτρέποντας ένα αρχείο π.χ. να ανήκει ως
φανερό (κίτρινο) σε ένα group και ως τελικό (πράσινο) σε ένα άλλο. Οι σχετικοί
πίνακες παρουσιάζονται στ
ις εικόνες
4.2 και 4.3.
πίνακες παρουσιάζονται στ
α σχήματα
4.2 και 4.3.
\begin{figure}
...
...
@@ -1061,7 +1061,7 @@ testcase groups και τα χαρακτηριστικά τους (όνομα,
βαθμολογίες τους και το ποια αρχεία εμπεριέχει η κάθε μια, να εμφανίζεται στη
συγκεκριμένη σελίδα χωρίς να είναι απαραίτητη η μετάβαση στη σελίδα της
διαχείρισης ομάδας αρχείων ελέγχου. Οι δύο προαναφερθείσες σελίδες εμφανίζονται
στ
ις εικόνες
4.4 και 4.5.
στ
α σχήματα
4.4 και 4.5.
\bigskip
...
...
@@ -1157,7 +1157,7 @@ testcase groups και τα χαρακτηριστικά τους (όνομα,
μερικό refactoring των κλάσεων και των συναρτήσεων, χρησιμοποιώντας πολλές από
τις αρχές που περιγράφονται στο Clean Code του Robert Martin
\cite
{
martin2009clean
}
. Μέρος των αλλαγών ήταν και η προσθήκη ενός πεδίου στον
πίνακα των υποβολών, με τίτλο resultsjson (
εικόν
α 4.3), το οποίο περιέχει τα
πίνακα των υποβολών, με τίτλο resultsjson (
σχήμ
α 4.3), το οποίο περιέχει τα
αναλυτικά αποτελέσματα μιας υποβολής, κωδικοποιημένα σε μορφή JSON, έτσι ώστε
να μην υπολογίζονται κάθε φορά που απαιτούνται. Επιπλέον, αλλαγές έγιναν ώστε
να αφαιρεθούν κομμάτια επαναλαμβανόμενου κώδικα με την αντίστοιχη δημιουργία
...
...
@@ -1165,8 +1165,6 @@ testcase groups και τα χαρακτηριστικά τους (όνομα,
μείωση της πολυπλοκότητας μεγάλων κομματιών κώδικα με δημιουργία μικρότερων
συναρτήσεων με περιγραφικά ονόματα.
\bigskip
\chapter
{
Σχεδίαση για διαχωρισμό Προβλημάτων - Διαγωνισμών
}
...
...
@@ -1175,31 +1173,28 @@ testcase groups και τα χαρακτηριστικά τους (όνομα,
στο πλαίσιο μαθημάτων προγραμματισμού και σειρών ασκήσεων. Αυτό απαιτεί την
μερική αποσύνδεση των προβλημάτων από τους διαγωνισμούς ώστε αυτά να μπορούν
να επαναχρησιμοποιηθούν. Θα αναλύσουμε πρώτα το κίνητρο για την αλλαγή αυτή
και έπειτα
οι
λεπτομέρειες της υλοποίησης.
και έπειτα
τις
λεπτομέρειες της υλοποίησης.
\section
{
Κίνητρο
}
Ο πρωταρχικός στόχος που δημιουργήθηκε ο Grader ήταν η χρήση του για διαγωνισμούς
πληροφορικής. Κάθε διαγωνισμός θα αποτελούσε ξεχωριστό, one-time γεγονός με
προβλήματα που θα είχαν δημιουργηθεί για αυτόν, διαγωνιζόμενους "μιας χρήσης"
και υποβολές άρρηκτα συνδεδεμένες τόσο στον διαγωνισμό όσο και στο εκάστοτε
πρόβλημα.
πληροφορικής. Κάθε διαγωνισμός θα αποτελούσε ξεχωριστό, μεμονωμένο γεγονός με
προβλήματα που θα είχαν δημιουργηθεί για το συγκεκριμένο διαγωνισμό και υποβολές
που αντιστοιχούν αποκλειστικά στο πρόβλημα.
\bigskip
Τα προβλήματα, έπειτα από τη δημιουργία τους, παραμένουν ανένταχτα, στην κατηγορία
"Προβλήματα εκτός διαγωνισμών" της σελίδας διαχείρισης
όπως φαίνεται και στο σχήμα 5.1. Το επόμενο βήμα είναι η μετακίνηση τους
σε κάποιον διαγωνισμό με χρήση του μενού στα δεξιά του προβλήματος. Η μετακίνηση
αυτού του τύπου είναι ο μόνος τρόπος να επαναχρησιμοποιηθεί το πρόβλημα και σε
άλλους διαγωνισμούς, αφότου τελειώσει αυτός για τον οποίο δημιουργήθηκε
(ουσιαστικά, ο πρώτος στον οποίο μετακινήθηκε). Το θέμα που δημιουργείται, σε αυτό
το σημείο, είναι ότι κατά τη μετακίνηση του, το πρόβλημα διατηρεί όλες τις
προηγούμενες υποβολές του, οι οποίες πρακτικά αγνοούνται στο νέο διαγωνισμό, ενώ
ο προηγούμενος διαγωνισμός χάνει το πρόβλημα που είχε. Όλα τα παραπάνω οφείλονται
στον τρόπο που είναι σχεδιασμένη η βάση, ο οποίος παρουσιάζεται παρακάτω.
\bigskip
Τα προβλήματα, έπειτα από τη δημιουργία τους, παραμένουν ανένταχτα, στην
κατηγορία "Προβλήματα εκτός διαγωνισμών" της σελίδας διαχείρισης όπως φαίνεται
και στο σχήμα 5.1. Το επόμενο βήμα είναι η μετακίνηση τους σε κάποιον
διαγωνισμό με χρήση του μενού στα δεξιά του προβλήματος. Η μετακίνηση αυτού του
τύπου είναι ο μόνος τρόπος να επαναχρησιμοποιηθεί το πρόβλημα και σε άλλους
διαγωνισμούς, αφότου τελειώσει αυτός για τον οποίο δημιουργήθηκε (ουσιαστικά, ο
πρώτος στον οποίο μετακινήθηκε). Το θέμα που δημιουργείται σε αυτό το σημείο
είναι ότι κατά τη μετακίνηση του, το πρόβλημα διατηρεί όλες τις προηγούμενες
υποβολές του, οι οποίες πρακτικά αγνοούνται στο νέο διαγωνισμό, ενώ ο
προηγούμενος διαγωνισμός χάνει το πρόβλημα που είχε. Όλα τα παραπάνω οφείλονται
στον τρόπο που είναι σχεδιασμένη η βάση, ο οποίος παρουσιάζεται στο σχήμα 5.2.
\begin{figure}
\centering
...
...
@@ -1232,10 +1227,15 @@ testcase groups και τα χαρακτηριστικά τους (όνομα,
\bigskip
Τέλος, είναι αξιοσημείωτος ο τρόπος που στον πίνακα finalresults, στον
οποίο καταχωρούνται τα αποτελέσματα μετά την τελική αξιολόγηση, αποθηκεύονται
τα επιμέρους σκορ των προβλημάτων του· χωρισμένα απλά με κόμμα, σύμφωνα με μια
αύξουσα ταξινόμηση των id των προβλημάτων που περιείχε κατά την τελική αξιολόγηση.
Τέλος, είναι αξιοσημείωτος ο τρόπος που στον πίνακα finalresults, στον οποίο
καταχωρούνται τα αποτελέσματα μετά την τελική αξιολόγηση, αποθηκεύονται τα
επιμέρους σκορ των προβλημάτων του. Αυτό γίνεται στο πεδίο scoreDetails, όπου
εισάγονται οι βαθμολογίες των προβλημάτων του διαγωνισμού χωρισμένες απλά με
κόμμα, σύμφωνα με μια αύξουσα ταξινόμηση των id των προβλημάτων που περιείχε ο
διαγωνισμός κατά την τελική αξιολόγηση.
\bigskip
Παραδείγματος χάρη, αν ο διαγωνισμός 15 περιέχει τα προβλήματα 48 και 51 και ένας
διαγωνιζόμενος έχει λάβει 7 βαθμούς στο πρώτο και 9 στο δεύτερο, το πεδίο score θα
έχει την τιμή 16 και το πεδίο scoreDetails θα έχει την τιμή 7,9. Όπως γίνεται
...
...
@@ -1248,23 +1248,23 @@ testcase groups και τα χαρακτηριστικά τους (όνομα,
\section
{
Υλοποίηση
}
Η κύρια λειτουργική αλλαγή/δυνατότητα που θα προστεθεί είναι αυτή της προσθήκης
των προβλημάτων σε νέους διαγωνισμούς χωρίς να επηρεάζονται οι προηγούμενοι
.
Το κύριο μέρος της υλοποίησης για τη συγκεκριμένη δυνατότητα/βελτίωση αποτελεί
η αλλαγή στους πίνακες της βάσης και στις σχέσεις
μεταξύ τους.
των προβλημάτων σε νέους διαγωνισμούς χωρίς να επηρεάζονται οι προηγούμενοι
, με
αντιγραφή δηλαδή των προβλημάτων. Το κυριότερο μέρος της υλοποίησης έχει να κάνει
με την αλλαγή των πινάκων της βάσης και των σχέσεων
μεταξύ τους.
\bigskip
Αρχικά, θα πρέπει να δημιουργηθεί ένας πίνακας που να συνδέει κάθε διαγωνισμό
με τα προβλήματα που διαθέτει. Το πεδίο στον πίνακα των προβλημάτων που έως
τώρα χρησίμευε για αυτή τη σύνδεση
, δεν αρκεί αφού πλέον θέλουμε
να υπάρχει
σχέση
πολλά προς ένα για προβλήματα και διαγωνισμούς. Ο νέος πίνακας χρειάζεται
απλά να περιέχει τα πεδία competitionID και probID.
τώρα χρησίμευε για αυτή τη σύνδεση
δεν αρκεί αφού θέλουμε πλέον
να υπάρχει
σχέση
"πολλά προς ένα¨ για προβλήματα και διαγωνισμούς. Ο νέος πίνακας
χρειάζεται
απλά να περιέχει τα πεδία competitionID και probID.
\bigskip
Όπως αναφέρθηκε και παραπάνω, οι υποβολές θα πρέπει να συνδέονται με το
διαγωνισμό και όχι με το πρόβλημα. Αυτό θα επιτευχθεί με την προσθήκη του
πεδίου competitionID στον πίνακα των υποβολών. Με αυτό τον τρόπο
,
είναι εύκολο να
πεδίου competitionID στον πίνακα των υποβολών. Με αυτό τον τρόπο είναι εύκολο να
γίνει ο διαχωρισμός των υποβολών ανά διαγωνισμό και πρόβλημα ώστε κάθε πρόβλημα
να μπορεί να έχει ξεχωριστά δεδομένα υποβολών και αποτελεσμάτων σε κάθε
διαγωνισμό που ανήκει.
...
...
@@ -1293,7 +1293,7 @@ testcase groups και τα χαρακτηριστικά τους (όνομα,
σχήμα 5.3. Ο πίνακας CompProblems είναι η νέα προσθήκη που είναι αναγκαία για
τη σύνδεση προβλημάτων με διαγωνισμός διατηρώντας μια κανονικοποιημένη βάση για
αποφυγή του πλεονασμού δεδομένων. Νέα πεδία προστέθηκαν επίσης και στους
πίνακες
submissions και finalr
esults.
πίνακες
Submissions και FinalR
esults.
\bigskip
...
...
@@ -1308,18 +1308,17 @@ testcase groups και τα χαρακτηριστικά τους (όνομα,
FinalResults.
}
\end{figure}
\bigskip
(TODO: ισως subsection) Έχοντας αλλάξει τη βάση, αυτό που μένει είναι η
υλοποίηση των αλλαγών στο Grader ώστε να δίνεται η δυνατότητα της αντιγραφής
των προβλημάτων και να αξιοποιούνται τα νέα πεδία και πίνακες. Η πλειοψηφία των
αλλαγών αφορούν τη σελίδα διαχείρισης, καθώς εκεί πρέπει να αλλάξει ο τρόπος
που αντιστοιχίζονται τα προβλήματα με τους διαγωνισμούς, όπως και οι υποβολές
αυτών. Ακόμα, η λειτουργία του πλήκτρου μετακίνησης αλλάζει σε αντιγραφή, πάλι
επιλέγοντας διαγωνισμό. Τέλος, στο κάτω μέρος της σελίδας, όπου αναγράφονταν
τα
ανένταχτα προβλήματα, κρίθηκε προτιμότερο να αναγράφονται όλα τα προβλήματα
ώστε να είναι ευκολότερο να αναζητηθεί και να αντιγραφεί κάποιο σε ένα νέο
δια
γωνισμό. Η νέα διαχείριση παρουσιάζεται στις φωτογραφίες
5.4 και 5.5.
Έχοντας αλλάξει τη βάση, το επόμενο βήμα ήταν η υλοποίηση των αλλαγών στον
Grader ώστε να δίνεται η δυνατότητα της αντιγραφής των προβλημάτων και να
αξιοποιούνται τα νέα πεδία και πίνακες. Η πλειοψηφία των αλλαγών αφορούν τη
σελίδα διαχείρισης, καθώς εκεί πρέπει να αλλάξει ο τρόπος που αντιστοιχίζονται
τα προβλήματα με τους διαγωνισμούς, όπως και οι υποβολές αυτών. Ακόμα, η
λειτουργία του πλήκτρου μετακίνησης αλλάζει σε αντιγραφή, πάλι επιλέγοντας
διαγωνισμό. Τέλος, στο κάτω μέρος της σελίδας, όπου αναγράφονταν τα ανένταχ
τα
προβλήματα, κρίθηκε προτιμότερο να αναγράφονται όλα τα προβλήματα ώστε να είναι
ευκολότερο να αναζητηθεί και να αντιγραφεί κάποιο σε ένα νέο διαγωνισμό. Η νέα
δια
χείριση παρουσιάζεται στα σχήματα
5.4 και 5.5.
\bigskip
...
...
@@ -1330,7 +1329,7 @@ testcase groups και τα χαρακτηριστικά τους (όνομα,
δεν έχει κάποια διαφορά εμφανισιακά, αλλά πλέον επιτρέπεται η χρήση ενός
προβλήματος σε πολλαπλούς διαγωνισμούς, όπως φαίνεται στο πρόβλημα sudokugame.
Το πρώην πλήκτρο μεταφοράς στα δεξιά κάθε προβλήματος πλέον αντιγράφει το πρόβλημα
στον επιλεγμένο διαγωνισμό.
}
στον επιλεγμένο διαγωνισμό
, ενώ το X το αφαιρεί χωρίς να το διαγράφει
.
}
\end{figure}
\begin{figure}
...
...
@@ -1347,30 +1346,31 @@ testcase groups και τα χαρακτηριστικά τους (όνομα,
διαγωνισμό, απλά αλλάζει τους συσχετισμούς στη βάση, προσθέτοντας μια νέα
εγγραφή στον CompProblems. Τόσο τα αρχεία ελέγχου, που είναι αποθηκευμένα στο
δίσκο του εξυπηρετητή για να διαβάζονται από τον Kewii, όσο και οι ομάδες
αρχείων ελέγχου, που αντιστοιχίζονται στη βάση με τα προβλήματα, δεν
αντιγράφονται και, ως αποτέλεσμα χαρακτηρίζουν το πρόβλημα σε όλους τους
διαγωνισμούς που αυτό ανήκει. Η σχεδιαστική επιλογή έγινε κυρίως γιατί το
πρόβλημα δεν αναμένεται να αλλάζει σημαντικά κατά την επαναχρησιμοποίηση του.
Το ενδεχόμενο να χρειαστεί κάποια αλλαγή σε πρόβλημα που ανήκει ήδη σε
παλαιότερους ή παράλληλους διαγωνισμούς δε μπορεί να αποκλειστεί, και για το
λόγο αυτό προστέθηκε ένα προειδοποιητικό μήνυμα προς όποιο διαχειριστή
επιχειρήσει τέτοιες αλλαγές.
αρχείων ελέγχου που αντιστοιχίζονται στη βάση με τα προβλήματα, δεν
αντιγράφονται και ως αποτέλεσμα αντιστοιχούν στο πρόβλημα σε όλους τους
διαγωνισμούς που αυτό ανήκει. Η συγκεκριμένη σχεδιαστική επιλογή στηρίχθηκε στο
σκεπτικό ότι το πρόβλημα δεν αναμένεται να αλλάζει σημαντικά κατά την
επαναχρησιμοποίηση του. Το ενδεχόμενο να χρειαστεί κάποια αλλαγή σε πρόβλημα
που ανήκει ήδη σε παλαιότερους ή παράλληλους διαγωνισμούς δε μπορεί να
αποκλειστεί, και για το λόγο αυτό προστέθηκε ένα προειδοποιητικό μήνυμα στη
σελίδα διαχείρισης αρχείων ελέγχου, προς όποιο διαχειριστή επιχειρήσει τέτοιες
αλλαγές.
\chapter
{
Λοιπές Προσθήκες
}
Εκτός από τις νέες δυνατότητες που αναλύθηκαν στα προηγούμενα κεφάλαια,
υλοποιήθηκαν και αλλαγές μικρότερης πολυπλοκότητας, που δε χρειάζονται
ολόκληρο κεφάλαιο για να περιγραφούν
. Οι σημαντικότερες από αυτές
θα αναφερθούν σε αυτό το κεφάλαιο
.
ολόκληρο κεφάλαιο για να περιγραφούν
ξεχωριστά. Στο συγκεκριμένο κεφάλαιο θα
αναφερθούν οι σημαντικότερες από αυτές
.
\section
{
Προσθήκη γλώσσας προγραμματισμού Python
}
\subsection
{
Προσθήκη γλωσσών στο Grader/Kewii
}
Ο Grader, όπως έχει αναφερθεί και σε προηγούμενα κεφάλαια, επιτρέπει
στους διαγωνιζόμενους την υποβολή λύσεων σε οποιαδήποτε γλώσσα
προγραμματισμού από τις υποστηριζόμενες. Οι υποστηριζόμενες γλώσσες
προγραμματισμού είναι οι παρακάτω:
Ο Grader, όπως έχει αναφερθεί και σε προηγούμενα κεφάλαια, επιτρέπει στους
διαγωνιζόμενους την υποβολή λύσεων σε οποιαδήποτε γλώσσα προγραμματισμού
υποστηρίζεται. Οι υποστηριζόμενες γλώσσες προγραμματισμού είναι οι παρακάτω:
\begin{itemize}
\setlength\itemsep
{
0em
}
...
...
@@ -1387,13 +1387,14 @@ testcase groups και τα χαρακτηριστικά τους (όνομα,
\bigskip
Η προσθήκη μιας νέας γλώσσας στο Grader δεν είναι δύσκολη διαδικασία.
Όσον αφορά στο frontend, αρκεί απλά η προσθήκη στο μενού επιλογής γλώσσας
στην υποβολή και η αντίστοιχη κωδικοποίηση (που γίνεται συνήθως με την επέκταση
των πηγαίων αρχείων της γλώσσας) που θα χρησιμοποιηθεί για την καταχώρηση της
υποβολής σε βάση και Kewii. Όπως ο Kewii δεν εμπλέκεται στη διαδικασία της
αξιολόγησης, ο Grader, αντίστοιχα, έχει καθήκον απλά να περάσει την επιλογή
της γλώσσας και τον πηγαίο κώδικα ώστε να αναλάβει ο Kewii τον έλεγχο.
Η προσθήκη μιας νέας γλώσσας στο Grader δεν αποτελεί δύσκολη διαδικασία. Όσον
αφορά στο frontend, αρκεί απλά η προσθήκη στο μενού επιλογής γλώσσας στην
υποβολή και η αντίστοιχη κωδικοποίηση που θα χρησιμοποιηθεί για την καταχώρηση
της υποβολής σε βάση και Kewii (γίνεται συνήθως με χρήση της επέκταση των
πηγαίων αρχείων της γλώσσας, π.χ. cpp για C++). Όπως ο Kewii δεν εμπλέκεται
στη διαδικασία της αξιολόγησης, ο Grader, αντίστοιχα, έχει καθήκον απλά να
περάσει την επιλογή της γλώσσας και τον πηγαίο κώδικα ώστε να αναλάβει ο Kewii
τον έλεγχο.
\bigskip
...
...
@@ -1403,42 +1404,42 @@ testcase groups και τα χαρακτηριστικά τους (όνομα,
γίνεται σε ένα περιορισμένο περιβάλλον, με τη χρήση μόνο των αναγκαίων
μεταγλωττιστών και βιβλιοθηκών. Για την προσθήκη μιας γλώσσας θα πρέπει να
εγκατασταθούν στο συγκεκριμένο περιβάλλον τα αντίστοιχα εκτελέσιμα και να
τροποποιηθεί
ένα αρχείο διαμόρφωσης που περιέχει τις αντιστοιχίσεις γλωσσ
ών
και εντολών
μεταγλώττισης/εκτέλεσης.
τροποποιηθεί
το αρχείο που περιέχει τις αντιστοιχίσεις γλωσσών και εντολ
ών
μεταγλώττισης/εκτέλεσης.
\subsection
{
Επιλογή Python
}
% TODO: ερωτηση παπασπυρου για φακτορ παηθον
Η Python είναι μια interpreted προγραμματιστική γλώσσα υψηλού επιπέδου
γενικού σκοπού. Διαθέτει πολύ πλούσια βιβλιοθήκη για μια ευρεία γκάμα
λειτουργιών και επιστημονικών πεδίων. Έχει σχεδιαστεί με έμφαση στην
αναγνωσιμότητα και στη χρησιμοποίηση λιγότερου κώδικα, ενώ ευνοεί πολλαπλά
προγραμματιστικά στυλ όπως είναι ο δομημένος, ο αντικειμενοστρεφής και ο συναρτησιακό
προγραμματισμός.
Η Python είναι μια interpreted προγραμματιστική γλώσσα υψηλού επιπέδου
γενικού
σκοπού. Διαθέτει πολύ πλούσια βιβλιοθήκη για μια ευρεία γκάμα λειτουργιών και
επιστημονικών πεδίων. Έχει σχεδιαστεί με έμφαση στην αναγνωσιμότητα και στη
χρησιμοποίηση λιγότερου κώδικα, ενώ ευνοεί πολλαπλά προγραμματιστικά στυλ όπως
είναι ο δομημένος, ο αντικειμενοστρεφής και ο συναρτησιακός
προγραμματισμός.
\bigskip
Δεδομένης της δημοτικότητας της Python και της ευκολίας χρήσης της, είναι μια
απαραίτητη προσθήκη στο Grader που πιθανότατα θα εκτιμηθεί από διαγωνιζόμενους
μαθητές και φοιτητές. Η Python δε λείπει από κανένα από τα συστήματα
αξιολόγησης που μελετήθηκαν, ενώ πλέον αποτελεί τη δημοφιλέστερη επιλογή στα
κορυφαία αμερικάνικα πανεπιστήμια όσον αφορά στα εισαγωγικά μαθήματα των
τμημάτων επιστήμης των υπολογιστών
\cite
{
website:popularpython
}
. Είναι μια από
τις πιο αναπτυσσόμενες προγραμματιστικές γλώσσες σύμφωνα με στοιχεία του Stack
Overflow
\cite
{
website:pythongrowth
}
χάρη, κυρίως, στην καθιέρωση της σε πολλά
προγράμματα προπτυχιακών σπουδών και στην ανάπτυξη των τομέων της ανάλυσης
δεδομένων και μηχανικής μάθησης, στους οποίους κυριαρχεί ως εργαλείο
\cite
{
website:whypython
}
.
μαθητές και φοιτητές, για τους οποίους είναι αρκετά πιθανό να αποτέλεσε πρώτη
γλώσσα εισαγωγής στον προγραμματισμό. Η Python δε λείπει από κανένα από τα
συστήματα αξιολόγησης που μελετήθηκαν, ενώ πλέον αποτελεί τη δημοφιλέστερη
επιλογή στα κορυφαία αμερικάνικα πανεπιστήμια όσον αφορά στα εισαγωγικά
μαθήματα των τμημάτων επιστήμης των υπολογιστών (
\cite
{
popularpython
}
).
Είναι μια από τις πιο αναπτυσσόμενες προγραμματιστικές γλώσσες σύμφωνα με
στοιχεία του Stack Overflow (
\cite
{
pythongrowth
}
) χάρη κυρίως στην
καθιέρωση της σε πολλά προγράμματα προπτυχιακών σπουδών και στην ανάπτυξη των
τομέων της ανάλυσης δεδομένων και μηχανικής μάθησης, στους οποίους κυριαρχεί ως
εργαλείο (
\cite
{
whypython
}
).
\bigskip
Η διαφορά της Python με τις γλώσσες που υποστηρίζει ο Kewii είναι ότι αυτή
αποτελεί μια interpreted γλώσσα και ως αποτέλεσμα δεν έχει ιδιαίτερο νόημα η
μεταγλώττιση της σε ένα εκτελέσιμο. Σε κάθε υποβολή
με χρήση της, θα γίνεται
απευθείας εκτέλεση με είσοδο τα αρχεία ελέγχου και θα εμφανίζονται μόνο τα
σφάλματα κατά τον χρόνο εκτέλεσης στον διαγωνιζόμενο, αντίθετα με τις υπόλοιπε
ς
γλώσσες που υπάρχουν και σφάλματα μεταγλώττισης. Στο μέλλον θα μπορούσε ν
α
διερευνηθεί η δυνατότητα ενός εργαλείου ανάλυσης του πηγαίου κώδικα για τη
διευκόλυνση των διαγωνιζόμενων με καλύτερα μηνύματα σφαλμάτων.
μεταγλώττιση της σε ένα εκτελέσιμο. Σε κάθε υποβολή
που χρησιμοποιείται, θα
γίνεται απευθείας εκτέλεση με είσοδο τα αρχεία ελέγχου και θα εμφανίζονται μόνο
τα σφάλματα κατά τον χρόνο εκτέλεσης στον διαγωνιζόμενο, αντίθετα με τι
ς
υπόλοιπες γλώσσες όπου υπάρχουν και σφάλματα μεταγλώττισης. Στο μέλλον θ
α
μπορούσε να διερευνηθεί η δυνατότητα ενός εργαλείου ανάλυσης του πηγαίου κώδικα
για τη
διευκόλυνση των διαγωνιζόμενων με καλύτερα μηνύματα σφαλμάτων.
\bigskip
...
...
@@ -1453,23 +1454,23 @@ Overflow \cite{website:pythongrowth} χάρη, κυρίως, στην καθιέ
Κατά τη διαδικασία δημιουργίας ενός προβλήματος, είναι απαραίτητο να προστεθεί
ένας συχνά μεγάλος αριθμός αρχείων ελέγχου. Ο μόνος τρόπος να γίνει αυτό είναι
μέσω της σελίδας διαχείρισης των αρχείων ελέγχου, όπως φαίνεται στ
η
φωτογραφία 4.1, και κάθε νέο αρχείο ανεβαίνει ξεχωριστά, δηλαδή δεν υπάρχει
κάποια μαζική
διαδικασία.
μέσω της σελίδας διαχείρισης των αρχείων ελέγχου, όπως φαίνεται στ
ο σχήμα 4.1,
και κάθε νέο αρχείο ανεβαίνει ξεχωριστά, δηλαδή δεν υπάρχει κάποια μαζική
διαδικασία.
\bigskip
Για να αποφευχθεί η επαναληπτική και χρονοβόρα διαδικασία, οι έως τώρα διαχειριστές
έγραφαν απλά PHP scripts για την ενημέρωση της βάσης με τα νέα αρχεία ελέγχου,
και αντέγραφαν
τα τελευταία, χειροκίνητα,
στους αντίστοιχους φακέλους του Kewii.
Μετά την προσθήκη των
ομάδων αρχείων ελέγχου
, στη διαδικασία αυτή προστέθηκε και
η δημιουργία και παραμετροποίηση των
ομάδων
με τα επιθυμητά αρχεία και tags.
και αντέγραφαν
χειροκίνητα τα αρχεία
στους αντίστοιχους φακέλους του Kewii.
Μετά την προσθήκη των
testcase groups
, στη διαδικασία αυτή προστέθηκε και
η δημιουργία και παραμετροποίηση των
groups
με τα επιθυμητά αρχεία και tags.
\bigskip
Για τους παραπάνω λόγους κρίθηκε αναγκαία η προσθήκη ενός αυτοματοποιημένου
τρόπου μαζικής προσθήκης αρχείων για τα προβλήματα, στο οποίο να υπάρχει και η
δυνατότητα ορισμού των κατάλληλων
ομάδων αρχείων ελέγχου
. Το εργαλείο που θα
δυνατότητα ορισμού των κατάλληλων
testcase groups
. Το εργαλείο που θα
υλοποιηθεί θα οφείλει τόσο να ενημερώνει τη βάση, όσο και να φορτώνει τα αρχεία
στον εξυπηρετητή του Kewii. Για την επεξεργασία των ομάδων, θα πρέπει να
χρησιμοποιηθεί ένα περιγραφικό αρχείο, ιδανικά σε ένα ανθρωπίνως αναγνώσιμο
...
...
@@ -1479,7 +1480,7 @@ Overflow \cite{website:pythongrowth} χάρη, κυρίως, στην καθιέ
Το εργαλείο που περιγράφηκε θα προστεθεί στη σελίδα διαχείρισης των αρχείων
ελέγχου κάτω από το ήδη υπάρχον ανέβασμα μεμονωμένου αρχείου. Μετά την προσθήκη
η σελίδα θα έχει τη μορφή τ
ης εικόνα
ς 6.1. Ο διαχειριστής θα ανεβάζει ένα
η σελίδα θα έχει τη μορφή τ
ου σχήματο
ς 6.1. Ο διαχειριστής θα ανεβάζει ένα
συμπιεσμένο αρχείο (zip) με τα αρχεία εισόδου και εξόδου που θέλει να προσθέσει
στο πρόγραμμα. Στο αρχείο θα πρέπει, επιπλέον, να υπάρχει και ένα αρχείο με
όνομα descriptor.json το οποίο θα αναλαμβάνει να περιγράψει στο εργαλείο τις
...
...
@@ -1488,7 +1489,7 @@ Overflow \cite{website:pythongrowth} χάρη, κυρίως, στην καθιέ
\bigskip
Η μορφή JSON επιλέχθηκε για τους λόγους που αναφέρθηκαν παραπάνω, δηλαδή για τα
χαρακτηριστικά της
,
ως αναγνώσιμη και με δυνατότητα εύκολης εισαγωγής αντικειμένων
χαρακτηριστικά της ως αναγνώσιμη και με δυνατότητα εύκολης εισαγωγής αντικειμένων
και λιστών. Στο συγκεκριμένο αρχείο θέλαμε να περιγράφονται τα παρακάτω:
\begin{itemize}
...
...
@@ -1522,15 +1523,15 @@ descriptor.json σαν λίστες αντικειμένων. Κάθε αντι
μια νέα ομάδα, έχει πεδία για το όνομα της, τους πόντους που αξίζει και τα
αρχεία ελέγχου που θα περιέχει. Το τελευταίο πεδίο αποτελεί λίστα και περιέχει
αντικείμενα με δύο πεδία: αριθμός αρχείου ελέγχου και τύπος εκτέλεσης. Ο τύπος
εκτέλεσης θα δίνεται με το όνομα του χρώματος δηλαδή θα μπορεί να έχει τις
εκτέλεσης θα δίνεται με το όνομα του χρώματος
,
δηλαδή θα μπορεί να έχει τις
τιμές orange, yellow, blue, green, purple. Ακολουθεί ένα πρότυπο
descriptor.json στο οποίο έχουν συμπληρωθεί όλα τα διαθέσιμα πεδία.
\FloatBarrier
\lstinputlisting
[frame=single,captionpos=b,caption=Παράδειγμα descriptor.json.
Το συγκεκριμένο αρχείο περιγράφει 4 αρχεία ελέγχου σε 3 ομάδες αρχείων. Ακόμα
δίν
ει τη μορφή ονομασίας των αρχείων εισόδου και
Το συγκεκριμένο αρχείο περιγράφει 4 αρχεία ελέγχου σε 3 ομάδες αρχείων. Ακόμα
\,
ορίζ
ει τη μορφή ονομασίας των αρχείων εισόδου και
εξόδου.]
{
Listings/descriptordiploma.json
}
\begin{figure}
...
...
@@ -1545,7 +1546,7 @@ descriptor.json στο οποίο έχουν συμπληρωθεί όλα τα
\subsection
{
Εργαλείο δημιουργίας
}
Χάρη στην αναγνώσιμη μορφή του JSON είναι εύκολο ένας διαχειριστής να συντάξει
ένα JSON αρχείο για το ανέβασμα αρχείων ελέγχου και καθορισμό
ομάδων
. Παρόλα
ένα JSON αρχείο για το ανέβασμα αρχείων ελέγχου και καθορισμό
groups
. Παρόλα
αυτά, θα είναι αρκετά χρήσιμο το συγκεκριμένο αρχείο να μη συντάσσεται με το
χέρι, ώστε να μην υπάρχει και η πιθανότητα σφάλματος. Για το λόγο αυτό
δημιουργήθηκε ένα interactive script σε Python για την αυτόματη παραγωγή ενός
...
...
@@ -1556,9 +1557,8 @@ descriptor.json αρχείου.
Το συγκεκριμένο script, μόλις εκτελεστεί, σε οποιοδήποτε περιβάλλον, διατυπώνει
ερωτήσεις σχετικές με τον αριθμό και τα ονόματα των αρχείων ελέγχου και ομάδων
και έπειτα για κάθε ομάδα σχετικά με το ποια αρχεία περιέχει και τους τύπους
εκτέλεσης τους. Στο τέλος, παράγει το αρχείο που περιγράφηκε. Παρακάτω φαίνεται
μια τυπική εκτέλεση του συγκεκριμένου script.
εκτέλεσης τους. Στο τέλος, παράγει το αρχείο που περιγράφηκε. Στο σχήμα 6.2
φαίνεται μια τυπική εκτέλεση του συγκεκριμένου εργαλείου.
\begin{figure}
\centering
...
...
@@ -1574,8 +1574,8 @@ descriptor.json αρχείου.
επικοινωνίας της PHP με τη MySQL βάση δεδομένων μας. Η επέκταση, που
χρησιμοποιείται τόσο από τον Grader όσο και από τον Kewii, είναι το πρωτότυπο
(original) MySQL API. Το συγκεκριμένο API έχει αρκετά μειονεκτήματα, που έχουν
οδηγήσει και στην παύση της υποστήριξης του όπως περιγράφεται στο
(TODO:
https://wiki.php.net/rfc/mysql
\_
deprecation)
.
οδηγήσει και στην παύση της υποστήριξης του όπως περιγράφεται στο
\cite
{
deprecation
}
.
\bigskip
...
...
@@ -1583,10 +1583,9 @@ https://wiki.php.net/rfc/mysql\_deprecation).
εμφανίζει E
\_
DEPRECATED σφάλματα ήδη από την έκδοση 5.5 της PHP (στην 7 δεν
υπάρχει), είναι επιτακτικό να αφαιρεθεί από τον κώδικα της εφαρμογής μας και να
αντικατασταθεί με μια πιο σύγχρονη. Οι επίσημα υποστηριζόμενες επεκτάσεις που
μπορούμε να χρησιμοποιήσουμε είναι οι mysqli και PDO
(https://secure.php.net/manual/en/mysql.php). Για την επιλογή χρησιμοποιήθηκε ο
παρακάτω πίνακας σύγκρισης των προαναφερθέντων επεκτάσεων που υπάρχει στο
manual της PHP (https://secure.php.net/manual/en/mysql.php TODO).
μπορούμε να χρησιμοποιήσουμε είναι οι mysqli και PDO. Για την επιλογή
χρησιμοποιήθηκε ο πίνακας σύγκρισης των προαναφερθέντων επεκτάσεων που υπάρχει
στο manual της PHP (
\cite
{
mysqlapis
}
) και φαίνεται στο σχήμα 6.3.
\begin{figure}
\centering
...
...
@@ -1611,26 +1610,26 @@ prepared statements.
Τα prepared statements επιτρέπουν την εκτέλεση συγκεκριμένων επερωτημάτων
(queries) με αντικατάσταση των παραμέτρων που αλλάζουν κάθε φορά. Αυτό έχει δύο
σημαντικά πλεονεκτήματα. (http://php.net/manual/en/pdo.prepared-statements.php
TODO) Αρχικά, αυξάνει ιδιαίτερα την απόδοση στην εκτέλεση διαδοχικών queries
βασισμένων στο ίδιο prepared statement. Επιπλέον, αυξάνει πολύ την ασφάλεια της
εφαρμογής μας, καθώς αποκλείει ουσιαστικά την πιθανότητα επίθεσης έκχυσης
(injection) κώδικα SQL.
σημαντικά πλεονεκτήματα. Αρχικά, αυξάνει ιδιαίτερα την απόδοση στην εκτέλεση
διαδοχικών queries βασισμένων στο ίδιο prepared statement. Επιπλέον, βελτιώνει
σε μεγάλο βαθμό την ασφάλεια της εφαρμογής μας, καθώς αποκλείει ουσιαστικά την
πιθανότητα επίθεσης έκχυσης (injection) κώδικα SQL.
\bigskip
Η επίθεση με SQL injection γίνεται δυνατή λόγω του τρόπου που δημιουργείται το
κάθε query. Αν δεν ελεγχθεί σωστά η είσοδος του χρήστη, υπάρχει η περίπτωση ο
τελευταίος να εκμεταλλευτεί ειδικούς χαρακτήρες της SQL, π.χ. τον χαρακτήρα που
ξεκινάει ένα σχόλιο, και να αλλοιώσει το Query, επηρεάζοντας την εκτέλεση και
επιτυγχάνοντας, ιδανικά, την πρόσβαση σε ευαίσθητα δεδομένα ή σελίδες.
ξεκινάει ένα σχόλιο, και να αλλοιώσει το query, επηρεάζοντας την εκτέλεση και
επιτυγχάνοντας, ιδανικά για τον επιτιθέμενο, την πρόσβαση σε ευαίσθητα δεδομένα
ή σελίδες.
\bigskip
Ο τρόπος που επιτυγχάνεται η αντοχή στις προαναφερθείσες επιθέσεις βασίζεται
τρόπος
λειτουργίας των prepared statements. Σε πρώτη φάση, δημιουργείται το
στον τρόπο
λειτουργίας των prepared statements. Σε πρώτη φάση, δημιουργείται το
πρότυπο επερώτημα δίχως τις παραμέτρους και μεταγλωττίζεται ξεχωριστά. Οι
παράμετροι, στέλνονται
ξεχωριστά
με διαφορετικό πρότυπο επικοινωνίας με
παράμετροι, στέλνονται
έπειτα
με διαφορετικό πρότυπο επικοινωνίας με
αποτέλεσμα να μην είναι δυνατόν να εισαχθούν ειδικοί χαρακτήρες που θα
επηρεάσουν την εκτέλεση του query.
...
...
@@ -1639,7 +1638,8 @@ TODO) Αρχικά, αυξάνει ιδιαίτερα την απόδοση στ
Για την υλοποίηση επιλέχθηκε, τελικά, το PDO για τους λόγους επεκτασιμότητας
που αναφέρθηκαν παραπάνω δεδομένου ότι στα υπόλοιπα κριτήρια δεν υστερεί σε
σχέση με το mysqli, και η υπάρχουσα σχεδίαση μας είναι αντικειμενοστρεφής ούτως
ή άλλως, που υποστηρίζεται από το PDO (που δεν υποστηρίζει δομημένο στυλ).
ή άλλως, που υποστηρίζεται από το PDO (που δεν υποστηρίζει στυλ δομημένου
προγραμματισμού).
\subsection
{
Συνοπτική περιγραφή επέκτασης PDO
}
...
...
@@ -1648,22 +1648,22 @@ TODO) Αρχικά, αυξάνει ιδιαίτερα την απόδοση στ
δεδομένων σε PHP. Μέσω των διάφορων, χαμηλού επιπέδου, οδηγών της επιτρέπει την
ενοποίηση του πλήθους των μεθόδων κάθε βάσης σε μια κοινή, πλούσια διεπαφή που
περιστρέφεται γύρω από κοινά αντικείμενα που αντιστοιχούν σε κάθε πίνακα ξεχωριστά.
(
http://php.net/manual/en/intro.pdo.php
).
(
\cite
{
pdo
}
).
\bigskip
Η σχεδίαση της συγκεκριμένης επέκτασης έχει γίνει με έμφαση στην ευκολία χρήσης
και την επαναχρησιμοποίηση του ίδιου κώδικα για διαφορετικές βάσεις δεδομένων
και συναφείς λειτουργίες. Η σύνδεση στην εκάστοτε βάση δεδομένων γίνεται με τη
χρήση μιας σειριακής δομής δεδομένων, με όνομα Data Source Name
(https://en.wikipedia.org/wiki/Data
\_
source
\_
name), έπειτα από την οποία,
δημιουργείται ένα αντικείμενο που αντιστοιχεί στη σύνδεση. Τα queries
εκτελούνται με τη χρήση της μεθόδου query, εκτός αν χρησιμοποιηθούν prepared
statements (PDOStatement), όπου χρησιμοποιούνται οι μέθοδοι prepare και
execute. Η επέκταση εμπεριέχει, επίσης, και δική της κλάση εξαιρέσεων
(PDOException). (https://secure.php.net/manual/en/book.pdo.php) Ακολουθούν
παραδείγματα απλών λειτουργιών χρησιμοποιώντας τη συγκεκριμένη επέκταση/API.
χρήση μιας σειριακής δομής δεδομένων, με όνομα Data Source Name (
\cite
{
dsn
}
),
έπειτα από την οποία, δημιουργείται ένα αντικείμενο που αντιστοιχεί στη
σύνδεση. Τα queries εκτελούνται με τη χρήση της μεθόδου query, εκτός αν
χρησιμοποιηθούν prepared statements (PDOStatement), όπου χρησιμοποιούνται οι
μέθοδοι prepare και execute. Η επέκταση εμπεριέχει, επίσης, και δική της κλάση
εξαιρέσεων (PDOException). Ακολουθούν παραδείγματα απλών λειτουργιών
χρησιμοποιώντας τη συγκεκριμένη επέκταση/API.
\bigskip
\FloatBarrier
...
...
@@ -1674,46 +1674,50 @@ execute. Η επέκταση εμπεριέχει, επίσης, και δική
\section
{
Καταληκτικές Παρατηρήσεις
}
Στη συγκεκριμένη εργασία έγινε μια προσπάθεια βελτίωσης του συστήματος
αυτόματ
ο
ς αξιολόγησης Grader και προσθήκης δυνατοτήτων που θα το καταστήσουν
αυτόματ
η
ς αξιολόγησης Grader και προσθήκης δυνατοτήτων που θα το καταστήσουν
πιο ευέλικτο και εύκολο στη χρήση του. Για να επιτευχθεί αυτό, διερευνήθηκε ο
τρόπος λειτουργίας του όπως και ο τρόπος λειτουργίας άλλων παρόμοιων
συστημάτων. Για τις τροποποιήσεις και τις προσθήκες που υλοποιήθηκαν, έγινε
προσπάθεια να χρησιμοποιηθούν σωστές σχεδιαστικές επιλογές με έμφαση στη
βελτίωση της ποιότητας του κώδικα
,
στην μετέπειτα ευκολία συντήρησης και
βελτίωση της ποιότητας του κώδικα
και
στην μετέπειτα ευκολία συντήρησης και
επέκτασης του.
\bigskip
Στο Κεφάλαιο 2, παρουσιάστηκαν συστήματα αυτόματης αξιολόγησης
ανοιχτού λογισμικού
που προσφέρονται για τη διενέργεια διαγωνισμών και λειτουργούν με παρόμοιο τρόπο
με το Grader. Αναλύθηκε η σχεδίαση τους, τα σενάρια χρήσης τους και οι διαφορές
τ
ους με το δικό μας σύστημα
.
Στο Κεφάλαιο 2, παρουσιάστηκαν συστήματα αυτόματης αξιολόγησης
ελεύθερου
λογισμικού που προσφέρονται για τη διενέργεια διαγωνισμών και λειτουργούν με
παρόμοιο τρόπο με το Grader. Αναλύθηκε η σχεδίαση, οι δυνατότητες και ο
τ
ρόπος χρήσης τους
.
\bigskip
Στο κεφάλαιο 3, είδαμε τον τρόπο λειτουργίας του Grader και του Kewii, της
εφαρμογής που τρέχει στον εξυπηρετητή και αναλαμβάνει την εκτέλεση των
υποβληθέντων προγραμμάτων. Αναλύθηκε η αρχιτεκτονική και ο τρόπος επικοινωνίας
μεταξύ τους. Αναφέρθηκαν, ακόμα, όλα τα
συστατ
ικά στοιχεία του συστήματος, οι
σ
χέσεις τους και κατά πόσο εμπλέκονται με
Kewii και Grader. Το συγκεκριμένο
κεφάλαιο έχει
σκοπό να λειτουργήσει στο μέλλον σαν έγγραφο αναφοράς για όποιον
επιθυμεί να επεκτείνει το σύστημα, βοηθώντας τον να αντιληφθεί γρηγορότερα τον
σχεδιασμό του.
μεταξύ τους. Αναφέρθηκαν, ακόμα, όλα τα
βασ
ικά στοιχεία του συστήματος, οι
σ
υσχετισμοί τους και η χρήση τους από
Kewii και Grader. Το συγκεκριμένο
κεφάλαιο έχει
τον επιπρόσθετο σκοπό να λειτουργήσει στο μέλλον σαν έγγραφο
αναφοράς για όποιον επιθυμεί να επεκτείνει το σύστημα, βοηθώντας τον να
αντιληφθεί γρηγορότερα τον
σχεδιασμό του.
\bigskip
Στα κεφάλαια 4,5 και 6, αναλύθηκαν οι σημαντικότερες αλλαγές που έγιναν κατά τη
διάρκεια της παρούσας εργασίας. Αυτές συμπεριλάμβαναν τη δημιουργία μιας νέας
έννοιας για το σύστημα, αυτής των ομάδων αρχείων ελέγχου
,
και ως αποτέλεσμα την
επέκταση ολόκληρου του συστήματος για την υποστήριξη τ
ου
, την αλλαγή της
έννοιας για το σύστημα, αυτής των ομάδων αρχείων ελέγχου
(
και ως αποτέλεσμα την
επέκταση ολόκληρου του συστήματος για την υποστήριξη τ
ης)
, την αλλαγή της
αρχιτεκτονικής προβλημάτων, διαγωνισμών και υποβολών προς διευκόλυνση της
λειτουργίας του Grader και ένα σύνολο άλλων, μικρότερης σημασίας, προσθηκών.
Κατά τη διαδικασία υλοποίησης κάθε τροποποίησης έγινε προσπάθεια βελτίωσης της
εκάστοτε διαμόρφωσης με αναδιαμόρφωση κλάσεων μεθόδων και δομών δεδομένων ώστε
ο κώδικας να είναι περισσότερο κατανοητός και διαχειρίσιμος από τους μελλοντικούς
συντηρητές του. Επίσης, καταγράφηκε η διαδικασία εγκατάστασης της συνολικής
εφαρμογής του σε ένα καινούριο σύστημα ώστε να είναι εύκολο να μετεγκατασταθεί
στο μέλλον ή να δημιουργηθεί περιβάλλον δοκιμών. (TODO: πρώτη φορά τα αναφέρω αυτά!)
\bigskip
Κατά τη διαδικασία προσθήκης των παραπάνω δυνατοτήτων έγινε προσπάθεια
βελτίωσης της εκάστοτε υλοποίησης με αναδιαμόρφωση κλάσεων μεθόδων και δομών
δεδομένων ώστε ο κώδικας να είναι περισσότερο κατανοητός και διαχειρίσιμος από
τους μελλοντικούς συντηρητές του. Επίσης, καταγράφηκε η διαδικασία εγκατάστασης
της συνολικής εφαρμογής του σε ένα καινούριο σύστημα ώστε να είναι εύκολο να
μετεγκατασταθεί στο μέλλον ή να δημιουργηθεί περιβάλλον δοκιμών.
%(TODO: πρώτη φορά τα αναφέρω αυτά!)
\section
{
Μελλοντική Εργασία
}
...
...
@@ -1722,17 +1726,18 @@ execute. Η επέκταση εμπεριέχει, επίσης, και δική
επισκόπησης και σχολιασμού υποβληθέντων λύσεων (code reviews) όπου οι διαχειριστές
ή υπεύθυνοι για τους διαγωνισμούς θα μπορούσαν να σχολιάζουν τις λύσεις των
διαγωνιζόμενων και εκεί να γίνεται συζήτηση μεταξύ τους για τυχόν βελτιστοποιήσεις
ή
σφάλματα.
και
σφάλματα.
\bigskip
Επιπροσθέτως, θα ήταν αρκετά θετικό αν μπορούσε να διενεργηθεί ένας επανασχεδιασμός
της διαδικτυακής εφαρμογής σύμφωνα με μια αρχιτεκτονική MVC ή παρόμοια με χρήση
κάποιου σύγχρονου πλαισίου (framework) ώστε να γίνει άμεσα πιο κατανοητός ο
διαχωρισμός παρουσίασης και υλοποίησης της λογικής της αξιολόγησης και των
υπόλοιπων λειτουργιών. Κάτι τέτοιο θα είχε ως προϋπόθεση πλήρη κατανόηση του Grader
και του συνόλου των μερών του, αλλά θα επιβράβευε άμεσα όσους θα ήταν υπεύθυνοι για
την περαιτέρω ανάπτυξη του.
Επιπροσθέτως, θα ήταν αρκετά θετικό αν μπορούσε να διενεργηθεί ένας
επανασχεδιασμός της διαδικτυακής εφαρμογής σύμφωνα με μια αρχιτεκτονική
Model-View-Controller (MVC) ή παρόμοια με χρήση κάποιου σύγχρονου πλαισίου
(framework) ώστε να γίνει άμεσα πιο κατανοητός ο διαχωρισμός παρουσίασης και
υλοποίησης της λογικής της αξιολόγησης και των υπόλοιπων λειτουργιών. Κάτι
τέτοιο θα είχε ως προϋπόθεση πλήρη κατανόηση του Grader και του συνόλου των
μερών του, αλλά θα επιβράβευε άμεσα όσους θα ήταν υπεύθυνοι για την περαιτέρω
ανάπτυξη και συντήρηση του.
\bigskip
...
...
@@ -1740,29 +1745,33 @@ execute. Η επέκταση εμπεριέχει, επίσης, και δική
Αρχικά, όπως έχει αναφερθεί και στο κεφάλαιο 6.1.2 για την Python, οι
διαγωνιζόμενοι θα επωφελούνταν στην περίπτωση προσθήκης ενός μηχανισμού για
ανάλυση του πηγαίου κώδικα των υποβολών τους, καθώς δεν εκτελείται μεταγλώττιση
και όλα τα σφάλματα είναι κατά την εκτέλεση. Ένα εργαλείο που θα μπορούσε να
χρησιμοποιηθεί για το συγκεκριμένο σκοπό είναι το pylint (TODO:
https://www.pylint.org/). Το συγκεκριμένο πρόγραμμα, έχει τη δυνατότητα τόσο να
εντοπίζει σφάλματα πριν την εκτέλεση, όσο και να ελέγχει την ποιότητα του
κώδικα σύμφωνα με συγκεκριμένα στάνταρ όπως είναι π.χ. το PEP-8 (TODO: link).
και όλα τα σφάλματα εμφανίζονται κατά την εκτέλεση. Ένα εργαλείο που θα
μπορούσε να χρησιμοποιηθεί για το συγκεκριμένο σκοπό είναι το pylint
\footnote
{
https://www.pylint.org/
}
. Το συγκεκριμένο πρόγραμμα, έχει τη
δυνατότητα τόσο να εντοπίζει σφάλματα πριν την εκτέλεση, όσο και να ελέγχει την
ποιότητα του κώδικα σύμφωνα με συγκεκριμένα στάνταρ όπως είναι π.χ. το PEP 8.
\cite
{
pep8
}
\bigskip
Άλλο ένα θέμα που επιδέχεται βελτίωση είναι η ασφάλεια εκτέλεσης του Kewii.
Προφανώς, είναι αρκετά δύσκολο να επιτυγχάνεται η απόλυτη ασφάλεια όταν εξ ορισμού
εκτελείται άγνωστος κώδικας σε έναν εξυπηρετητή. Παρόλα αυτά, μπορεί να υλοποιηθεί
ένα πιο αποκλεισμένο (sandboxed) περιβάλλον, πιθανόν με τη χρήση ενός εικονικού
μηχανήματος που να έχει ως στόχο τον αποκλεισμό των εκτελούμενων προγραμμάτων ή
με χρήση ειδικευμένου λογισμικού ως container, π.χ. Docker (TODO: link).
Προφανώς, είναι αρκετά δύσκολο να επιτυγχάνεται η απόλυτη ασφάλεια όταν εξ
ορισμού εκτελείται άγνωστος κώδικας σε έναν εξυπηρετητή. Παρόλα αυτά, μπορεί να
υλοποιηθεί ένα πιο αποκλεισμένο (sandboxed) περιβάλλον, πιθανόν με τη χρήση
ενός εικονικού μηχανήματος που να έχει ως στόχο τον αποκλεισμό των εκτελούμενων
προγραμμάτων ή με χρήση ειδικευμένου λογισμικού ως container, π.χ. Docker
\footnote
{
https://www.docker.com/
}
.
\bigskip
Τέλος, θα ήταν ωφέλιμο για την απόδοση του Kewii να υλοποιηθεί μια παραλληλοποίηση
των εκτελέσεων πολλαπλών υποβολών ταυτόχρονα, που θα μείωνε σε μεγάλο βαθμό το
χρόνο εκτέλεσης, εάν χρησιμοποιούνταν με χρήση συστάδας εικονικών ή φυσικών
μηχανημάτων. Η συγκεκριμένη υλοποίηση έχει ήδη γίνει στο
(TODO: τσιαμητρος)
και
μηχανημάτων. Η συγκεκριμένη υλοποίηση έχει ήδη γίνει στο
\cite
{
Tsiamitros
}
και
είναι συμβατή με το σύστημα μας. Μένει να διερευνηθούν οι λεπτομέρειες της
προσθήκης και να διεξαχθεί αξιολόγηση της λειτουργίας.
προσθήκης και να υλοποιηθεί, με την προϋπόθεση να υπάρχει δυνατότητα πλήρης
αξιοποίησης του νέου συστήματος σε θέμα πόρων.
%%% Bibliography
\bibliographystyle
{
softlab-thesis
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment