Diferencia entre revisiones de «Ejemplo de un VPL Java»

De Documentación Campus Virtual de la UEx
Ir a la navegación Ir a la búsqueda
 
(No se muestran 8 ediciones intermedias del mismo usuario)
Línea 5: Línea 5:
::Vamos a crear un Laboratorio Virtual de Programación Java:  
::Vamos a crear un Laboratorio Virtual de Programación Java:  


::::<span style="font-weight: normal;"><span class="" style="font-size: large;"><span class="" style="font-family: Verdana, Geneva, sans-serif; font-size: medium;"><p>Práctica en la que se pide al alumno implementar un "algoritmo" que genera una salida en función de la entrada :</p><p></p><p></p><ul><li>0 -&gt; ""<br></li><li>3 -&gt; "0"<br></li><li>7 -&gt; "1"</li><li>34 -&gt; "10 11 12 13"</li><li>45 -&gt; 14</li><li>91 -&gt; 29</li><li>100 -&gt; ""</li></ul>..&nbsp;</span><br></span>
::::<span style="font-weight: normal;"><span class="" style="font-size: large;"><span class="" style="font-family: Verdana, Geneva, sans-serif; font-size: medium;"><p>Práctica en la que se pide al alumno implementar un ''algoritmo'' que genera una salida en función de la entrada :</p><p></p><p></p><ul><li>0 -&gt; ""<br></li><li>3 -&gt; "0"<br></li><li>7 -&gt; "1"</li><li>34 -&gt; "10 11 12 13"</li><li>45 -&gt; 14</li><li>91 -&gt; 29</li><li>100 -&gt; ""</li></ul>..&nbsp;</span><br></span>
    :::: <span class="" style="font-size: medium; font-family: Verdana, Geneva, sans-serif;"><p>La prácticas entregadas serán evaluadas según los siguientes criterios:</p><p></p><ul><li>No compila: 20%</li><li>La salida no se corresponde con lo esperado: 30%</li><li>Cada una de las salidas correctas que ofrezca el programa: +10%</li></ul></span></span>
::::<span class="" style="font-size: medium; font-family: Verdana, Geneva, sans-serif;"><p>La prácticas entregadas serán evaluadas según los siguientes criterios:</p><p></p><ul><li>No compila: 20%</li><li>La salida no se corresponde con lo esperado: 30%</li><li>Cada una de las salidas correctas que ofrezca el programa: +10%</li></ul></span></span>
     ::<span style="font-weight: normal;"><span class="" style="font-size: large;"><span class="" style="font-family: Verdana, Geneva, sans-serif; font-size: small;">'''''Referencia''': http://www.science.smith.edu/dftwiki/index.php/Tutorial:_Moodle_VPL_--_Feed_Different_Tests_on_Command_Line''..&nbsp;</span><br></span>
     <span style="font-weight: normal;"><span class="" style="font-size: large;"><span class="" style="font-family: Verdana, Geneva, sans-serif; font-size: small;">'''''Referencia''': http://www.science.smith.edu/dftwiki/index.php/Tutorial:_Moodle_VPL_--_Feed_Different_Tests_on_Command_Line''..&nbsp;</span><br></span>


=== '''Configuración''' ===  
=== '''Configuración''' ===  
Línea 34: Línea 34:


=== '''Ajustes avanzados''' ===  
=== '''Ajustes avanzados''' ===  
::<h5><span class="" style="color: rgb(255, 102, 51); font-size: medium; font-family: Verdana, Geneva, sans-serif;">'''Ficheros para la ejecución'''</span></h5>
:<h5><span class="" style="color: rgb(255, 102, 51); font-size: medium; font-family: Verdana, Geneva, sans-serif;">'''Ficheros para la ejecución'''</span></h5>


