Verifiche

Alml consente la realizzazione di questionari di verifica che producono, nella composizione HTML, delle pagine dinamiche in grado di calcolare automaticamente l'esito degli stessi. Attraverso questo meccanismo è possibile imporre anche un tempo esatto per lo svolgimento delle verifiche, con il calcolo di una «penalità» nel punteggio, per ogni secondo di ritardo.

Le pagine HTML prodotte in questo modo contengono del codice JavaScript e si concludono normalmente con la stampa di un rapporto che sintetizza l'esito della verifica.

Se lo studente che svolge la verifica tenta di ricaricare la pagina, o di ritornare sulla pagina della verifica quando ha ottenuto la pagina conclusiva da stampare, ottiene l'azzeramento di tutti i dati. Inoltre, quando ritorna alla pagina della verifica, deve provvedere anche a ricaricarla, altrimenti il meccanismo di controllo successivo rischia di fallire in ogni caso (a danno dello studente stesso).

Allo stato attuale, le verifiche realizzate con Alml sono relativamente affidabili, usando i navigatori consueti (i vari derivati di Mozilla e Internet Explorer, ma tralasciando Galeon), ed è anche possibile fare in modo che la verifica si svolga in una finestra priva di menù e icone. Tuttavia, rimane la possibilità che uno studente, particolarmente esperto, possa scaricare il sorgente utilizzando direttamente il protocollo HTTP (con Wget per esempio) per poi interpretare il codice JavaScript, ma per farlo deve disporre degli strumenti necessari nella postazione in cui si trova a dover svolgere la verifica, ma soprattutto deve avere anche il tempo per compiere tale attività.

Figura u101.1. Schema sintattico semplificato di un capitolo contenente un questionario.

capitolo
  |--testh1|unnumberedtesth1
  |    |    [id="ancora"] [lang="lingua"] [bookmark="segnalibro"]
  |    |    [testtime="tempo"] [testtimepenalty="penalità"]
  |    |    [testwindow="0|1"] [testanswaretime="tempo"]
  |    |    [testmaxscore="punteggio_massimo"]
  |    |    [testcodehide="0|1|2|3"]
  |    `--testo_lineare
  |--dati_descrittivi...
  |    |--[blocco_generico]
  |    `--[testinfo]
  |         `--testo_lineare
  |--domanda...
  |    |--[domanda_risposta_singola]
  |    |    |--testlistquestion
  |    |    |--[blocco_generico]...
  |    |    `--testlist...
  |    |         `--{testlistitem score="punteggio"}...
  |    |              `--testo_lineare
  |    |--[domanda_risposta_multipla]
  |    |    |--testmultiquestion
  |    |    |--[blocco_generico]...
  |    |    `--testmulti...
  |    |         `--{testmultiitem score="punteggio"}...
  |    |              `--testo_lineare
  |    `--[domanda_risposta_testuale]
  |         |--testtextquestion
  |         |--[blocco_generico]...
  |         `--testtext...
  |              `--{testtextitem score="punteggio" width="larghezza"
  |                   |           [hint="suggerimento"] [caps="0|1"]}...
  |                   `--testo_lineare
  |--testsend
  `--[endofchapter]

Capitolo per le verifiche

Per definire un questionario di verifica con Alml, occorre dichiarare un capitolo con un'intestazione speciale: testh1, oppure unnumberedtesth1. Questi elementi prevedono gli attributi degli altri capitoli normali, aggiungendo due attributi speciali per definire la durata massima in secondi e la penalità da dedurre dal punteggio complessivo per ogni secondo di ritardo:

<testh1 testtime="600" testtimepenalty="0.008" testwindow="0"
        testanswaretime="20" testmaxscore="10">
Verifica su directory e percorsi
</testh1>

In questo caso, l'esempio mostra la dichiarazione del titolo di una verifica che prevede un tempo massimo di 10 minuti (600 s), una penalità di 0,008 per ogni secondo di ritardo (circa 0,5 punti per ogni minuto) e un tempo massimo di 20 s per stampare l'esito della verifica stessa; inoltre si sa che al massimo è possibile raggiungere il punteggio di 10.

