Un langage spécifique au domaine pour l'outil de correction de travaux de programmation Oto

L'utilisation d'un outil d'aide à la correction peut contribuer à faciliter et à accélérer la correction de travaux pratiques de programmation. Au fil des ans, plusieurs log iciels ont été développés à cette fin, mais souffraient souvent d'un manque de flexibilité et étaient limités à un seul langage cible. Face à cette situation, l'outil Oto, développé à l'UQAM en langage Ruby, se voulait générique et extensible, pouvant théoriquement appliquer n'importe quel test à n'importe quel travail pratique. Toutefois, l'utilisation d'Oto en situation réelle a permis de constater que l'outil souffrait de certains défauts susceptibles de nuire à son utilisation à grande échelle, notamment en raison du manque de flexibilité de ses scripts de correction et de ses performances relativement faibles.

Dans ce mémoire, nous présentons les modifications que nous avons apportées à Oto pour en améliorer la flexibilité et les performances. D'abord, nous avons analysé l'outil pour en comprendre le fonctionnement et en localiser les faiblesses, qui provenaient principalement de choix architecturaux de coordination des tâches de correction. Nous nous sommes ensuite attardés sur les caractéristiques et les capacités qui devraient être offertes par Oto. Notre solution est passée par le remplacement du mécanisme de scripts Oto par un langage spécifique au domaine de type interne (textit{internal DSL}) basé sur Ruby. Au meilleur de nos connaissances, nous sommes les premiers à avoir eu recours à une telle approche dans le cadre d'un outil d'aide à la correction.

Les résultats que nous avons obtenus avec le DSL Oto sont venus confirmer une hausse considérable de la flexibilité et une amélioration des performances de l'outil, particulièrement pour les scripts de correction ayant recours à un nombre élevé de courts tests et aux corrections intra-groupes.

Pour des informations additionnelles sur les suites de ce projet, voir le site Web de l'outil Oto.