Loading repository data…
Loading repository data…
prog-II-ufes / repository
Repositório com o script de correção automática dos trabalhos e exercícios
A transparent discovery signal based on current public GitHub metadata.
This score does not audit code, security, maintainers, documentation quality, or suitability. Verify the repository and its current documentation before adoption.
Este repositório contém o script :shipit: de correção dos exercícios e trabalhos da disciplina de Programação II. O script foi desenvolvido para funcionar com a linguagem de programação C e a idea é que todos tenham acesso e o utilizem para correção de todas as atividades realizadas ao longo da disciplina.
Este README é dividido em duas partes. A primeira explica de forma detalhada como o script deve ser utilizado para correção dos exercícios e trabalhos. A segunda parte é um tutorial de como o script funciona e como professores e monitores devem utilizá-lo para gerar as atividades.
:construction: Nota: o script de correção está em constante desenvolvimento. Por isso, é importante que você sempre atualize o repositório antes de utilizá-lo. Para isso, basta executar o comando git pull dentro da pasta do script. Além disso, caso encontre algum problema ou bug, reporte aos professores e/ou monitores
Para facilitar a explicação neste tutorial, este repositório possui uma pasta com um exercício de exemplo chamada exercicio_exemplo_soma/. É ela que será utilizada para explicar os principais pontos de atualização.
:movie_camera: Vídeo: caso você prefira, existe um tutorial em vídeo explicando a utilização do script para os alunos da disciplina. Para acessar o vídeo clique aqui.
Dentro desta pasta existem 4 outras pastas:
Casos: contém os casos de teste com as entradas e as saídas para cada caso.Gabarito-obj: contém os arquivos objetos (.o) do código correto feito pelo professor (não está disponível). O utilizador não precisa se preocupar com ela.Includes: contém os arquivos header (.h) do código correto feito pelo professor.Respostas: contém a resposta do aluno. Dentro dela tem um exemplo de código do aluno FernandoMoreira.
Respostas/NomeAluno/ e colocar o código resposta do exercício dentro dela. Não utilize espaço, caracteres especiais ou acentos no nome do aluno.Uma vez que você tenha preparado o diretório do exercício, copie o script correcao.sh, que está na pasta raíz deste repositório, para dentro da pasta do exercício, que neste exemplo é a pasta exercicio_exemplo_soma/.
Agora, abra um terminal na pasta do exercício e execute o script com o comando
./correcao.sh
:red_circle: Importante: caso seja exibido um erro de permissão, você deve executar o comando chmod +x correcao.sh para dar permissão de execução ao script.
Depois que executar, o script irá fazer o seguinte:
.o) com os do professor que estão na pasta Gabarito-obj/ para verificar se existe algum erro de linkagem.Casos/ na raíz da pasta do exercício.Resultado.csv na raíz da pasta do exercício.Então note que, toda vez que você quiser testar algum código que você fez de algum exercício, faça o seguinte:
Crie uma pasta para o exercício (se ela não existir)
Garanta que dentro da pasta do exercício, exista:
Casos/ com as entradas e saídas do exercicioGabarito-obj/ com os objetos (.o) do professorIncludes/ com os arquivos header (.h) do professor (note que não é necessário ter arquivos dentro dessa pasta caso o exercício não exija .h)Crie uma pasta Respostas/, e dentro dessa pasta crie outra pasta com o seu nome, sem espaços ou caracteres especiais, por exemplo Respostas/FernandoMoreira/, como está no exercicio exemplo.
Coloque todos os seus arquivos do código fonte dentro dessa pasta com seu nome.
Copie o script correcao.sh para dentro da pasta raíz do seu exercício.
Execute o script no terminal com o comando ./correcao.sh
Para o funcionamento correto do script, três requisitos precisam ser cumpridos.
Com esses requisitos cumpridos, o script pode ser executado.
Primeiramente, um diretório deverá ser criado. Podemos chamá-lo de ScriptCorrecao/, e dentro desse diretório deverão ser criadas pastas da sequinte forma:
- ScriptCorrecao/
- Casos/
- 1/
entrada_1.txt
- 2/
entrada_2.txt
.
.
.
- x/
entrada_x.txt
- Gabarito-src/
*.c
*.h
- correcao.sh
- configuracoes
Na qual:
Gabarito-src/ é a pasta onde estará o código fonte provido pelo professor com os arquivos .h e os .c do trabalho ou exercício.
A pasta Casos/, são os casos de teste com entradas que serão usadas para gerar as saídas correspondentes ao caso de teste, ou seja, o script fará com que primeiramente o código dentro de Gabarito-src/ use os casos para gerarem os resultados.
O arquivo correcao.sh é o script propriamente dito que deve ser executado no terminal.
O arquivo configuracoes é um arquivo de configuração que pode ser utilizado para definir algumas variáveis que o script utiliza. Por exemplo, quais arquivos devem ser usados para avaliação, qual o peso de cada arquivo, limite de tempo de execução, etc. Para mais informações, consulte os comentários disponíveis no arquivo configuracoes deste repositório.
Importante:
main dentro do arquivo de configuracao, o script irá verificar se a main do aluno funciona corretamente junto com o código do professor.completo dentro do arquivo de configuracao, o script irá verificar se o código do aluno funciona independente do código do professor. Em outras palavras, ele apenas verifica se o código do aluno está correto e se ele passa nos testes.Como já descrito anteriormente, para executar o script, basta abrir um terminal na pasta do exercício e executar o comando: ./correcao.sh
O script possui 4 parâmetros de execução:
--professor: de maneira geral, essa opção deve ser utilizada para gerar todos os fontes do exercício. Normalmente, quem usa é o professor ou monitor. Ao executar ./correcao.sh --professor, o script irá compilar e executar o código dentro da pasta Gabarito-src/ utilizando as entradas dentro da pasta Casos/. Assim todos os resultados dos casos serão gerados em uma pasta saida/ dentro de cada caso. Além disso, uma pasta Includes/ também será criada e os .h do professor dentro da pasta Gabarito-src/ serão copiados para lá. Uma pasta Gabarito-obj/ também será criada com os .o e o binário prog gerados pela compilação. Dessa forma, a primeira execução do script deverá ser utilizando o parâmetro --professor. Então a hierarquia do diretório ficará da seguinte forma:
- ScriptCorrecao/
- Casos/
- 1/
- saida/
out_entrada_1.txt
entrada_1.txt
- 2/
- saida/
out_entrada_2.txt
entrada_2.txt
.
.
.
- x/
- saida/
out_entrada_x.txt
entrada_x.txt
- Gabarito-obj/
*.o
prog
- Gabarito-src/
*.c
*.h
- Includes/
*.h
- correcao.sh
- configuracoes
--interfacefixa:
Ao executar ./correcao.sh --interfacefixa, o script irá verificar se o aluno criou a mesma quantidade de arquivos .c e .h correspontente ao professor, como também se os nomes dos arquivos são os mesmos, assim caso o aluno tenha criado algum .c a mais, ele será desconsiderado na compilação e provavelmente erros de linkagem irão acontecer. Caso o script seja rodado sem esse parâmetro, e se o aluno criou algum .c a mais, então esse arquivo será considerado na compilação, porém se der erro de compilação, erro de valgrind ou erro de resultado, o aluno será penalizado.
--resultados:
- Ao executar ./correcao.sh --resultados, o script irá desconsiderar se o aluno errou algum resultado de output, assim qualquer erro desse tipo não será considerado na nota.
--valgrind:
- Ao rodar ./correcao.sh --valgrind, o script irá desconsiderar se o aluno obteve algum erro de alocação de memória ou algo do tipo, assim qualquer erro desse tipo não será considerado na nota.
Após executar o script com o parâmetro --professor, a pasta com o código dos alunos deverá ser criada manualmente com o nome Respostas/ e dentro dessa pasta, terá as pastas com os nomes os alunos (sem espaço) e o código fonte deles. Assim a hierarquia do diretório ficará da seguinte forma:
- ScriptCorrecao/
- Casos/
- Gabarito-src/
- Includes/
- Respostas/
- Aluno1/
*.c
*.h
- Aluno2/
*.c
*.h
.
.
.
- AlunoX/
*.c
*.h
- correcao.sh
Com a pasta Respostas/ criada, o script deverá ser executado sem nenhum parâmetro: ./correcao.sh
Dessa maneira, o script compila e roda o código dos alunos utilizando as entradas da pasta Casos/, e gerando as respostas dentro da pasta Resultados/ que será criada automaticamente na raíz da pasta ScriptCorrecao/.
Dentro dessa pasta 'Resultados/' serão criadas pastas com os nomes dos alunos seguindo a hierarquia parecida com a pasta 'Respostas/', porém dentro de cada pasta do aluno será criada uma pasta para cada nome do .o do professor dentro da pasta 'Gabarito-obj/'.
Por exemplo, se dentro da pasta Gabarito-obj/ existem os arquivos:
file1.ofile2.ofile3.ofile4.oEntão dentro da pasta Resultados/ terá:
- Resultados/
- Aluno1/
- completo/
- file1/
- file2/
- file3/
- file4/
- Aluno2/
- completo/
- file1/
- file2/
- file3/
- file4/
.
.
.
- AlunoX/
- completo/
- file1/
- file2/
- file3/
- file4/
A pasta completo/ significa que todos os arquivos .c e .h do AlunoX da pasta Respostas/ serão copiados para lá, serão compilados e executados com as entradas da pasta Casos/, gerando os resultados sem nenhuma interferência do professor.
Já nas outras pastas como a file1/ por exemplo, seguirá parecido, todos os arquivos .c e .h do AlunoX na pasta Respostas/ serão copiados para lá e s