Dopo il titolo, si possono mettere dei blocchi descrittivi, come nei capitoli normali, per esempio delle figure o delle tabelle di riferimento. Successivamente è obbligatorio inserire almeno un elemento testinfo, con lo scopo, probabilmente, di identificare l'esecutore della verifica:

<testinfo>data:</testinfo>
<testinfo>cognome e nome:</testinfo>
<testinfo>classe e sezione (corso):</testinfo>

Ogni elemento testinfo si traduce in un campo da compilare, secondo il significato dato dalla descrizione che appare nell'elemento stesso.

Tra gli elementi testinfo (ed eventualmente anche dopo), si possono inserire dei blocchi descrittivi liberi. Successivamente, si devono indicare delle domande, che possono prevedere diverse modalità di risposta. Le domande sono racchiuse in un elemento differente, a seconda del tipo di risposta che ci si aspetta; alle domande seguono le risposte, racchiuse da elementi appropriati. L'esempio seguente riguarda il caso di una domanda che richiede una sola risposta, scelta da un elenco:

<testlistquestion>
Rispetto allo schema della figura <objectref
id="verifica-grafo-directory-file">, scegliere il percorso assoluto
che porta al nodo numero <num>2</num>. Si dia una sola risposta.
</testlistquestion>

<testlist>
<testlistitem score="1.1"><file>/home</file>;</testlistitem>
<testlistitem score="0"><file>/home/tizio</file>;</testlistitem>
<testlistitem score="0"><file>/home/caio</file>;</testlistitem>
<testlistitem score="0"><file>/home/caio/bin</file>;</testlistitem>
<testlistitem score="0"><file>/home/caio/mail</file>;</testlistitem>
<testlistitem score="0"><file>/home/sempronio</file>.</testlistitem>
<testlistitem score="-1"><file>%$£%$/</file>.</testlistitem>
</testlist>

In questo caso, l'elemento testlistquestion contiene il testo della domanda; l'elemento testlist è fatto per contenere un elenco di elementi testlistitem, i quali contengono le varie risposte. Si può osservare che l'attributo score degli elementi testlistitem consente di stabilire il punteggio che si ottiene in base alla risposta e che questo può anche essere negativo.

Si osservi che l'elemento testlist genera un elenco numerato con bottoni, dove solo un bottone per tutto il gruppo può essere selezionato. Tuttavia, è possibile che ci siano risposte alternative valide, eventualmente con punteggi differenti.

L'esempio seguente riguarda il caso di una domanda che richiede la selezione di tutte le risposte valide di un elenco:

<testmultiquestion>
Cosa è rappresentato nella figura <objectref id="verifica-disegno">?
selezionare tutte le risposte valide:
</testmultiquestion>

<testmulti>
<testmultiitem score="1">albero</testmultiitem>
<testmultiitem score="1">grafo</testmultiitem>
<testmultiitem score="-1">istogramma</testmultiitem>
<testmultiitem score="-1">diagramma di flusso</testmultiitem>
</testmulti>

Il funzionamento di questo tipo di domanda con risposte a selezione multipla funziona in modo simile a quello in cui la risposta valida può essere una sola. Si può osservare che in questo caso diventa importante attribuire valori negativi alle risposte errate, perché altrimenti sarebbe facile risolvere le verifiche selezionando tutte le risposte.

L'esempio seguente riguarda il caso di una domanda che richiede la scrittura delle risposte:

<testtextquestion>
Inserire ordinatamente i nomi delle quattro figure geometriche.
</testtextquestion>

