Não estou falando de uma ferramenta diff. Estou realmente procurando ver se um projeto contém código que pode ter sido "refatorado" de outro projeto. Seria provável que nomes de funções, nomes de variáveis e outros enfeites fossem alterados. Os condicionais podem ser revertidos, etc.
tools
comparison
Tamara Wijsman
fonte
fonte
Respostas:
Quando eu estava ensinando engenharia de software, usei o serviço (gratuito) em Stanford chamado MOSS (Medida de similaridade de software). Isso me permitiu detectar plágio entre projetos de alunos com muita facilidade. O sistema também me permitiu inserir exemplos de código "conhecidos" que eu havia usado durante a aula que deveriam ser ignorados.
A grande coisa (completamente uma questão paralela) sobre os resultados retornados foi que poderíamos dizer quais alunos trabalharam juntos - mesmo que não tenham copiado descaradamente o código, eles discutiram os problemas o suficiente para que o código fosse semelhante. A parte triste foi encontrar o aluno estranho sem similaridade com qualquer outro código. Eles geralmente não se saíram tão bem.
fonte
Você pode usar a ferramenta PMD para encontrar o que está procurando. Destina-se a detectar recortar e colar em uma base de código, mas se você incluir a fonte do projeto de origem suspeita, ela poderá ajudá-lo a ver onde o código foi copiado.
fonte
A coisa mais próxima que eu sei do que você está procurando é o Clone Detective. É um plug-in do Visual Studio.
fonte
Parece que você deseja calcular a diferença entre duas árvores de sintaxe abstrata (AST), para que possa estar interessado na ferramenta Smart Differencer .
Encontrado em https://stackoverflow.com/questions/974855/eclipse-abstract-syntax-tree-diff .
fonte
Mesmo que você não esteja falando sobre uma ferramenta diff, você ainda pode usar uma para isso, pelo menos em certa medida. Se eu vir duas seções de código parecidas, por exemplo, colo ambas frequentemente no BeyondCompare para ver quanto trabalho seria simplificá-lo, refatorando a funcionalidade comum.
Por outro lado, se você não sabe onde está o código semelhante, mas está se perguntando se existe algum lugar ... o que está procurando? Uma ferramenta automatizada para detectar plágio? Não tenho certeza de que algo assim exista.
fonte
Este artigo na wikipedia sobre o assunto também inclui links para várias ferramentas que podem ser usadas para encontrar código semelhante ou duplicado. Temos uma ferramenta interna para isso, por isso não estou familiarizado com as ferramentas externas mencionadas no artigo.
fonte
O que você realmente deseja fazer é ver se há um código clonado (copiado) nos dois projetos (ambos os projetos consistindo em conjuntos de arquivos possivelmente grandes). Você pode fazer isso executando uma ferramenta de detecção de clones. A Wikipedia lista uma variedade deles.
Para decidir grosseiramente se há muitas cópias, você só precisa corresponder às linhas de origem e há uma variedade exata de detectores de clones de linha de origem por aí. Eu acredito que o PMD é um deles. O que isso não fará é encontrar o código que é copiado, colado e editado; eles encontrarão o código copiado e colado inalterado provavelmente contido no material copiado e editado.
Se você quiser ver os detalhes da cópia do código de copiar e editar, precisará de um detector de clone que encontre clones "parametrizados". Os detectores baseados em token fazem isso para edições que substituem apenas nomes ou constantes de variáveis.
Os detectores baseados em árvore de sintaxe abstrata (AST) fazem isso para edições que envolvem blocos maiores, como expressões, instruções, inserções, exclusões, etc. Esses últimos tendem a dar melhores respostas, porque, diferentemente dos detectores de token, eles podem usar a estrutura de linguagem do código-fonte do computador como um guia.
Nossa ferramenta CloneDR é um detector.
Não conheço ferramentas que realmente encontrem código "equivalente" (condicionais invertidos) etc. Os pesquisadores criaram detectores de clone que fazem algo parecido com isto, mas a combinatória torna isso muito caro para executar e os protótipos da pesquisa foram mal dimensionados.
fonte
Eu realmente gosto de como o CCFinderX visualiza a similaridade, então você também pode verificar essa. Suporta várias linguagens, é gratuito e é fácil de configurar (Python 2.6).
fonte