Avaliador
Sistema para avaliar códigos de forma automatizada.
Como funciona
A ideia central é executar códigos e comparar a saída da execução com o que é esperado a ser produzido, para vários pares entrada-saída preparados anteriormente.
Já que só precisa executar o código e ver a saída que produz, o funcionamento é praticamente o mesmo para qualquer linguagem de programação. E considerando também as questões de segurança que podem surgir, este sistema utilizará containers Docker para executar os códigos.
Docker
Por utilizar Docker, o ambiente será controlado e isolado, permitindo algum nível de segurança neste sistema. As imagens serão construídas de forma a que dentro do container seja um usuário comum a executar o código. Além disso é possível limitar uso de CPU e Memória, além de instituir um tempo máximo (timeout) de execução caso ocorra uma situação de programa que nunca finaliza sua execução.
Arquitetura
O sistema é dividido nas seguintes partes:
-
Banco de dados: MongoDB
- Usuários
- Exercícios e seus pares entrada-saída
- Avaliação de um código: status e feedback
-
Backend: API NodeJS
- Cadastrar Exercícios com pares entrada-saída de execução
- Gerenciar avaliação do código (Rota que agenda, obtêm status, etc... da avaliação de um código específico)
-
Frontend: Site NextJS
- Autenticar como usuário
- Listar códigos enviados em cada exercício e seus feedbacks
- Enviar código para ser avaliado em exercício específico
apt-get install build-essential