<testtext>
<testtextitem score="1" width="30" hint="q--++-+o"  caps="0" ans="quadrato">A</testtextitem>
<testtextitem score="1" width="30" hint="c-+++-o"   caps="0" ans="cerchio">B</testtextitem>
<testtextitem score="1" width="30" hint="t+--++-+o" caps="0" ans="triangolo">C</testtextitem>
<testtextitem score="1" width="30" hint="e+-+-+o"   caps="0" ans="esagono">D</testtextitem>
</testtext>

La struttura degli elementi di questo tipo di domanda è lo stesso degli altri, con la differenza che l'elemento testtextitem contiene degli attributi in più: l'attributo width dichiara la dimensione del campo testuale di inserimento; l'attributo hint consente di mostrare una sorta di suggerimento (nell'esempio viene messa la lettera iniziale e la lettera finale, assieme a dei simboli che consentono di capire quando ci si aspetta una consonante o una vocale); l'attributo caps consente, se assume il valore uno, di verificare anche la corrispondenza tra le lettere maiuscole e minuscole; l'attributo ans serve a specificare la risposta attesa. Il testo che appare nell'elemento, viene mostrato davanti al campo da compilare.

Alla fine delle domande e degli elenchi di selezione, va messo l'elemento vuoto testsend, che nella composizione in HTML genera il bottone per concludere la verifica:

<testsend>

Tabella u101.8. Capitoli di verifica.

Elemento Descrizione
testh1 [id="ancora"] [lang="..."] [bookmark="..."]
       [testtime="..."] [testtimepenalty="..."]
       [testwindow="0|1"]
       [testanswaretime="tempo"]
       [testmaxscore="massimo"]       [testcodehide="n"]
Titolo del questionario. L'attributo id consente di specificare un'ancora di riferimento; l'attributo lang consente di specificare la lingua del capitolo; l'attributo bookmark consente di specificare un segnalibro alternativo per la composizione in formato PDF; l'attributo testtime consente di indicare il tempo massimo in secondi; testtimepenalty permette di specificare la penalità da sottrarre al punteggio per ogni secondo di ritardo; testwindow consente di far eseguire la verifica in una finestra priva di menù e di icone; testanswaretime consente di stabilire il tempo a disposizione per la stampa del risultato; testmaxscore serve a indicare ad Alml qual è il punteggio massimo che può produrre la verifica; testcodehide consente di rendere difficilmente interpretabile il codice HTML e JavaScript, attribuendo un valore intero maggiore di zero.
testinfo
Etichetta descrittiva di un'informazione testuale da inserire, per identificare la persona che esegue la verifica.
testlistquestion
Domanda a cui lo studente deve dare una risposta singola.
testlist
Elenco di risposte alternative, costituite da elementi testlistitem.
testlistitem score="punteggio"
Risposta che può essere selezionata. L'attributo score serve a specificare il punteggio associato alla scelta della risposta.
testmultiquestion
Domanda a cui lo studente può dare una o più risposte.
testmulti
Elenco di risposte, costituite da elementi testmultiitem.
testmultiitem score="punteggio"
Risposta che può essere selezionata. L'attributo score serve a specificare il punteggio associato alla scelta della risposta.
testtextquestion
Domanda a cui lo studente deve dare risposte testuali.
testtext
Elenco di risposte, costituite da elementi testtextitem.
testtextitem score="punteggio"
width="n_caratteri"
[hint="suggerimento"]
[caps="0|1"]
Risposta da inserire. L'attributo score serve a specificare il punteggio associato all'inserimento della risposta esatta; l'attributo width serve a specificare la larghezza del campo che riceve la risposta; l'attributo hint, se usato, mostra un suggerimento per la risposta; l'attributo caps consente di richiedere una corrispondenza esatta della risposta, anche nell'uso delle lettere maiuscole e minuscole.

Si osservi che, nel risultato della composizione, prima delle domande appare l'intervallo del punteggio che si può ottenere, con una forma simile a questa: [-2..3]. In questo caso, si intende avviare che il punteggio minimo che si può ottenere rispondendo è -2, mentre il punteggio massimo è 3. Se non si risponde affatto, il punteggio che si ottiene è sempre zero.

