Évaluation par compétences

Added by Jérôme O. almost 2 years ago

Bonjour,
voici quelques jours que je travaille sur l'évaluation par compétence et j'ai vu que ça intéressait un certain nombre d'entre nous. Ce n'est pas parfait, je ne connaissais pas perl avant de regarder le code.
Voici où j'en suis.
J'utilise l'identifiant des questions pour indiquer LA compétence associée à chaque question en utilisant la fonction de groupes. Par exemple,

\begin{question}{Connaître:lire une image dans un tableau de valeurs}

sera associée à la compétence "Connaître".
L'inconvénient de cette méthode, c'est qu'on ne peut pas associer deux compétences à une même question, ce qui ne devrait pas me déranger.

Ensuite, il m'a fallu modifier trois fichiers perl d'AMC.

  • /usr/lib/AMC/perl/AMC-prepare.pl
    --- AMC-prepare.orig    2017-07-21 12:32:02.805635668 +0200
    +++ AMC-prepare.pl    2017-07-21 12:32:42.205253763 +0200
    @@ -19,6 +19,7 @@
     # <http://www.gnu.org/licenses/>.
    
     use encoding "utf-8";
    +use Encode qw(decode encode);
    
     use File::Copy;
     use File::Spec::Functions qw/splitpath catpath splitdir catdir catfile rel2abs tmpdir/;
    @@ -899,7 +900,7 @@
    
         if(/AUTOQCM\[NUM=([0-9]+)=(.+)\]/) {
           # association question-number<->question-title
    -      $scoring->question_title($1,$2);
    +      $scoring->question_title($1,decode('UTF-8', $2));
         }
    
         if(/AUTOQCM\[MULT\]/) {
    
  • /usr/share/perl5/AMC/DataModule/scoring.pm
    --- scoring.orig    2017-07-20 11:20:02.491345777 +0200
    +++ scoring.pm    2017-07-20 17:04:09.770781782 +0200
    @@ -505,6 +505,13 @@
           ." ) AS ticked" 
           ." FROM ".$self->table("answer")
           ." WHERE student=?"},
    +     'studentSkillLevel'=>
    +     {'sql'=>"SELECT SUBSTR(t.title, 1, INSTR(t.title, ':')-1) AS skill, SUM(s.score)/SUM(s.max)" 
    +      ." FROM ".$self->table("title"). " t" 
    +      ." INNER JOIN ".$self->table("score")." s" 
    +      ." ON s.question=t.question" 
    +      ." WHERE t.title LIKE '%:%' AND s.student=? AND s.copy=?" 
    +      ." GROUP BY s.copy, s.student, skill"},
          'studentQuestionsBase'=>
          {'sql'=>"SELECT q.question,q.type,q.indicative,q.strategy,t.title" 
           .",d.strategy AS default_strategy" 
    
  • /usr/share/perl5/AMC/Substitute.pm
    --- Substitute.orig    2017-07-20 11:20:53.158805832 +0200
    +++ Substitute.pm    2017-07-21 14:42:11.274395480 +0200
    @@ -22,6 +22,8 @@
    
     use AMC::Basic;
    
    +use utf8;
    +
     sub new {
         my (%o)=@_;
         my $self={'names'=>'',
    @@ -48,6 +50,43 @@
       return($mark);
     }
    
    +# Affiche le niveau acquis pour chaque compétence entrée comme groupe
    +# <30%: élémentaire - <70%: apprenti - <100%: confirmé - =100%: expert
    +sub format_skills {
    +  my ($self,$student,$copy)=@_;
    +  my $sth = $self->{scoring}->statement('studentSkillLevel');
    +  $sth->execute($student, $copy);
    +  my $stext = "\n";
    +  while(my @row=$sth->fetchrow_array) { # retrieve one row
    +    if (scalar(split '',$stext) > 6) {$stext = $stext . "  —  ";}
    +    $stext = $stext . @row[0] . " : ";
    +    if (@row[1]==1) {
    +      $stext = $stext . "expert";
    +    } elsif (@row[1]>=.7) {
    +      $stext = $stext . "confirmé";
    +    } elsif (@row[1]>=.3) {
    +      $stext = $stext . "apprenti";
    +    } else {
    +      $stext = $stext . "élémentaire";
    +    }
    +  }
    +  return($stext);
    +}
    +
    +# Affiche les pourcentages de réussite par groupe, arrondi à l'entier, le minimum étant fixé à zéro
    +sub format_knowledge {
    +  my ($self,$student,$copy)=@_;
    +  my $sth = $self->{scoring}->statement('studentSkillLevel');
    +  $sth->execute($student, $copy);
    +  my $stext = "\n";
    +  while(my @row=$sth->fetchrow_array) { # retrieve one row
    +    if (scalar(split '',$stext) > 6) {$stext = $stext . "  —  ";}
    +    my $knowledge=int(@row[1]*100+.5);
    +    $stext = $stext . @row[0] . " : " . (0, $knowledge)[$knowledge>0] . " %";
    +  }
    +  return($stext);
    +}
    +
     sub substitute {
       my ($self,$text,$student,$copy)=@_;
    
    @@ -59,6 +98,8 @@
           $text =~ s/\%[M]/$self->format_note($student_mark->{'max'})/ge;
           $text =~ s/\%[s]/$self->format_note($student_mark->{'mark'})/ge;
           $text =~ s/\%[m]/$self->format_note($self->{'scoring'}->variable('mark_max'))/ge;
    +      $text =~ s/\%[C]/$self->format_skills($student, $copy)/ge;
    +      $text =~ s/\%[c]/$self->format_knowledge($student, $copy)/ge;
         } else {
           debug "No marks found ! Copy=".studentids_string($student,$copy);
         }
    
Cela permet d'ajouter deux substitutions pour la commande verdict :
  • %C : affiche les compétences avec leur niveau d'acquisition. --verdict "%(ID) : %C"
  • %c : affiche les groupes (ou compétences) avec leur pourcentage de réussite. --verdict "%(ID) : %s/%m %c"

Je joins deux copies d'écran affichant les résultats obtenus sur une copie fictive.

Ma question est la suivante : est-il possible d'ajouter ces modifications localement, afin de ne pas altérer les fichiers originaux d'AMC ?

savoirs.jpg - groupes (ou compétences) avec leur pourcentage de réussite. --verdict "%(ID) : %s/%m %c" (29.4 kB)

competences.jpg - compétences avec leur niveau d'acquisition. --verdict "%(ID) : %C" (30.1 kB)


Replies (6)

RE: Évaluation par compétences - Added by Liouba Leroux over 1 year ago

Merci pour ce partage !
Pensez-vous qu'il soit possible de compléter ces modifs pour avoir ces infos dans le fichier ods d'export ?

RE: Évaluation par compétences - Added by DENIS Sébastien 8 months ago

Bonjour
je suis tyrès interréssé par cette solution mais je n'arrive pas à la faire fonctionner
Pouvez vous m'aidez
Cordialement
Sébastien Denis

RE: Évaluation par compétences - Added by Jérôme O. 8 months ago

Bonjour,
j'applique chacun des 3 patchs suivants aux fichiers de AMC. Sous Ubuntu, en supposant que vous ayez déposé mes patchs (fichiers diff) dans le répertoire utilisateur, cela ce fait de la façon suivante :

cd /usr/share/perl5/AMC/DataModule/
sudo patch -b -i "~/scoring.diff" scoring.pm
cd ..
sudo patch -b -i "$~/Substitute.diff" Substitute.pm
cd /usr/lib/AMC/perl
sudo patch -b -i "$~/AMC-prepare.diff" AMC-prepare.pl

Ensuite, dans les paramètres du QCM, je change la zone en-tête des copies (voir copie d'écran jointe).

Bon week-end.

AMC-prepare.diff (570 Bytes)

scoring.diff (763 Bytes)

Substitute.diff (2.2 kB)

param__trage_AMC.png (78.1 kB)

RE: Évaluation par compétences - Added by Jérôme O. 8 months ago

Pardon, j'ai laissé des $ qu'il faut supprimer dans le code ci-dessus :
cd /usr/share/perl5/AMC/DataModule/
sudo patch -b -i "~/scoring.diff" scoring.pm
cd ..
sudo patch -b -i "~/Substitute.diff" Substitute.pm
cd /usr/lib/AMC/perl
sudo patch -b -i "~/AMC-prepare.diff" AMC-prepare.pl

RE: Évaluation par compétences - Added by DENIS Sébastien 7 months ago

Bonjour merci pour toutes ces indications je vais essayer....
J'ai fabriquer un fichier exemple a l'aide de la version de M Carpeaux. je voous le met en piece jointe (utilisation de amcstudent label
du coup l'avantage c'est que l'on peut noter plusieurs competences dans une meme question.
Il me reste deux soucis; je n'arrive pas a afficher les pourcentages dans l'export openOffice
Les references aux questions qui sont résumées dans le tableau a la fin de la copie ne fonctionne plus.
J'iamerai utiliser ce doc modele avec le pourcentage des competences affichées sur la coorection. Est-ce possible selon vous?
Cordialement
Sébastien Denis

listetest.csv (114 Bytes)

groupes.tex (23.6 kB)

RE: Évaluation par compétences - Added by DENIS Sébastien 7 months ago

Bonjour
J'ai fait les modifs dans les 3 fichiers. J'arrive a regrouoper les compétences dans le tableau d'export mais l'annotation des copies corrigées n'inscrit pas les compétences. (meme avec %C).
Je vous joint ces fichiers.. Je n'arrive pas a trouver l'erreur. Si vous pouviez m'aider.
Cordialement
Sébastien D

Substitute.pm (3.7 kB)

scoring.pm (36.1 kB)

AMC-prepare.pl (24.8 kB)

(1-6/6)