-
Notifications
You must be signed in to change notification settings - Fork 0
/
abstract.tex
27 lines (24 loc) · 1.49 KB
/
abstract.tex
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
L'absence de redondance est souvent un gage de qualité pour un code
source. En effet, lorsqu'un fragment de code est répété, ses
imperfections -- pour ne pas dire ses erreurs -- le sont elles-aussi.
Seulement, il arrive parfois que l'on constate de la redondance dans
un grand corpus de code, typiquement quand ce corpus a été construit
par des développeurs ne communiquant peu ou pas du tout entre
eux. Deux instances de cette situation nous intéressent
particulièrement : l'ensemble des codes sources des paquets {\Opam} et
l'ensemble des copies d'étudiants répondant tous aux mêmes questions
de programmation. Comment partitionner leurs définitions en fonction
de leur ``similarité''?
Dans cet article, nous proposons un outil de partitionnement
automatique d'un ensemble de définitions écrites en OCaml. Cet outil
s'appuie sur une fonction dédiée de prise d'empreintes des arbres de
syntaxe du langage intermédiaire {\LambdaCode} ainsi que sur un
algorithme de classification hiérarchique classique que nous avons
adapté à notre usage.
Cet outil prend la forme d'une bibliothèque nommée {\Asak} disponible
sur {\Opam}. Nous l'avons utilisée d'une part pour partitionner
automatiquement les réponses d'étudiants qui apprennent OCaml en
utilisant la plateforme {\LearnOCaml}, et d'autre part, pour détecter des
redondances sur l'ensemble des codes sources des paquets~{\Opam}
disponibles aujourd'hui. Nous évaluons les résultats obtenus et
formulons quelques limites de notre approche.