Je ne parle pas d'un outil de diff. Je cherche vraiment à savoir si un projet contient du code qui pourrait avoir été "refactoré" à partir d'un autre projet. Il serait probable que les noms de fonction, les noms de variables et autres soient modifiés. Les conditions peuvent être inversées, etc.
tools
comparison
Tamara Wijsman
la source
la source
Réponses:
Lorsque j'enseignais le génie logiciel, j'utilisais le service (gratuit) de Stanford appelé MOSS (Measure of Software Similarity). Cela m'a permis de détecter très facilement le plagiat entre les projets des étudiants. Le système m'a également permis d'entrer des exemples de code "connus comme bons" que j'avais utilisés pendant le cours et qui devaient être ignorés.
Le bon côté des résultats obtenus est que nous pouvions savoir quels étudiants travaillaient ensemble. Même s'ils ne copiaient pas le code de façon flagrante, ils discutaient suffisamment des problèmes pour que leur code soit similaire. La partie triste était de trouver l'étudiant étrange avec AUCUNE SIMILARITÉ à un autre code. Ils ne faisaient généralement pas si bien.
la source
Vous pourrez peut-être utiliser l' outil PMD pour trouver ce que vous recherchez. Il est conçu pour détecter les copier-coller dans une base de code, mais si vous incluez la source du projet d'origine suspectée, cela peut vous aider à voir où le code a été copié.
la source
La chose la plus proche que je connaisse de ce que vous recherchez est Clone Detective. C'est un plug-in Visual Studio.
la source
Il semble que vous souhaitiez calculer la différence entre deux arbres de syntaxe abstraite (AST), de sorte que vous pourriez être intéressé par l' outil Smart Differencer .
Trouvé sur https://stackoverflow.com/questions/974855/eclipse-abstract-syntax-tree-diff .
la source
Même si vous ne parlez pas d'un outil de différenciation, vous pouvez toujours en utiliser un pour cela, du moins dans une certaine mesure. Si je vois deux sections de code qui se ressemblent, par exemple, je les colle souvent dans BeyondCompare pour voir le travail que cela représenterait pour le simplifier en remaniant la fonctionnalité commune.
D'un autre côté, si vous ne savez pas où se trouve un code similaire, mais que vous vous demandez s'il en existe un quelque part ... que cherchez-vous? Un outil automatisé pour détecter le plagiat? Je ne suis pas sûr qu'une telle chose existe.
la source
Cet article sur wikipedia sur le sujet inclut également des liens vers plusieurs outils pouvant être utilisés pour trouver du code similaire ou en double. Nous avons un outil interne pour cela, donc je ne suis pas familier avec les outils externes mentionnés dans l'article.
la source
Ce que vous voulez vraiment faire, c'est voir s'il y a du code cloné (copié) dans les deux projets (les deux projets consistant éventuellement en de grands ensembles de fichiers). Vous pouvez le faire en exécutant un outil de détection de clone. Wikipedia en répertorie une variété.
Pour décider grossièrement s'il y a beaucoup de copie, il vous suffit de faire correspondre les lignes source et il existe une variété de détecteurs de clones de ligne source identiques. Je pense que PMD est l'un d'entre eux. Ce qu'ils ne feront pas, c'est de trouver du code copié-collé-édité; ils trouveront un code standard inchangé, copié-collé, probablement enroulé autour du contenu édité copié-copié.
Si vous voulez voir les détails de la copie pour le code copier-coller-éditer, vous avez besoin d'un détecteur de clone qui trouve des clones "paramétrés". Les détecteurs à base de jetons font cela pour les éditions qui ne remplacent que les noms de variables ou les constantes.
Les détecteurs basés sur l’arbre de syntaxe abstraite (AST) effectuent cette opération pour les éditions impliquant des fragments plus volumineux, tels que des expressions, des instructions, des insertions, des suppressions, etc. Ces derniers ont tendance à donner de meilleures réponses car, contrairement aux détecteurs de jetons, ils peuvent utiliser la structure linguistique du code source de l'ordinateur comme guide.
Notre outil CloneDR est un tel détecteur.
Je ne connais pas d'outils qui trouveront un code "équivalent" (conditionnels inversés), etc. Les chercheurs ont construit des détecteurs de clones qui font ce genre de choses, mais la combinatoire rend cette exécution très coûteuse et les prototypes de recherche mal dimensionnés.
la source
J'aime beaucoup la façon dont CCFinderX visualise la similarité, vous devriez donc peut-être aussi vérifier celle-ci. Prend en charge un certain nombre de langues, il est gratuit et assez facile à installer (Python 2.6).
la source