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