Informações Principais
     Resumo
     Abstract
     Introdução
     Conclusão
     Download
  
  
  
 
Introdução
 
 
Acadêmico(a): Marcos Kirchner
Título: Sistema para Correção Automática de Questões nas Provas de Concursos de Programação
 
Introdução:
Concursos de programação são competições organizadas por alguma entidade, onde várias equipes recebem um determinado número de problemas e devem resolvê-los escrevendo um programa. Há algumas boas razões para se participar desse tipo de concurso. As pessoas podem se divertir, ao mesmo tempo em que aprimoram suas habilidades de programação e aumentam as perspectivas de trabalhos. Além disso, alguns concursos como o TopCoder Challenge dão prêmios em dinheiro (SKIENA; REVILLA, 2003, p. 345).
O número de participantes em concursos é elevado. Na competição da ACM de 2004, participaram 3150 times de 75 países e 73 times avançaram para as finais mundiais (ASSOCIATION FOR COMPUTING MACHINERY, 2004). Os times normalmente recebem vários problemas para serem solucionados e podem submeter um programa à correção várias vezes (passível de punição para soluções incorretas). Durante as provas os times precisam de uma resposta rápida sobre a correção do programa, para aprimorar a implementa ção caso necessário, ou direcionar seus esforços para a solução de outro problema.
Porém, é inviável para a equipe organizadora da competição receber e testar manualmente cada problema submetido. Para apresentar a resposta de uma submissão em tempo adequado, as competições normalmente fazem uso de sistemas de correção automatizados (juizes on-line). Segundo Manzoor (2004), a ACM utiliza um software chamado PC2 em suas competições.
Esse tipo de software parece simples À primeira vista. Ele deve compilar o programa fonte submetido, carregar o arquivo executável e passar para o programa os dados de entrada. Assim que o programa finalizar, a saída do programa submetido deve ser comparada com a saída esperada, para determinar se o programa submetido resolveu a questão corretamente.
No entanto, há riscos significantes associados à execução de código arbitrário: código malicioso pode danificar os recursos computacionais, roubar informações privativas, monitorar as atividades do usuário ou conseguir acesso para disparar ataques futuros (STONY BROOK UNIVERSITY, 2002). Conforme ressaltado por Stack, Eide e Lepreau (2003), o ambiente de execução deve ser seguro e robusto, não permitindo que um programa malicioso consuma excessivos recursos da máquina. Recursos principais incluem tempo de processador, memória, tempo de disco e utilização da rede.