Impedire la lettura del codice

Il codice che compone la pagina HTML di una verifica realizzata con Alml, potrebbe essere interpretato per scoprire le risposte da dare. Ci sono due modi attraverso i quali si può rendere molto difficoltoso questo progetto: impedendo la visualizzazione del sorgente attraverso il programma usato come navigatore e rendendo il codice troppo complicato.

Per impedire (o per tentare di impedire) di accedere al sorgente della pagina HTML, è possibile utilizzare l'attributo testwindow="1" nell'elemento testh1, in modo da imporre lo svolgimento della verifica in una finestra del navigatore, priva di menù e priva di icone; cosa che si affianca al fatto che il tasto [Ctrl] dovrebbe risultare bloccato e così anche il tasto destro del mouse.

Per rendere difficoltosa la lettura del sorgente (il quale potrebbe comunque essere scaricato con un programma come Wget), si può usare l'attributo testcodehide="9" nell'elemento testh1. Per la precisione, testcodehide="0" produce un codice molto chiaro e ordinato, il quale potrebbe essere utile per scopi didattici, mentre valori progressivi, superiori, rendono via via meno comprensibile il sorgente.

Esempio di verifica

Nel capitolo successivo viene mostrato un esempio di verifica realizzato con Alml, di cui qui viene mostrato il sorgente:

<testh1 testtime="120" testtimepenalty="0.1" testwindow="0"
        testanswaretime="20" testmaxscore="10">
Esempio di verifica con Alml
</testh1>

<object pos="fixed">
<tabular col="4" columnfractions="0.309 0.191 0.309 0.191" border="0">
<tbody>
  <trow>tempo a disposizione:
<colsep><num>120</num> secondi
<colsep>punteggio massimo:
<colsep><num>10</num>
</trow>
  <trow>quantità di domande:
<colsep><num>3</num>
<colsep>punti di penalità per ogni secondo di ritardo:
<colsep><num>0,1</num>
</trow>
</tbody>
</tabular>
</object>

<testinfo>data:</testinfo>
<testinfo>cognome e nome:</testinfo>
<testinfo>classe e sezione (corso):</testinfo>

<object pos="fixed" sep="border">
<caption>

    Figura <objectref>. Simboli geometrici.

</caption>
<imgblock>
<figimg alt="albero di file e directory" width="50%">
[omissis]
</figimg>
</imgblock>
</object>

<heightrequired height="5cm">

<testlistquestion>
Cos'è la figura geometrica «C»? selezionare solo una risposta:
</testlistquestion>

<testlist>
<testlistitem score="2">triangolo</testlistitem>
<testlistitem score="0">esagono</testlistitem>
<testlistitem score="-1">piramide</testlistitem>
</testlist>

<testmultiquestion>
Cos'è la figura geometrica «A»? selezionare tutte le risposte valide:
</testmultiquestion>

<testmulti>
<testmultiitem score="2">quadrato</testmultiitem>
<testmultiitem score="-1">ellissi</testmultiitem>
<testmultiitem score="2">quadrilatero</testmultiitem>
</testmulti>

<testtextquestion>
Inserire ordinatamente i nomi delle quattro figure geometriche.
</testtextquestion>

<p>Nei campi appare un suggerimento, composto da simboli <samp>+</samp>,
per le consonanti, e da simboli <samp>-</samp> per le vocali.</p>

<testtext>
<testtextitem score="1" width="30" hint="+--++-+-" caps="0"
ans="quadrato">A</testtextitem>
<testtextitem score="1" width="30" hint="+-+++--" caps="0"
ans="cerchio">B</testtextitem>
<testtextitem score="1" width="30" hint="++--++-+-" caps="0"
ans="triangolo">C</testtextitem>
<testtextitem score="1" width="30" hint="-+-+-+-" caps="0"
ans="esagono">D</testtextitem>
</testtext>

<testsend>

