EP13
Decteção de Plágio
Esqueletos e suas comparações
Objetivo:
O objetivo do EP13 é definir e implementar uma forma de representação de programas através de um esqueleto, ou forma canônica, que contenha a sua essência e simplifique a comparação de arquivos.
Descrição:
Assim como no EP12, vamos nos basear em parte nos resultados da 1a oficina de programação. No EP12 começamos com
- leitura de vários arquivos;
- teste de igualdade de dois arquivos;
- teste de igualdade de dois programas em Pyhton após a remoção de comentários;
Agora vamos continuar o nosso caminho na dectecção de casos de plagiarismo ou grau de similaridade. Esse grau de similaridade é o valor que, já no EP12, estava sendo armazenado em uma posição da matriz M
: M[lin][col]
é o grau de similaridade entre o programa representado pela linha lin
e o programa representado pela coluna col
. A remoção de comentários foi um primeiro passo no sentido de obtermos o que vocês chamaram durante a 1a oficina de programação de esqueleto de um programa. A ideia é que o esqueleto de um programa contenha a sua essência para que o detector de similaridade não seja iludido por eventuais disfarces.
O EP13 acrescentará funcionalidades ao seu EP12. O seu EP13 deve:
- [30%] Tratar programas disfarçados através de um número diferente de
brancos
(espaços, tabs, newlines, etc) entre seus elementos.
Como fazer isso?
. Considere que o programa está sem comentários (vide EP12).
. Implemente funções ou métodos para tratar esse caso.
. Marque esses casos de plágio como 3 na correspondente posição da matrizM
.
. Compartilhe as suas dúvidas, ideias ou sugestões no fórum ou no wiki. - [30%] Tratar programas disfarçados por troca de nomes variáveis. Como fazer isso?
. Considere que o programa está sem comentários (vide EP12) e sembrancos
desnecessários (item 0).
. Implemente funções ou métodos para tratar esse caso.
. Marque esses casos de plágio como 4 na correspondente posição da matrizM
.
. Compartilhe as suas ideias ou sugestṍes no fórum ou no wiki. - [30%] Modifique a função
main()
do EP12 para incluir os 2 casos de similaridade acima. - [10%] Documente o seu programa de tal forma que outro programador ou monitor ou professor entenda a sua estratégia de solução de cada caso.
Programadores, monitores e professores sabem Python, assim evite comentários descrevendo o que um comando faz.
Comentários devem dizer o que trechos de código fazem. Veja, por exemplo, as documentações de funções e comentários de MAC0110 e MAC0122. Cada função recebe algo e faz ou retorna alguma coisa.
Passo-a-passo:
- Apresente e discuta suas ideias e de seus colegas na seção de comentários do Wiki do Projeto Final e nas oficinas de programação.
- Copie o arquivo que você entregou como
NUSP_EP12.py
paraNUSP_EP13.py
. - Escreva as funções e métodos auxiliares que desejar para incluir os novos casos de plágio, edite a
main()
e coloque comentários e docstrings. - Teste o seu programa para entradas simples.
- Depois de funcionar para entradas simples, teste o seu programa com entradas mais reais.
- Entregue o seu programa.