Question

J'ai quelques devoirs simples en C ++ et je sais que les élèves ont partagé du code.Ce sont des étudiants intelligents et ils savent comment tromper la mousse.Je recherche un outil capable de renommer les variables en fonction de leurs types (la première variable de type int sera int1, le premier tableau int sera intptr1 ...), ou fait quelque chose de similaire auquel je ne peux pas penser maintenant.Connaissez-vous un moyen rapide de le faire?

modifier: je suis obligé d'utiliser de la mousse et de signaler une correspondance à 90%

Merci

Était-ce utile?

La solution

Oui, l'outil que vous recherchez s'appelle un compilateur. :)

Sérieusement, si les programmes soumis sont exactement les mêmes à l'exception des noms d'identifiant, la compilation ( sans informations de débogage) devrait aboutir exactement à la même sortie.

Si vous faites cela avec le débogage activé, le compilateur peut laisser des méta-données dans l'exécutable qui sont différentes pour chaque exécutable, d'où le commentaire pour s'assurer qu'il est désactivé. C'est aussi pourquoi cela ne fonctionnera pas pour les programmes Java - ce type d'informations est présent que ce soit en mode débogage ou non (à des fins d'introspection dynamique).

MODIFIER: Je vois, d'après les commentaires ajoutés à la question, que vous observez certaines soumissions qui ne sont pas simplement des noms d'identifiants. Si les programmes sont toujours structurellement équivalents, cela devrait toujours fonctionner.

MODIFIER: étant donné que l'utilisation de mousse est une exigence, ce n'est probablement pas la voie à suivre. Il me semble cependant que moss a un support pour comparer l'assemblage - peut-être que compiler vers l'assembleur et soumettre cela à moss est une option (en fonction du compilateur que vous utilisez).

Autres conseils

Vous pouvez télécharger et essayer notre C CloneDR détecteur de code en double.Il trouve le code dupliqué même lorsque les noms de variables ont été modifiés.Plusieurs changements dans le même bloc sont traités comme un seul;s'ils renomment les variables de manière cohérente partout, vous obtiendrez un rapport de "un clone" avec la substitution de variable précise.

Vous pouvez essayer Copy Paste Detector avec ignoreIdentifiers activé.Vous pouvez au moins l'utiliser pour un premier passage avant de vous lancer dans la normalisation des noms de mousse.Ou, puisque la source est disponible, vous pouvez peut-être lui faire cracher sa normalisation interne du code.

Une autre façon de procéder serait de compiler les applications et de comparer leurs binaires, de sorte que votre examen ne se limite pas au changement de nom de variable / fonction.

Un éditeur HEX peut vous aider.Je viens d'essayer ExamDiff (pas gratuit $) et j'ai été satisfait du résultat.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top