Realizzando la composizione in formato HTML, la pagina del capitolo in questione dovrebbe apparire come nella figura u101.10, dove si nota in evidenza il conto alla rovescia del tempo a disposizione.

Figura u101.10. Composizione in HTML.

questionario interattivo

Se si compila il questionario e si seleziona il bottone che appare in fondo, si ottiene una finestra con il titolo della verifica e l'invito a stampare, attraverso un bottone grafico. A fianco del titolo, appare un «sorriso» se il risultato è stato superiore alla metà del punteggio massimo previsto:

Esempio di verifica con Alml :-D

 

[STAMPA!!!]

 

Nella stampa, invece, si ottiene il dettaglio dell'esecuzione della verifica, assieme alla valutazione complessiva:

Esempio di verifica con Alml :-D

data: 10 ottobre 2012 cognome e nome: Tizio Tizi classe e sezione (corso): 1H inizio della verifica: 112.10.16 11:47.8 conclusione della verifica: 112.10.16 11:47.43 tempo impiegato: 35.835 s = 0.5972500000000001 m; tempo a disposizione: 120 s; ritardo: 0 s; penalità nel punteggio per ogni minuto di ritardo: 6; penalità totale nel punteggio: 0; punteggio totale della verifica: 10

[STAMPA!!!]

Q1 Cos'è la figura geometrica «C»? selezionare solo una risposta:
  scelto: 1   punteggio: 2
Q2 Cos'è la figura geometrica «A»? selezionare tutte le risposte valide:
  scelto: 1
  scelto: 3
punteggio: 4
Q3 Inserire ordinatamente i nomi delle quattro figure geometriche.
  risposto: quadrato - punteggio: 1
  risposto: cerchio - punteggio: 1
  risposto: triangolo - punteggio: 1
  risposto: esagono - punteggio: 1

A seconda del tipo di interprete JavaScript, l'anno che appare nelle date può essere visualizzato nel modo corretto, oppure, come nell'esempio, ridotto di 1 900.

Il contenuto del rapporto che si genera è essenziale; inoltre l'estetica non è curata. Infatti, lo scopo della stampa che si produce è solo quello di documentare l'esito della verifica, di fronte alle contestazioni, ma senza indicare la risposta esatta che avrebbe potuto essere data.

Quando uno studente termina una verifica, sullo schermo vede solo l'invito a stampare e, se è stato usato l'attributo testmaxscore, può sapere se il risultato che ha ottenuto è almeno superiore alla metà del punteggio massimo previsto. Per la precisione, appare un «viso», rappresentato da:
:-(
:-|
:-)
:-D

In pratica, :-( indica solo che il risultato è insufficiente; :-| rappresenta un risultato appena sufficiente; :-) segnala un risultato buono, mentre :-D un risultato ottimo.

Se lo studente torna alla pagina da compilare, ottiene un modulo azzerato completamente, ma se vuole riprovare la verifica, deve ricaricare la pagina per azzerare anche il conteggio del tempo.

Se si esegue una composizione in uno dei formati per la stampa (PostScript o PDF), si ottiene un questionario da compilare a mano, senza la possibilità di imporre meccanicamente un tempo massimo di esecuzione e senza poter avere una valutazione automatica; ma utilizzando l'opzione --draft in fase di compilazione, si mettono in evidenza i punteggi e le risposte esatte, da dare agli studenti dopo la verifica, come confronto (figura u101.14).

Figura u101.13. Composizione per la stampa normale.

questionario stampato

Figura u101.14. Composizione per la stampa: «bozza», dove sono evidenziati i risultati e le risposte.

questionario corretto

Nei capitoli successivi si possono provare alcuni esempi di verifica prodotta con Alml, uguali nel contenuto delle domande, ma diversi nelle opzioni usate per produrli (attraverso un diverso insieme di valori per gli attributi dell'elemento testh1).

«a2» 2013.11.11 --- Copyright © Daniele Giacomini -- appunti2@gmail.com http://informaticalibera.net