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.pyparaNUSP_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.