EP14
Decteção de Plágio
Calculando a similaridade entre programas
Objetivo:
O objetivo do EP14 é definir e implementar uma forma de calcular a distância ou similaridade entre programas a partir da forma(s) canônica(s) desenvolvida(s) no EP13.
Descrição:
Assim como nos EPs 12 e 13, vamos nos basear em parte nos resultados das oficinas de programação realizadas em sala e discussões online.
Nos EPs 12 e 13 começamos com
- leitura de vários arquivos;
- teste de igualdade de dois arquivos;
- teste de igualdade de dois programas em Python após a remoção de comentários;
- teste de igualdade de dois programas em Python após a remoção de "brancos desnecessários";
- teste de igualdade de dois programas em Python após a remoção de "maquiagem de variáveis";
Observe que todos esses casos procuram por igualdade
entre duas formas canônicas. Essa igualdade é facilmente perdida para pequenas alterações no código, como por exemplo inclusão de instruções desnecessárias, alteração na ordem de declaração das funções e classes, e plágio de porções de código.
Agora vamos continuar o nosso caminho no sentido de detectar um grau similaridade (plagiarismo) que não seja igualdade
. (um grau mais sofisticado de plágio).
Esse grau de similaridade deve ser representado por um real entre 0 e 1.0, onde 1.0 significa que a similaridade entre os programas é de 100%. Para manter a saída compatível com os EPs 12 e 13, vamos considerar que qualquer valor maior que 1.0 na matriz de saída M
corresponde a 100% (por ter 100% de similaridade - igualdade - entre formas canônicas).
O EP14 acrescentará funcionalidades ao seu EP13. O seu EP14 deve:
- [60%] Associar a cada par de programas um número real entre 0 e 1.0 que indique o grau de similaridade entre os programas.
Como fazer isso?
Considere que os programas já estão em suas formas canônicas (vide EP13).
Implemente funções ou métodos para tratar esse caso.
Marque a similaridade na posição correspondente da matrizM
.
Compartilhe as suas dúvidas, ideias ou sugestões no fórum ou no wiki. - [30%] Modifique a função
main()
do EP13 para incluir o cálculo 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.
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_EP13.py
paraNUSP_EP14.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.