:::Se establecen los ficheros necesarios para la ejecución, depurado o evaluación de la entrega. Esto incluye ficheros script, programas de prueba y ficheros de datos.  
::Se establecen los ficheros necesarios para la ejecución, depurado o evaluación de la entrega. Esto incluye ficheros script, programas de prueba y ficheros de datos.  
::::En este laboratorio Java, tenemos dos de los cuatro ficheros opcionales para ejecutar la entrega ('''vpl_run.sh''' y '''vpl_evaluate.sh'''):
::En este laboratorio Java, tenemos dos de los cuatro ficheros opcionales para ejecutar la entrega ('''vpl_run.sh''' y '''vpl_evaluate.sh'''):
     <div style="text-align:center;">[[Archivo:EjecucionJava1.PNG|600px]] [[Archivo:EjecucionJava2.PNG|600px]]</div>
     <div style="text-align:center;">[[Archivo:EjecucionJava1.PNG|600px]] [[Archivo:EjecucionJava2.PNG|600px]]</div>
     <br>
     <br>
     <table>
     <table>
         <caption style="text-align: left;"><span class="" style="color: rgb(51, 102, 255); font-size: x-large;">Ficheros de Ejecución</span></caption>
         <caption style="text-align: left;"><span class="" style="color: rgb(51, 102, 255); font-size: x-large;">Ficheros de Ejecución</span></caption>
        <tbody>
          <tr>
            <tr>
          <th scope="col">
                <th scope="col">
                     <h6><span class="" style="color: rgb(255, 102, 51); font-size: medium; font-family: Verdana, Geneva, sans-serif;">vpl_run.sh</span></h6>
                     <h6><span class="" style="color: rgb(255, 102, 51); font-size: medium; font-family: Verdana, Geneva, sans-serif;">vpl_run.sh</span></h6>
                 </th>
                 </th>
Línea 265: Línea 264:
                 </td>
                 </td>
             </tr>
             </tr>
       </tbody>
        
     </table>
     </table>


::<h5><span class="" style="color: rgb(255, 102, 51); font-size: medium; font-family: Verdana, Geneva, sans-serif;">'''Límites máximos de recursos de ejecución'''</span></h5>
:<h5><span class="" style="color: rgb(255, 102, 51); font-size: medium; font-family: Verdana, Geneva, sans-serif;">'''Límites máximos de recursos de ejecución'''</span></h5>
:Aquí establecemos los límites máximos para el tiempo de ejecución, la memoria usada, el tamaño de los ficheros generados durante la ejecución y el número de procesos simultáneos. Para nuestro ejemplo, no hemos definido límites.<br>  
::Aquí establecemos los límites máximos para el tiempo de ejecución, la memoria usada, el tamaño de los ficheros generados durante la ejecución y el número de procesos simultáneos. Para nuestro ejemplo, no hemos definido límites.<br>  


::<h5><span class="" style="color: rgb(255, 102, 51); font-size: medium; font-family: Verdana, Geneva, sans-serif;">'''Ficheros a mantener mientras se ejecuta'''</span></h5>
:<h5><span class="" style="color: rgb(255, 102, 51); font-size: medium; font-family: Verdana, Geneva, sans-serif;">'''Ficheros a mantener mientras se ejecuta'''</span></h5>
:En esta opción marcamos los ficheros que deben permanecer durante la fase de ejecución:
::En esta opción marcamos los ficheros que deben permanecer durante la fase de ejecución:
<div style="text-align:center;">[[Archivo:MantenerJava.PNG|600px]]</div>
<div style="text-align:center;">[[Archivo:MantenerJava.PNG|600px]]</div>


::<h5><span class="" style="color: rgb(255, 102, 51); font-size: medium; font-family: Verdana, Geneva, sans-serif;">'''Variaciones'''</span></h5>
:<h5><span class="" style="color: rgb(255, 102, 51); font-size: medium; font-family: Verdana, Geneva, sans-serif;">'''Variaciones'''</span></h5>
: No se han configurado variaciones para esta actividad.  
::No se han configurado variaciones para esta actividad.  


::<h5><span class="" style="color: rgb(255, 102, 51); font-size: medium; font-family: Verdana, Geneva, sans-serif;">'''Comprobación de servidores de ejecución'''</span></h5>
:<h5><span class="" style="color: rgb(255, 102, 51); font-size: medium; font-family: Verdana, Geneva, sans-serif;">'''Comprobación de servidores de ejecución'''</span></h5>
:En este enlace podemos comprobar el estado de los servidores de ejecución usados por esta actividad.  
::En este enlace podemos comprobar el estado de los servidores de ejecución usados por esta actividad.  


