Pular para o conteúdo principal

Moodle + CodeRunner — correção automática de código

O CodeRunner é um tipo de questão do Moodle em que o aluno escreve código e a nota sai de rodar esse código contra uma bateria de testes. É ideal para estender o aprendizado da parte de linguagem do curso — bits, estruturas de controle, tipos de dados — com feedback imediato, complementando os labs de firmware (Wokwi/ESP32).

O que ele roda (e o que não roda)

O código é executado num sandbox (servidor Jobe) usando o compilador do host (gcc/g++, python3, …) — não é firmware de ESP32. Use o CodeRunner para os conceitos de C/C++/Python puros (ex.: ehPar, FizzBuzz, soma de dígitos) e os labs de GitHub/Wokwi para o hardware.


1. Como funciona​

  • CodeRunner é o tipo de questão (plugin qtype_coderunner) instalado no Moodle.
  • Jobe é o sandbox separado que compila e executa o código com segurança.
  • O aluno responde e clica em Check: o CodeRunner roda os test cases e mostra na hora quais passaram (modo adaptativo). No modo típico tudo-ou-nada, todos os testes precisam passar.

Linguagens suportadas incluem Python3, C, C++, Java, PHP, JavaScript, Octave e SQL.


2. Instalação​

2.1 O plugin CodeRunner​

Instale o qtype_coderunner pelo diretório de plugins do Moodle: Administração do site → Plugins → Instalar plugins (ou baixe de moodle.org/plugins/qtype_coderunner). Ele traz junto o qbehaviour_adaptive_adapted_for_coderunner.

2.2 O sandbox Jobe​

Logo após instalar, o CodeRunner já aponta para o Jobe público da Universidade de Canterbury — bom para experimentar as primeiras questões, mas não para produção (sem garantia de disponibilidade e com limite de uso).


3. Criar sua primeira questão (passo a passo)​

  1. No curso, vá em Banco de questões → Criar uma nova questão → CodeRunner.
  2. Question type: escolha a linguagem/modelo, por exemplo:
    • c_function — o aluno escreve uma função (você fornece os testes que a chamam).
    • c_program / cpp_program — o aluno escreve o programa inteiro com main().
    • python3 — função ou programa em Python.
  3. Question name e Question text (o enunciado).
  4. Answer (resposta de referência): uma solução correta — serve para o Moodle validar os testes.
  5. Test cases: para cada teste, informe o código de teste (que chama a solução), a entrada (stdin, se houver) e a saída esperada.
    • Marque Use as example em 1–2 testes (aparecem numa tabela "Por exemplo" para o aluno).
    • Deixe pelo menos um teste oculto (evita que o aluno "chute" código que só passa nos testes visíveis).
  6. Marque Validate on save: o Moodle roda sua resposta de referência contra os testes antes de salvar.
Sempre um teste oculto

Um teste hidden impede soluções que apenas reproduzem as saídas visíveis. É a prática recomendada pelo próprio CodeRunner.


4. Exemplos ligados ao curso​

Tipo: c_function · Enunciado: "Escreva int ehPar(unsigned char n) que retorne 1 se n for par, usando um operador bitwise."

Answer (referência):

int ehPar(unsigned char n) {
return (n & 1) == 0;
}

Test cases (código de teste → saída esperada):

Test codeEsperadoUso
printf("%d\n", ehPar(4));1example
printf("%d\n", ehPar(7));0example
printf("%d\n", ehPar(0));1hidden
C++ no CodeRunner

Para questões em C++, use o tipo cpp_program (ou derive do tipo C mudando a linguagem para cpp e incluindo <iostream>). Compilar C/C++ é mais lento que Python — dimensione o Jobe conforme a turma.


5. Montar o questionário (Quiz)​

  1. No curso: Adicionar atividade → Quiz. Defina prazos, tentativas e nota.
  2. Em Editar questionário → Adicionar → do banco de questões, escolha as questões CodeRunner criadas.
  3. Comportamento das questões: o CodeRunner sempre roda em modo adaptativo (o botão Check dá feedback imediato). Você pode manter Adaptive/Interactive para prática, com penalidade por tentativa.
  4. Feedback: aproveite os testes example para o aluno entender o que se espera, e mensagens de feedback por questão.
Precheck

Habilite o Precheck para dar ao aluno um botão de "conferir" sem penalidade — ótimo para aprendizado, deixando a penalidade só no Check definitivo.


6. Boas práticas​

  • 1–2 testes example + pelo menos 1 hidden por questão.
  • Validate on save sempre — pega erros nos testes cedo.
  • Penalidade leve por tentativa incentiva pensar antes de checar, sem punir demais.
  • Exporte o banco (formato Moodle XML) para versionar e reutilizar entre turmas/semestres.
  • Template customizado quando precisar de setup extra (ex.: incluir headers, limitar tempo). O CodeRunner permite editar o template do tipo de questão.

7. Como isso estende o curso​

Uma divisão natural de trabalho:

OndePara quê
Moodle + CodeRunnerTreinar linguagem com correção instantânea: bits, operadores, estruturas de controle, tipos, funções.
GitHub + CommitPointEntregas versionadas dos labs (firmware, Docker, MQTT), avaliadas por commit.
Wokwi / ESP32 físicoRodar o firmware de verdade (hardware, WiFi, MQTT).

Os desafios D1–D4 dos labs (ex.: ehPar, FizzBuzz, menorDivisor, somaDigitos) viram excelentes questões CodeRunner: o mesmo objetivo de aprendizagem, agora com feedback automático e imediato antes de o aluno levar o conceito para o hardware.


Guia de referência — Moodle + CodeRunner.