En effet :
La copie d'écran montre l'interface du surveillant qui est présentée plus loin.
L'ensemble de l'environnement est programmé en Python.
Pour chaque question il y a une classe dont les méthodes définissent la question. Voici les méthodes dans l'ordre d'appel lorsque l'étudiant arrive sur la question :
class Q1(Question): """Question 1""" def question(self): return "<p>Vous devez faire afficher «Bonjour»</p>" def tester(self): self.display('<p>Dans votre code source on devrait trouver :</p>') self.check(self.worker.source, [ ['print' , 'Le nom de la fonction «print» pour afficher la valeur'], ['Bonjour', 'Le texte «Bonjour» que vous devez afficher'], ]) if self.worker.execution_result == 'Bonjour\n': self.next_question() def default_answer(self): return "# Tapez votre programme ici :\n"
Un sujet complet est une liste de questions gérées par un unique compilateur. La dernière ligne du fichier définie la liste des questions, si elle n'est pas indiquée alors toutes les questions du fichier sont proposées à l'étudiant :
Session([Q0(), Q1(), Q2(), Q3(), QEnd()])
On suppose que :
Pour le mettre en production la première fois et l'essayer :
Ensuite il ne reste qu'à aller dans l'onglet «Try» pour voir la nouvelle version.
Dans le paramétrage de la session, choisissez Upload a new media dans le menu «Actions». Cela vous affichera en haut de page le code HTML à mettre dans la question pour afficher l'image. Les images sont partagées entre les différentes sessions C5. Par contre une fois que la session ayant enregistrée l'image est terminée, l'image n'est plus accessible par les autres sessions. Les correcteurs ont bien entendu accès aux images même quand la session est terminée.
On peut aussi héberger l'image sur un autre site web. Le tag IMG doit alors contenir crossorigin et l'autre site web doit contenir dans le .htaccess du répertoire de l'image :
Header set Access-Control-Allow-Origin "https://c5.univ-lyon1.fr"Remplacez par l'adresse de votre serveur C5 et ne mettez PAS le '/' final.
Le sujet peut contenir un tag cliquable pour amener sur l'écran une ligne particulière du code source édité par l'étudiant :
<button onclick="javascript:ccccc.goto_source_line('un texte quelconque')">Répondre</button>
Si plusieurs lignes correspondent il amène sur la première.
def question(self): if self.sujet == 'a': return "Vous avez le sujet A : ..." else: return "Vous avez le sujet B : ..." def tester(self): if self.sujet == 'a': ... else: ... def default_answer(self): self.sujet = self.version() # 'a' ou 'b' return ""
Les colonnes contiennent le nom de l'attribut, sa valeur par défaut et un texte d'explication.
Session options | ||
---|---|---|
start | '2000-01-01 00:00:00' | Start date of the session |
stop | '2100-01-01 00:00:00' | Stop date of the session START>END |
state | 'Draft' |
┏━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━┓ ┃ State ┃ Visible by ┃ Usable by ┃ ┣━━━━━━━━╋━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━┩ ┃Draft ┃creator admin │creator admin │ ┣━━━━━━━━╉────────────────────┼────────────────────┤ ┃Ready ┃ │ │ ┃ before┃all │creator admin grader│ ┃ while ┃all │all if no checkpoint│ ┃ after ┃all except students │creator admin grader│ ┣━━━━━━━━╉────────────────────┼────────────────────┤ ┃Grade ┃creator admin grader│creator admin grader│ ┣━━━━━━━━╉────────────────────┼────────────────────┤ ┃Done ┃creator admin grader│creator admin grader│ ┃ ┃Students if allowed │ │ ┃ ┃by admin and grader │ │ ┣━━━━━━━━╉────────────────────┼────────────────────┤ ┃Archive ┃creator admin │creator admin │ ┗━━━━━━━━┹────────────────────┴────────────────────┘ |
checkpoint | 0 | Requires students to be placed on the map (examination mode) |
allow_copy_paste | 0 | Copy/paste allowed (if not allowed students must be in full screen mode) |
save_unlock | 0 | Saving a question unlock next |
automatic_compilation | 1 | Compilation is automatic |
feedback | 0 | Maximum level of student feedback allowed to teachers |
grading_done | 1 | Graders indicate «grading done» in place of the grading level |
allow_ip_change | 0 | Allow IP change (bad Internet connection) |
sequential | 1 | Questions must be answered from first to last |
highlight | '#FFF' | Background color in the student and teacher session list |
Checkpoint placement interface | ||
display_student_filter | 0 | Display an INPUT field containing a list of student IDs to highlight |
display_my_rooms | 1 | Add a toggle to display only the rooms I dragged student into |
display_session_name | 0 | Display the session name |
default_building | '' | Preselected building name |
Student interface | ||
positions | { 'question': [1, 29, 0, 30, '#EFEF'], 'tester': [1, 29, 30, 70, '#EFEF'], 'editor': [30, 40, 0, 100, '#FFFF'], 'compiler': [70, 30, 0, 30, '#EEFF'], 'executor': [70, 30, 30, 70, '#EEFF'], 'time': [80, 20, 98, 2, '#0000'], 'index': [0, 1, 0, 100, '#0000'], 'editor_title': [0, 0, 0, 0, '#FFFF'], } | For each bloc : [Bloc X%, Width%, Y%, Heigth%, background color] |
forget_input | 0 | Forget old input values on execution |
coloring | 1 | source highlighting is done |
theme | 'a11y-light' | Syntaxic coloring theme for source code |
display_local_save | 0 | display 'icon_local' to download the current source code |
display_home | 1 | display 'icon_home' |
display_local_git | 1 | display 'icon_git' to download a repository of all history |
display_local_zip | 1 | display 'icon_local' to download a repository of all questions |
display_timer | 1 | display the timer |
display_compile_run | 1 | display the F9 button |
display_tag | 1 | display 'icon_tag' |
display_history | 1 | display version history |
display_indent | 1 | display the F8 button |
display_line_numbers | 1 | display line numbers |
Popup messages | ||
forbiden | "Coller du texte copié venant d'ailleurs n'est pas autorisé." | Alert |
close | 'Voulez-vous vraiment quitter cette page ?' | Alert |
stop_confirm | "Vous voulez vraiment terminer l'examen maintenant ?" | Alert |
stop_done | "<h1>C'est fini.</h1>" | Alert |
good | [ 'Bravo !', 'Excellent !', 'Super !', 'Génial !', 'Vous êtes trop fort !', ] | Alert on success |
Bloc titles | ||
question_title | 'Question' | Bloc title |
tester_title | 'Les buts que vous devez atteindre' | Bloc title |
editor_title | 'Code source' | Bloc title |
compiler_title | 'Compilation' | Bloc title |
executor_title | 'Exécution' | Bloc title |
Labels of button and toggles | ||
editor_indent | 'Indent(F8)' | Button label |
compiler_title_toggle | 'Automatique (F9)' | Button label |
compiler_title_button | 'Maintenant ! (F9)' | Toggle label |
executor_title_button | 'GO!(F9)' | Button label |
icon_home | '🏠' | Button label |
icon_save | '📩' | Button label |
icon_local | '💾' | Button label |
icon_git | '<b style="font-size:50%">GIT</b>' | Button label |
icon_tag | 'TAG' | Button label |
icon_stop | 'Terminer<br>Examen' | Button label displayed if checkpoint |
Time countdown | ||
time_running | 'Fini dans' | Time message |
time_done | 'Fini depuis' | Time message |
time_seconds | ' secondes' | Time message |
time_days | ' jours' | Time message |
time_d | ' j ' | Time message |
time_m | ' m ' | Time message |
time_h | ' h ' | Time message |
Options defined by the compiler used by the course | ||
compiler | '' | Compiler to use (should not be changed): «g++» «gcc» «racket» |
compile_options | [ ] | Compile options: «-Wall» «-pedantic» «-pthread» «-std=c++11» «-std=c++20» |
ld_options | [ ] | Libraries to link with: «-lm» |
language | '' | Language to use for syntaxic coloring: «cpp» «python» ... |
extension | '' | Source code filename extension for ZIP and GIT: «cpp», «py»... |
filetree_in | [ ] | Initialize file tree [['foo', 'content'], ['BAR/1', 'one']] |
filetree_out | [ ] | File contents to get as ['foo', 'BAR/1'] |
allowed | [ ] |
System call always allowed for g++/gcc, no need to specify them:
clock_gettime close exit exit_group fstat futex lseek
mmap munmap newfstatat openat read write
System calls allowable for g++/gcc: access arch_prctl brk clock_nanosleep clone clone3 execve getpid getrandom gettid madvise mprotect pipe pread64 prlimit64 rseq rt_sigaction rt_sigprocmask sched_yield set_robust_list set_tid_address tgkill open |
Access tab | ||
admins | '' | Administrators with all the access rights |
graders | '' | Teachers allowed to try the session, grade and place the students |
proctors | '' | Can only place the students |
expected_students | '' | The login list of expected students, the session is in bold in their session list. |
expected_students_required | 0 | Unexpected students do not see the session, but a teacher can send them the link to it |
tt | '' | The logins of student with ⅓ more time |
Voici comment paramétrer les attributs précédents :
COURSE_OPTIONS = { 'allow_copy_paste': 0 }Les attributs indiquées ici sont écrasées par l'éditeur interactif de session, mais elles servent à initialiser les valeurs par défaut des attributs quand la session est créée.
self.set_options({ 'allow_copy_paste': 0 }}Les changements indiqués ici sont prioritaires sur ceux de l'éditeurs de question.
Il est nécessaire d'avoir un compilateur du langage écrit en JavaScript ou bien de déporter la compilation et/ou l'exécution sur le serveur C5 :
Langage | Compilateur | Remarque | Exemple de cours |
---|---|---|---|
JavaScript | compile_js.py | Compilation et exécution nativement dans le navigateur web. | COMPILE_JS/ introduction.py |
Python | compile_python.py | Utilise Brython
pour compiler et exécuter dans le navigateur web. | COMPILE_PYTHON/ introduction.py |
SQL | compile_sql.py | Utilise AlaSQL
pour compiler et exécuter dans le navigateur web. | COMPILE_SQL/ test.py |
C++ | compile_ccp.py | Utilise JSCPP
pour compiler et exécuter dans le navigateur web. ATTENTION : pas de classe, structure ni de passage par référence. | COMPILE_CPP/ test.py |
C++ | compile_remote.py | Il ne compile pas lui-même mais délègue la compilation avec gcc ou g++ ainsi que l'exécution au serveur web.
| COMPILE_REMOTE/ test.py |
Racket | compile_remote.py | Le serveur distant peut aussi exécuter du LISP dans une sandbox d'un processus Racket. | COMPILE_REMOTE/ racket.py |
Lisp | compile_lisp.py | Utilise LIPS
pour compiler et exécuter dans le navigateur web. | COMPILE_LISP/ conway.py |
Texte | compile_text.py | Ce compilateur ne fait rien. | COMPILE_TEXT/ demo.py |
Avec COMPILE_REMOTE et COMPILE_LISP, la touche F8 permet de reformater le code source, mais cela casse le undo.
Les utilisateurs sont :
La page d'accueil va être différente pour ces différentes catégories de personnes.
L'étudiant voit la liste de toutes les sessions actives. Il doit cliquer sur la bonne si l'enseignant ne lui a pas donné le lien direct.
Si la session n'a pas de salle d'attente on considère qu'elle n'est pas en mode examen et que l'étudiant peut directement commencer à travailler. Il se retrouve sur la page avec l'éditeur de source qui est présenté dans la première copie d'écran tout au début.
Si la session possède une salle d'attente, cela affiche :
Donnez votre nom à l'enseignant pour qu'il vous ouvre l'examen
Quand l'enseignant a placé l'étudiant sur son plan, l'étudiant recharge la page et cela affiche :
Début dans XXX secondes.
La page se recharge à la fin du compte à rebour.
L'utilisateur root est celui qui possède tous les droits de paramétrage sur C5.
Cette configuration est dans le fichier c5.cf
Ces personnes voient la liste des sessions les concernant classées dans différents blocs :
État | Proposée à | Utilisable par | |
---|---|---|---|
Brouillon Draft |
Créateur+admins | Créateur+admins | |
Prête Ready |
Avant | Tout le monde | Créateur+admins+correcteurs |
Pendant | Tout le monde | Tout le monde | |
Après | Tous sauf étudiants Le surveillant doit pouvoir rouvrir |
Créateur+admins+correcteurs | |
Correction Grade |
Créateur+admins+correcteurs | Créateur+admins+correcteurs | |
Terminée Done |
Créateur+admins+correcteurs Étudiants s'il y a un retour. |
Créateur+admins+correcteurs Étudiants s'il y a un retour. |
|
Archivée Archive |
Créateur+admins | Créateur+admins |
Chaque bloc contient les informations suivantes :
Au desssous du tableau on trouve des actions dépendant de la personne connectée.
Cette configuration est enregistrée sous le nom COMPILE_*/nom_sujet.cf le sujet est dans COMPILE_*/nom_sujet.py et les logs des étudiants dans le répertoire COMPILE_*/nom_sujet.
Il permet de définir tous les paramètres de la session en cours. Les informations concernant la configuration sont sauvegardés dès que l'on sort du champ qui a été modifié. Un retour sur l'enregistrement est affiché en haut, si valeur reste rouge c'est qu'elle n'a pas pu être enregistrée.
A droite des onglets on trouve un menu permettant de faire des actions.
Les administrateurs de session peuvent regarder le détail de la session. Pour chaque étudiant on a le détail et le résumé de toute la colonne sur la dernière ligne (importable directement dans TOMUSS).
Au dessous de la table, les listes des étudiants qui n'ont pas été corrigés ou bien avec une correction incomplète. Les listes sont aussi affichées en triant par correcteur.
Le surveillant voit la liste des sessions qu'il doit surveiller, Il clique alors sur Place pour gérer la salle d'attente. Les enseignants peuvent tester la session même s'ils n'ont pas été placés sur le plan.
La salle d'attente affiche un menu à gauche de l'écran :
Les ordinateurs en rouge sont ceux avec un problème, les surveillants peuvent déclarer les problèmes et on peut aussi indiquer que le poste a été réparé.
Concernant l'étudiant placé sur le plan :
Quand on clique sur un étudiant on peut accéder à la dernière version de son travail. On peut utiliser un ascenseur temporel pour voir l'évolution de ce qu'il a fait. Le déplacement dans le temps est instantané. Les zones rouges indiquent les moments où le focus a été perdu.
Le code source s'affiche alors au dessous de la barre d'ascenseur.
Le bouton «Clôturer examen» doit être utilisé quand il quitte la salle afin qu'il ne puisse pas continuer l'examen à l'extérieur. L'étudiant a un bouton «Terminer Examen» sur l'éditeur de source pour terminer l'examen. Une fois l'examen clôturé, le bouton devient «Rouvrir l'examen».
On peut indiquer le temps bonus total pour que l'étudiant termine l'examen. C'est utile si l'étudiant arrive en retard ou bien s'il y a un problème technique pendant l'examen. Les tiers-temps ont automatiquement du temps en plus qui n'apparaît pas ici.
Ont ferme la popup en cliquant sur × ou bien en appuyant sur la touche escape.
Le bouton «Noter l'étudiant» permet de noter et commenter le source de l'étudiant.
Il clique sur l'étudiant placé et arrive sur l'éditeur C5 avec le barème de notation affiché. Il n'a plus qu'à cliquer pour mettre les notes qui sont immédiatement enregistrées. Si 2 enseignants notent en même temps le même étudiant, ils perdent une seule note dans le pire cas.
Le correcteur peut ajouter des remarques aux lignes dans les petits carrés à droite du code source.
Le correcteur peut essayer le code de l'étudiant pour le tester et même le modifier temporairement pour voir ce que cela donne.
Lors de la correction le correcteur est automatiquement positionné sur la dernière version connue du code source. Le correcteur peut décider de corriger autre chose que cette dernière version connue en choisissant dans un menu déroulant. La dernière version connue est la plus récente parmi les suivantes :
Une fois la correction faite, il indique ce qu'il veut diffuser à l'étudiant.
Le gestionnaire de session indique la même chose de son coté pour l'ensemble des étudiants et ce qui est appliqué est ce sur quoi ils sont d'accord, donc le minimum des 2 quantités d'information.
Sur la plan, un 👁 indique les informations dont la diffusion est autorisé par le correcteur.
✉ permet d'ouvrir la messagerie afin de composer un message pour l'étudiant. Le corps du message indique que l'étudiant peut trouver la correction sur C5, avec un lien direct sur celle-ci.
Pour les différents intervenants.
Pour lancer une session d'examen :
Après la session d'examen :
Il est recommander d'envoyer un mail aux surveillants, pour leur expliquer leur travail.
On suppose que la liste des correcteurs ainsi que le barème ont été indiqués dans le paramétrage de la session.
Lancez ces commandes (Ubuntu) :
sudo apt update sudo apt install python3-websockets python3-aiohttp astyle curl npm racket zip # nginx certbot git clone https://github.com/texcoffier/C5.git cd C5 make
Si tout s'est bien passé, une page web s'ouvre sur l'interface d'administration. Vous pouvez alors cliquer sur «Session» pour choisir une session.
La configuration de C5 est un script exécutable, vous pouvez en créer autant que vous voulez. Il est conseillé de faire une configuration pour le développement local et une configuration pour la production. Dans tous les cas vous lancez les commandes sur votre machine de développement, elle seront éventuellement exécutées via SSH sur le serveur de production. On va supposer que vous appeliez votre configuration c5, voici ce que vous devez faire :
Plus rarement utilisé :
Il faut remplacer /WebSocket/, 4201, 4202 par les bonnes valeurs.
server { listen 443 ssl; server_name c5.univ-lyon1.fr; ssl_certificate /etc/letsencrypt/live/c5.univ-lyon1.fr/fullchain.pem; # managed by Certbot ssl_certificate_key /etc/letsencrypt/live/c5.univ-lyon1.fr/privkey.pem; # managed by Certbot location ~ /WebSocket/ { rewrite ^/WebSocket/(.*) /$1 break; proxy_pass http://127.0.0.1:4202; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection Upgrade; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } location ~ { proxy_pass http://127.0.0.1:4201; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }
Légende :
Ordre alphabétique des fichiers.
127 | Administre C5 sur la machine locale (même paramètres que utilities.py). |
BUILDINGS/Ariane BUILDINGS/Grignard BUILDINGS/Nautibus BUILDINGS/empty | Les plans des bâtiments. Empty est pour la salle privée dans enseignants. |
COMPILE_CPP/test.py | Exemple d'utilisation de compile_cpp et de récupération des informations concernant la place de l'étudiant dans la salle. |
COMPILE_JS/example.py | Un exemple minimaliste de cours pour commencer. |
COMPILE_JS/introduction.py | Mini cours de JavaScript. |
COMPILE_LISP/conway.py | Un exemple de programme LISP. |
COMPILE_PYTHON/editor.py | C'est l'éditeur interactif de sujet. Les sujets étant écrits en Python, il est nécessaire de les éditer et tester dans l'environnement Python. |
COMPILE_PYTHON/introduction.py | Un mini cours Python. |
COMPILE_REMOTE/errors.py | Une série d'exercices dans lesquels l'étudiant doit corriger des erreurs de syntaxe. |
COMPILE_REMOTE/files.py | Exemple de test sur la lecture et l'écriture de fichiers. |
COMPILE_REMOTE/grapic-chien.png | Média utilisé dans les exemples Grapic. |
COMPILE_REMOTE/grapic.py | Les exemples Grapic pour faire des applications graphiques. |
COMPILE_REMOTE/racket.py | Un exemple utilisant l'interpréteur Racket sur le serveur. |
COMPILE_REMOTE/test.py | Exemple d'utilisation de compile_remote. |
COMPILE_SQL/test.py | Exemple d'utilisation de compile_sql pour tester s'il fonctionne. |
COMPILE_TEXT/demo.py | Exemple d'utilisation de compile_text pour la saisie de texte libre. |
DOCUMENTATION/c5.svg | Lien vers «c5.svg» |
DOCUMENTATION/create_video | Script shell à éditer pour créer des vidéos |
DOCUMENTATION/favicon.ico | Lien vers «favicon.svg» |
DOCUMENTATION/flyer.html | Un diaporama pour une présentation orale de C5. |
DOCUMENTATION/index.html | Cette page d'explication. |
DOCUMENTATION/ screen-admin.(png|svg) screen-checkpoint.(png|svg) screen-course.(png|svg) screen-editor.(png|svg) screen-grading.(png|svg) screen-python.(png|svg) screen-root.(png|svg) screen-session-editor.(png|svg) screen-src.png screen-student.(png|svg) screen-time-travel.(png|svg) | Graphiques utilisés par la documentation. |
DOCUMENTATION/ tuto_student.webm tuto_teacher.webm | Tuto vidéo complètement obsolette. |
Grapic.h | Fourni la bilbiothèque Grapic à C5 |
Makefile | Utilisé par utilities.py, pas directement. |
README.rst | Page d'accueil pour GitHub. |
adm_course.py | Page d'accueil du cours avec les statistiques étudiants. |
adm_root.py | Page d'accueil des administrateurs C5. |
adm_session.css adm_session.py | Éditeur de session. |
c5.svg | Logo. |
ccccc.css ccccc.py | Interface d'étudiant pour travailler. |
checkpoint.py | Gestion de la salle d'attente et placement des étudiants sur le plan. |
clean.py | Script effaçant toutes les traces laissées par les tests de régression. |
comments.py | Calcule les statistiques sur les commentaires faits par les correcteurs. |
compatibility.py | Utilitaires pour ajouter des fonctions manquantes à JavaScript. Et aussi des fonctions utiles pour plusieurs pages. |
compile.py | La classe racine de tous les compilateurs. |
compile_cpp.py | Compilateur incomplet C++ en javascript. |
compile_js.py | Interpréteur JavaScript. |
compile_lisp.py | Interpréteur LISP. |
compile_python.py | Interpréteur Python (brython). |
compile_racket.rkt | Programme LISP interprétant dans une sandbox le fichier LISP dont le nom est envoyé sur l'entrée standard. Ce programme est lancé une fois par session car Racket prend du temps pour démarrer. |
compile_remote.py | Contacte compile_server.py pour compiler et exécuter. |
compile_server.py | Serveur de compilation et exécution de C++ avec différents compilateur et options possibles. |
compile_sql.py | Interpréteur SQL (alasql). |
compile_text.py | Compilateur ne faisant rien pour réponses en texte libre |
dns_server.py | Un filtre (stdin/stdout) calculant le nom de la machine à partir de son adresse IP. |
favicon.ico | L'icône des pages web, calculée à partir de c5.svg. |
home.py | Page d'accueil des étudiants. |
http_server.py | Le serveur web C5 pouvant fonctionner seul ou derrière un server web classique. |
infos_server.py | Un filtre (stdin/stdout) calculant le nom et prénom à partir du login. |
killer killer.c | Démons tuant les hiérarchies de processus prenant plus d'une seconde CPU et se trouvant dans /sys/fs/cgroup/C5_* |
launcher launcher.c | Ce programme possède le SUID root ce qui lui permet :
|
load_testing.py | Un simulateur de charge pour voir combien le système supporte d'étudiants. Difficilement utilisable car il faut le modifier pour indiquer un bon ticket de session. |
question.py | La classe permettant de définir les questions. |
question_after.py question_before.py | Utilitaire permettant de générer le fichier .json contenant les titres des questions des différentes sessions. C'est nécessaire pour faire les export ZIP et GIT. |
tests.py | Tests de régression (ne teste pas la salle d'attente). |
utilities.py | Classes et fonctions nécessaires pour les serveurs,
mais c'est aussi le script d'administration du serveur.
S'il est lancé sans arguments, cela affiche :
|
Les fichiers de configurations se terminent tous par .cf et contiennent une expression Python :
Les fichiers de logs se terminent tous par .log :
Divers fichiers générés à l'installation ou à l'utilisation :
Installer les paquets :
apt install python3-selenium chromium-chromedriver firefox-geckodriver xnest xvfb
Lancer les tests :
Le résumé est dans tests.log
Les cours qui ont utilisé C5 :
Quand | Quoi | Année | Nbr Inscrits | Utilisation |
---|---|---|---|---|
2022-09→2022-12 |
Initiation Algorithmique et Programmation Impérative en langage C | L1 | 585 |
2 sujets d'examen. 5 sujets d'annales. 2 devoirs maison. 15 sujets de TD. 11 sujets de TP. |
2023-01→2023-05 Pas terminée. |
Algorithmique et Programmation Récursive en LISP | L1 | 414 |
? sujets d'examen. ≥8 sujets de TP. |
2023-02 | Programmation concurrente | L3 | 165 |
1 sujet d'examen. 1 sujet d'entraînement. |
2023-04 | Applications en Mathématiques et Informatique | L1 | 312 | 1 sujet d'examen. |
Sur l'ensemble des sessions d'examens, voici l'histogramme du nombre de copies en fonction du nombre de commentaires faits par les correcteurs sur la copie. Une grande partie des copies n'ont pas été commentées du tout. Ceci a été calculé par comments.py.
Nombre de com- mentaires | Nombre de copies | |
---|---|---|
1 | 24 | |
2 | 31 | |
3 | 35 | |
4 | 33 | |
5 | 19 | |
6 | 15 | |
7 | 20 | |
8 | 8 | |
9 | 10 | |
10 | 9 | |
11 | 13 | |
12 | 6 | |
13 | 5 | |
14 | 2 | |
15 | 2 | |
16 | 2 | |
17 | 0 | |
18 | 0 | |
19 | 0 | |
20 | 1 | |
235 étudiants. Moyenne 5.5 commentaires. Médiane 4 commentaires. |
Les surveillances d'examens sont faites dans des salles de TP avec 18 étudiants. Les étudiants doivent impérativement travailler sur les ordinateurs de l'établissement et non leur ordinateur personnel.
Il est impératif que les étudiants aient fait un TP complet en utilisant C5 avant le jour de l'examen afin de ne pas être dans un environnement qu'ils ne connaissent pas.
Fonctionnalités manquantes dans l'éditeur :
Les avantages :
Les inconvénients :
Fonctionnalités manquantes dans le checkpoint (placement) :
Fonctionnalités manquantes dans la modélisation du sujet :
Dette technique :
Fonctionnalités manquantes de la page d'accueil :
Fonctionnalités manquantes de la page de notation :
Page de paramétrage de session :