::<h5><span class="" style="color: rgb(255, 102, 51); font-size: medium; font-family: Verdana, Geneva, sans-serif;">'''Servidores de ejecución locales'''</span></h5>
:<h5><span class="" style="color: rgb(255, 102, 51); font-size: medium; font-family: Verdana, Geneva, sans-serif;">'''Servidores de ejecución locales'''</span></h5>
:No se han suministrado urls de servidores de ejecución locales para esta actividad.
::No se han suministrado urls de servidores de ejecución locales para esta actividad.


=== '''Probar actividad''' ===  
=== '''Probar actividad''' ===  
::<h5><span class="" style="color: rgb(255, 102, 51); font-size: medium; font-family: Verdana, Geneva, sans-serif;">'''Ejecutar'''</span></h5>
:<h5><span class="" style="color: rgb(255, 102, 51); font-size: medium; font-family: Verdana, Geneva, sans-serif;">'''Ejecutar'''</span></h5>
::Si queremos, podemos ver si todo funciona bien editando el fichero de entrega y ejecutándolo para probar:
::Si queremos, podemos ver si todo funciona bien editando el fichero de entrega y ejecutándolo para probar:
<div style="text-align: center;">[[Archivo:EjecutarJava.PNG|600px]]</div>
<div style="text-align: center;">[[Archivo:EjecutarJava.PNG|600px]]</div>
Línea 292: Línea 291:
</span>
</span>
</div>
</div>
<div style="text-align:left;">Volver a la página:
'''[[VPL (Virtual Programming Lab)]]''' 
'''[[Administración de un VPL]]'''</div>

Revisión actual - 08:36 29 mar 2022

Ejemplo de un VPL Java

Vamos a crear un Laboratorio Virtual de Programación Java:

Práctica en la que se pide al alumno implementar un algoritmo que genera una salida en función de la entrada :

  • 0 -> ""
  • 3 -> "0"
  • 7 -> "1"
  • 34 -> "10 11 12 13"
  • 45 -> 14
  • 91 -> 29
  • 100 -> ""
.. 

La prácticas entregadas serán evaluadas según los siguientes criterios:

  • No compila: 20%
  • La salida no se corresponde con lo esperado: 30%
  • Cada una de las salidas correctas que ofrezca el programa: +10%
   Referencia: http://www.science.smith.edu/dftwiki/index.php/Tutorial:_Moodle_VPL_--_Feed_Different_Tests_on_Command_Line.. 

Configuración

En un principio, como en la creación de todas las actividades de VPL, estas serían las únicas opciones de configuración del laboratorio: Nombre y "Descripción del Laboratorio"
CrearVPLJava.PNG

Casos de prueba

Para este laboratorio no se han implementado tests de pruebas, y el fichero vpl_evaluate.cases no será necesario, ya que se facilita el fichero vpl_evaluate.sh.



Opciones de ejecución

En este laboratorio dejaremos que se ejecute el script de Java predeterminado y no lo seleccionamos ninguno en concreto. Dejamos las opciones en "Autodetectar". Con el fin de que el alumno pueda comprobar su actividad antes de la entrega definitiva, activamos la opción de Ejecutar, y para que la actividad se evalúe automáticamente, activamos la opción Evaluar, que le dará una calificación al ejercicio:
EjecucionVPLJava.PNG

Ficheros requeridos

Nuestro fichero se llama practica.java, y como hemos visto en la tabla, la extensión java' es la que tienen los ficheros Java, y para el que nuestro laboratorio ejecutará el script autodetectado de Java.
En este caso, practica.java es el único fichero que se le requiere al alumno, el fichero con su entrega de la actividad. Aquí es donde el alumno debe escribir el código de la práctica.
RequeridoVPLJava.PNG

Ajustes avanzados

Ficheros para la ejecución
Se establecen los ficheros necesarios para la ejecución, depurado o evaluación de la entrega. Esto incluye ficheros script, programas de prueba y ficheros de datos.
En este laboratorio Java, tenemos dos de los cuatro ficheros opcionales para ejecutar la entrega (vpl_run.sh y vpl_evaluate.sh):
EjecucionJava1.PNG EjecucionJava2.PNG
   
