Mumuki :
un outil d'évaluation du code
conçu pour la classe
Federico Aloi
La plate-forme Mumuki est un outil de développement logiciel libre, open-source et en ligne, développé en Argentine destinée à l'enseignement de la programmation. Cette plate-forme fournit automatiquement un retour aux élèves, à des fins d'évaluation formative. Elle a été expérimentée en classe de seconde avec des élèves qui suivent un cours d'introduction à la programmation.
La plate-forme Mumuki
La plate-forme Mumuki https://github.com/mumuki est un outil de développement logiciel libre, open-source et accessible sur le Web, développé à en Argentine. Elle est destinée à l'enseignement de la programmation. Elle fournit automatiquement un retour aux élèves, à des fins d'évaluation formative, dans une démarche pédagogique guidée par la pratique, et où des éléments théoriques sont introduits au cours des exercices. Elle permet d'utiliser de nombreux langage, de Haskell et Prolog à Python et C.
En décembre 2016, cette plate-forme était utilisée dans six universités argentines, cinq publiques et une privée, cinq lycées et deux instituts privés d'enseignement de la technologie – la liste complète des structures qui l'utilisent est disponible sur le site http://www.mumuki.org/. Elle totalise plus de neuf cents utilisateurs.
Dans cette plate-forme, les activités sont organisée autour de leçons, elles-mêmes composées d'exercices. L'exercice est donc l'unité élémentaire de contenu. Un exercice est la description d'un problème que l'élève doit résoudre en fournissant un programme, qui dépasse rarement quelques lignes. L'enseignant fournit les éléments permettant de calculer automatiquement le retour fourni à l'élève, selon deux critères : la correction du programme et sa qualité.
Pour la la correction, un ensemble de tests unitaires représentatifs est fourni par le enseignant. Le programme, qui peut aussi comprendre du code additionnel fourni par le enseignant, est exécuté sur ces valeurs d'entrées. Bien que le succès sur un ensemble de tests ne soit pas une preuve de correction, cette méthode se révèle suffisamment bonne en pratique pour les programmes de la taille et de la complexité demandées : aucun faux positif n'a été détecté à ce jour.
L'évaluation de la qualité repose sur une démarche simple mais efficace : l'enseignant définit un ensemble de règles, les attentes, qui spécifient les schémas qui doivent être présents dans la solution. Le code est ensuite transformé dans une représentation abstraite, indépendante du langage, et les attentes sont évaluées sur cette représentation.
Pour éclairer ce point, imaginons que, dans un cours de programmation fonctionnelle qui utilise Haskell comme langage principal, l'enseignant veuille construire un exercice qui permet d'introduire la fonction filter.
Cet exercice fournit quelques exemples et demande à l'élève de définir une fonction onlyEvenNumbers qui renvoie les entiers pairs de la liste donnée en argument. Comme l'utilisation de la fonction filter est attendue, les définitions récursives de fonctions sont interdite. Également, la réutilisation de code est encouragée, donc la solution doit contenir un appel à la fonction even du prélude d'Haskell. Ces contraintes mènent à la spécification suivante.
Tests unitaires :
- Expect onlyEvenNumbers [] to equal [].
- Expect onlyEvenNumbers [1, 2, 3] to equal [2].
- Expect onlyEvenNumbers [7, 14, 9, 10] to equal [14, 10].
Attentes :
- onlyEvenNumbers should not use direct recursion.
- onlyEvenNumbers should use even.
Deux solutions possibles et le retour de l'outil sont présentés figures 1 et 2.
- onlyEvenNumbers (x:xs)
| even x = x : onlyEvenNumbers xs
| otherwise = onlyEvenNumbers xs
Figure 1 : l'élève a utilisé une définition récursive et non la fonction filter.
Les tests passent, mais l'inadéquation aux attentes indique
que la fonction ne devrait pas utiliser une définition récursive.
- onlyEvenNumbers ls =
filter (\x -> x `mod` 2 == 1) ls
Figure 2 : l'élève n'a pas utilisé la fonction even et elle a, en outre, fait une erreur :
un nombre est pair quand le reste de sa division par 2 est 0, et non 1.
Les tests ne passent pas, et l'inadéquation aux attentes indique
que la fonction devrait utiliser la fonction even.
Chaque tentative de l'élève est archivée, si bien que l'enseignant peut accéder non seulement à la solution finale proposée par l'élève, mais aussi à toutes les étapes qui l'y ont menée. Ce type d'information est particulièrement utile pour améliorer les exercices, comprendre comment les élèves raisonnent et, plus généralement pour étudier le processus d'apprentissage d'un point de vue statistique.
Ces données sont présentées dans une interface web, ou textuelle, à laquelle seul l'enseignant a accès. Cet outil permet aux enseignants de contrôler les progrès des élèves et de leur adresser des commentaires spécifiques. Un exemple est présenté figure 3.
Figure 3 : deux solutions pour le même exercice et leurs différences
sont indiquée à l'enseignant, utilisant le surlignage.
L'enseignant dispose d'une boîte de dialogue pour adresser un commentaire à l'élève.
Mumuki à l'École
De mars à décembre 2016, la plate-forme Mumuki a été utilisée comme outil principal d'un cours d'introduction à la programmation, destiné à des élèves de cinquième année d'un lycée technique (ndt : notre classe de seconde). L'âge moyen des élèves était de seize ans.
Le cours était constitué de deux séances hebdomadaires de deux heures chacune. Il s'adressait à deux groupes de 15 élèves. Le langage utilisé était Gobstones [1], un langage impératif destiné à l'enseignement, développé à Université de Quilmes. Tous les élèves avait déjà suivi un cours d'introduction à la programmation impérative où Scratch [2] était utilisé à la fois pour se familiariser avec la résolution de problèmes et pour créer de petit jeux.
La principale motivation pour utiliser cette plate-forme était de remplacer les cours magistraux, inutiles pour de nombreux élèves, qui se déconcentrent rapidement et ne prennent pas de notes. Dans ce but, la plate-forme était utilisée comme un manuel scolaire interactif : pour introduire les concepts centraux du cours, les éléments de programmation impérative, pour les mettre en pratique dans de nombreux exercices et comme ouvrage de référence – ce qui était particulièrement utile quand, par exemple, les élèves développaient un petit jeu hors de la plate-forme et avaient besoin de réviser une notion.
Bien qu'aucune comparaison avec un groupe témoin n'ait encore été faite, les évaluations anonymes, fournies par les élèves, montrent un taux élevé d'adhésion, spécialement dû au fait que les retours automatiques étaient suffisants pour lever les doutes des élèves.
Certains éléments issus des évaluations et de ma propre expérience méritent d'être mentionnés. Bien que l'outil lui-même ne l'encourage pas, les élèves qui finissaient les exercices avant la fin de la séance aidaient souvent leurs camarades à terminer les leurs, leur expliquant leurs erreurs en utilisant la plate-forme. Environ 10 % des élèves n'avaient pas d'ordinateur à la maison et, pour eux, la plate-forme jouait aussi un rôle de facteur d'inclusion, car elle peut être utilisée depuis n'importe quel objet muni d'un navigateur web, tels un téléphone ou une tablette.
Federico Aloi
Mumuki Project, Buenos Aires, Argentine
federico@mumuki.org
Traduction de Gilles Dowek
Cet article est sous licence Creative Commons (selon la juridiction française = Paternité - Pas de Modification).
http://creativecommons.org/licenses/by-nd/2.0/fr/
NOTES
[1] P. E. Martínez López. Las bases conceptuales de la Programación: Una nueva forma de aprender a programar. EBook, La Plata, Buenos Aires, Argentina, 2013.
[2] M. Resnick, J. Maloney, A. Monroy-Hernández, N. Rusk, E. Eastmond, K. Brennan, A. Millner, E. Rosenbaum, J. Silver, B. Silverman, et al. Scratch: programming for all. Communications of the ACM, 52(11):60-67, 2009.
|