2012-06-06 23 views
14

मैं ऐसे उपकरण की तलाश कर रहा हूं जो समानता के लिए स्रोत कोड की तुलना कर सके।इसी तरह के कोड डिटेक्टर

हमारे पास अभी एक बहुत ही छोटी प्रणाली है जिसमें बड़ी मात्रा में झूठी सकारात्मक चीजें हैं और वास्तविक सकारात्मक आसानी से उन्हें दफन कर सकते हैं।

मेरे आवश्यकताएँ हैं:

  • झूठे सकारात्मक का यथोचित छोटी राशि
  • अच्छा पता लगाने की दर (हाँ इन एक दूसरे के खिलाफ जा रहे हैं)
  • बस एक ही मूल्य की तुलना में एक अधिक जटिल उत्पादन के साथ आदर्श
  • सी (C99) और सी के लिए प्रयोग करने योग्य ++ (सी ++ 03 और बेहतर सी ++ 11)
  • अभी भी
  • सह के लिए प्रयोग करने योग्य बनाए रखा गैर-सहभागी मोड में एक दूसरे को
  • प्रयोग करने योग्य के खिलाफ दो स्रोत फ़ाइलें mparing

संपादित करें:

भ्रम से बचने के लिए, निम्न दो कोड स्निपेट समान हैं और इस तरह के रूप में पता लगाया जाना चाहिए:

for (int i = 0; i < 10; i++) { bla; }

int i; while (i < 10) { bla; i++; }

यहाँ एक ही:

int x = 10; y = x + 5;

int a = 10; y = a + 5;

+1

क्या आपकी कुछ ज़रूरतों को पूरा करता है? –

+1

@ हाइपरफॉर्मेंसमार्क लॉल, नहीं, ऐसा नहीं है। –

+2

ऐसा लगता है कि आप एक उपकरण चाहते हैं जो सिंटैक्टिक की बजाय 2 कोड की अर्थपूर्ण समानता की तुलना करता है। मुझे संदेह है कि यह एक अनसुलझा समस्या है और एसओ आपके लिए एक संतोषजनक समाधान खोजने के लिए संघर्ष करेगा। मुझे लगता है कि, जैसा लिखा है, आपका मूल प्रश्न बहुत सारे पाठकों को गुमराह करेगा जैसे कि उसने मुझे गुमराह किया था। मुझे यह भी लगता है कि आपको यह स्पष्ट रूप से यह बताने के लिए पूरी तरह से लिखना चाहिए कि आप किस प्रकार की तुलना में रुचि रखते हैं। –

उत्तर

15

मैंने पहले भी MOSS का उपयोग किया है है आप क्या कहा है। चूंकि यह एक अर्थपूर्ण स्तर पर काम करता है, यह आपके ऊपर प्रस्तुत स्थितियों का पता लगाएगा। उपकरण भाषा-जागरूक है, इसलिए विश्लेषण में टिप्पणियों पर विचार नहीं किया जाता है, और यह कोड का पता लगाने में एक लंबा रास्ता तय करता है जिसे सरल खोज और/या फ़ंक्शन नामों की सरल खोज के माध्यम से संशोधित किया गया है।

नोट: मैंने कुछ साल पहले टूल का उपयोग किया था जब मैंने ग्रेड स्कूल में कंप्यूटर विज्ञान पढ़ाया था, और यह इंटरनेट से जुड़ा हुआ कोड का पता लगाने में अद्भुत काम करता था। http://fie2012.org/sites/fie2012.org/history/fie99/papers/1110.pdf

आप गूगल हैं "उपाय सॉफ्टवेयर समानता", आप कुछ और अधिक उपयोगी हिट खोजना चाहिए: http://www.ics.heacademy.ac.uk/resources/assessment/plagiarism/detectiontools_sourcecode.html

+0

ऐसा लगता है कि fie1012.org का लिंक अब मान्य नहीं है। क्या आप एक वैकल्पिक लिंक प्रदान कर सकते हैं? – Eric

+1

इसे आजमाएं: http://www3.nd.edu/~kwb/nsf-ufe/1110.pdf – Throwback1986

3

PMD से कॉपी-पेस्ट-डिटेक्टर हो सकता है?

6

कंप्यूटर साइंस शब्दावली में आपकी समस्या शायद स्रोत कोड चोरी चोरी के रूप में कहा जा सकता है। डॉ। डॉब्स पर इस लेख को पढ़ने के लिए एक अच्छी शुरुआत होगी: Detecting Source-Code Plagiarism। यह स्रोत कोड में चोरी चोरी का पता लगाने के लिए एल्गोरिदम सूचीबद्ध करता है।

नोट: http://theory.stanford.edu/~aiken/moss/ साहित्यिक चोरी वाला कोड का पता लगाने के: के लिए वास्तव में एक कठिन कंप्यूटिंग समस्या :)

1

आप duplo की कोशिश कर सकते यहाँ समान आवेदन की एक अच्छी तरह से प्रलेखित खाता है। यह सामान्य लाइनें मिल जाएगी। इसमें व्हाइटस्पेस परिवर्तनों को अनदेखा करने की कुछ क्षमता है, लेकिन नामित चर के साथ कोड का पता नहीं लगाता है, इसलिए साहित्य चोरी का पता लगाने में सहायता से यह एक सफाई-सहायता है।

1

मैं कोड समानता की जांच करने और जावा और टेक्स्ट फ़ाइलों में छात्रों की तुलना करने के लिए जेपीएलजी (https://github.com/jplag/jplag) का उपयोग करना शुरू करता हूं। यह कोड कोड संरचना और परिवर्तनीय प्रतिस्थापन की जांच करने के लिए अच्छी तरह से काम करता है।