Ficheros de Ejecución
vpl_run.sh
vpl_evaluate.sh

  1. #! /bin/bash
  2. # D. Thiebaut

  3. cat > vpl_execution <<EEOOFF
  4. #! /bin/bash
  5.  
  6. prog1=practica
  7.  
  8. javac \${prog1}.java > /dev/null
  9.  
  10. if ((\$? > 0)); then
  11.      echo "Error compiling your program"
  12.      exit
  13. fi
  14. KEYS=(0 3 7 34 45 91 100) 
  15. CORRECTOUTPUTS=("" "0" "1" "10 11 12 13" 14 29 "" )

  16. for i in \`seq 0 5\`; do
  17.   echo ""
  18.   key=\${KEYS[\$i]}
  19.   echo "Test # \$i"
  20.   echo "key = \$key"
  21.   echo "The correct output is: \${CORRECTOUTPUTS[\$i]}"
  22.   echo "Your program output:"
  23.   echo "java practica 30 \$key"
  24.   java practica 30 \$key
  25. done

  26. EEOOFF
  27.  
  28. chmod +x vpl_execution


  1. #! /bin/bash
  2. # D. Thiebaut

  3. cat > vpl_execution <<EEOOFF
  4. #! /bin/bash
  5. #set -x
  6.  
  7. # --- program tested (no extension) ---
  8. prog1=practica

  9. # --- grades 
  10. gradeNotCompile=20
  11. gradeCompileNoGoodOutput=30
  12. gradeIncrement=10    # (100-30)/7 / number of tests

  13. # --- compile student program ---
  14. javac \${prog1}.java 
  15.  
  16. if ((\$? > 0)); then
  17.      echo "Comment :=>>  Error compiling your program"
  18.      echo "Grade :=>> \$gradeNotCompile"
  19.      exit
  20. fi

  21. # --- minimum grade if not passing any test ---
  22. grade=\$gradeCompileNoGoodOutput

  23. # =================================================
  24. KEYS=(0 3 7 34 45 91 100) 
  25. CORRECTOUTPUTS=("" "0" "1" "10 11 12 13" 14 29 "" )
  26. N=30
  27. NOTESTS=7


  28. # =================================================
  29. # function that prints the difference between user and expected output
  30. incorrectOutput() {
  31.     if [ "\$1" ]; then   # if there's a parameter
  32.         i=\$1
  33.         echo "Comment :=>>- Your output is incorrect."

  34.         #--- display test file ---
  35.         echo "Comment :=>>- Your program tested with:"
  36.         echo "<|--" 
  37.         cat data\${i}.txt
  38.         echo "--|>"

  39.         echo "Comment :=>> ---------------"
  40.         echo "Comment :=>>- Your output:"
  41.         echo "Comment :=>> ---------------"
  42.         echo "<|--"
  43.         cat user.out.org
  44.         echo "--|>"
  45.         echo ""
  46.         echo "Comment :=>> ---------------"
  47.         echo "Comment :=>>- Expected output: "
  48.         echo "Comment :=>> ---------------"
  49.         echo "<|--"
  50.         cat data\${i}.out
  51.         echo "--|>"
  52.     fi
  53. }

  54. # function that tells user of program crash or infinite loop, and what the test was.
  55. timeoutOutput() {
  56.     if [ "\$1" ]; then   # if there's a parameter
  57.         i=\$1
  58.         echo "Comment :=>>- Your program has timed out or crashed."

  59.         #--- display test file ---
  60.         echo "Comment :=>>- Your program tested with:"
  61.         echo "<|--" 
  62.         cat data\${i}.txt
  63.         echo "--|>"
  64.     fi
  65. }

  66. # function that removes non-digits, extra spaces, and extra blank lines from text file.
  67. cleanup () {
  68.     if [ "\$1" ]; then   # if there's a parameter
  69.         
  70.         #--- remove non numbers and non minus---
  71.         cat \$1 | sed 's/[^0-9*.0-9\ -]*//g' > dummy.out
  72.         mv dummy.out \$1
  73.  
  74.         #--- remove multiple spaces --- 
  75.         cat \$1 | sed 's/  */ /g' > dummy.out
  76.         mv dummy.out \$1

  77.         #--- remove blank lines ---
  78.         cat \$1 | sed '/^\s*\$/d' > dummy.out
  79.         mv dummy.out \$1
  80.    fi
  81. }
  82. NOTESTS_1=\`expr \$NOTESTS - 1 \`
  83. for i in \`seq 0  \$NOTESTS_1 \`; do
  84.    # ==============================================
  85.    # TEST i
  86.    # timeout code from 
  87.    # http://stackoverflow.com/questions/5161193/bash-script-that-kills-a-child-process-after-a-given-timeout
  88.    # ==============================================
  89.    #--- run program, capture output, display to student ---

  90.    key=\${KEYS[\$i]}
  91.    echo "Comment :=>>-TEST \$i" 
  92.    echo "Comment :=>> key = \$key"
  93.    echo "Comment :=>> N = \$N"

  94.    echo "\$N \$key" > data\${i}.txt
  95.    
  96.    timeout 30 java \${prog1} \$N \$key  &> user.out
  97.    retcode=\$?

  98.    #--- if we killed the waiter, everything is good ---
  99.    if [ \$retcode -eq  124 ]; then
  100.        echo "Comment :=>>-Your program has stopped working."
  101.        timeoutOutput \$i
  102.        continue
  103.    else
  104.        echo "Comment :=>>-Your program ran to completion."
  105.    fi

  106.    cp user.out user.out.org

  107.    #--- copy expected output in output file
  108.    echo \${CORRECTOUTPUTS[\$i]} > data\${i}.out

  109.    #--- remove non numbers, space and extra lines from user.out ---
  110.    #--- and from datai.out
  111.    cleanup user.out
  112.    cleanup data\${i}.out

  113.    #--- compute difference --- 
  114.    diff -y -w --ignore-all-space user.out data\${i}.out > diff.out
  115.    #echo "----- diff.out ------"
  116.    #cat diff.out
  117.    #echo "---------------------"
  118.    #diff -y -w --ignore-all-space user.out data\${i}.out > diff.out

  119.    #--- reject if different ---
  120.    if ((\$? > 0)); then
  121.       incorrectOutput \$i
  122.    
  123.       # --------------------- REWARD IF CORRECT OUTPUT -----------------
  124.    else
  125.       #--- good output ---
  126.       echo "Comment :=>>- Congrats, your output is correct."
  127.       echo "Comment :=>> --------------------------------."
  128.       echo "<|--"
  129.       cat user.out.org
  130.       echo "--|>"
  131.       grade=\$((grade+gradeIncrement))
  132.    fi
  133. done

  134. # =================================================
  135. # Report grade
  136. if (( grade > 100 )); then
  137.    grade=100
  138. fi
  139. echo "Grade :=>> \$grade"



  140. EEOOFF
  141.  
  142. chmod +x vpl_execution

Límites máximos de recursos de ejecución
Aquí establecemos los límites máximos para el tiempo de ejecución, la memoria usada, el tamaño de los ficheros generados durante la ejecución y el número de procesos simultáneos. Para nuestro ejemplo, no hemos definido límites.
Ficheros a mantener mientras se ejecuta
En esta opción marcamos los ficheros que deben permanecer durante la fase de ejecución:
MantenerJava.PNG
Variaciones
No se han configurado variaciones para esta actividad.
Comprobación de servidores de ejecución
En este enlace podemos comprobar el estado de los servidores de ejecución usados por esta actividad.
Servidores de ejecución locales
No se han suministrado urls de servidores de ejecución locales para esta actividad.

Probar actividad

Ejecutar
Si queremos, podemos ver si todo funciona bien editando el fichero de entrega y ejecutándolo para probar:
EjecutarJava.PNG
En este ejemplo, hemos configurado el grado de similitud aceptado:
SimilaridadJava.PNG

Volver a la página:

VPL (Virtual Programming Lab)

Administración de un VPL