क्या कोड समानता निर्धारित करने के लिए उपकरण हैं? [बन्द है]


37

मैं एक अलग उपकरण के बारे में बात नहीं कर रहा हूँ। मैं वास्तव में यह देखने के लिए देख रहा हूं कि क्या किसी प्रोजेक्ट में कोड है जो किसी अन्य प्रोजेक्ट से "रिफैक्टर्ड" हो सकता है। यह संभावना होगी कि फ़ंक्शन नाम, चर नाम और व्हाट्सएप को बदल दिया जाएगा। हालत उलट हो सकती है, आदि।


5
यह एक वर्ग के लिए है या कुछ और है?
TheLQ

1
@ TheLQ - मैं क्लास रूम की सेटिंग के बाहर एक से अधिक मामलों के बारे में सोच सकता हूं, जहां मैं यह देखने के लिए शिकार करने गया हूं कि "कट और पेस्ट का पुन: उपयोग, सही है?" ब्रिगेड गुजर चुकी है।
मिया

स्टीव स्मिथ के Atomiq के बारे में मत भूलना ।
जिम जी।

टिप्पणियां और आउटपुट संदेश (जैसे त्रुटियों आदि) अक्सर वास्तविक कोड की तुलना में बेहतर फिंगरप्रिंट कोड हो सकते हैं।
बोर्क ब्लाट

उन्होंने यूनी पर हमें हमेशा इसके लिए धमकी दी, यह देखना दिलचस्प होगा कि क्या वास्तव में ऐसा उपकरण मौजूद था।
जेक

जवाबों:


10

जब मैं सॉफ्टवेयर इंजीनियरिंग सिखा रहा था, मैंने MOSS (सॉफ्टवेयर समानता का माप) नामक स्टैनफोर्ड में (मुफ्त) सेवा का उपयोग किया इसने मुझे छात्र परियोजनाओं के बीच साहित्यिक चोरी का पता लगाने की बहुत आसानी से अनुमति दी। सिस्टम ने मुझे "ज्ञात अच्छे" कोड उदाहरणों को दर्ज करने की अनुमति दी जो मैंने कक्षा के दौरान उपयोग किए थे जिन्हें अनदेखा किया जाना था।

वापस आए परिणामों के बारे में बड़ी बात (पूरी तरह से एक पक्ष का मुद्दा) यह थी कि हम बता सकते हैं कि किन छात्रों ने एक साथ काम किया --- भले ही वे कोड की नकल नहीं करते थे, उन्होंने समस्याओं पर पर्याप्त चर्चा की कि उनका कोड समान था। उदास भाग किसी भी अन्य कोड के लिए कोई योग्यता के साथ विषम छात्र मिल रहा था। वे आमतौर पर इतना अच्छा नहीं करते थे।


धन्यवाद, मुझे कुछ ऐसा ही लग रहा था :)
उलरिच डेंगल

8

आप पीएमडी उपकरण का उपयोग करने में सक्षम हो सकते हैं जो आप ढूंढ रहे हैं। यह एक कोड आधार के भीतर कटौती और पेस्ट का पता लगाने के लिए है, लेकिन यदि आप संदिग्ध मूल परियोजना स्रोत को शामिल करते हैं तो यह आपको यह देखने में मदद कर सकता है कि कोड को कहां से कॉपी किया गया था।


हां - हम अपने कोड में पीएमडी से CPD का उपयोग करते हैं
जोस सेप

लेकिन पीएमडी केवल जावा के लिए है, है ना?
Janusz Lenar

5

निकटतम चीज़ जो मुझे पता है कि आप जो खोज रहे हैं वह क्लोन डिटेक्टिव है। यह एक विजुअल स्टूडियो प्लग-इन है।

क्लोन डिटेक्टिव एक विजुअल स्टूडियो इंटीग्रेशन है जो आपको सोर्स कोड के लिए C # प्रोजेक्ट्स का विश्लेषण करने की अनुमति देता है जो कहीं और नकल किया जाता है। डुप्लिकेट होने से आसानी से विसंगतियां हो सकती हैं और अक्सर खराब तथ्यात्मक कोड के लिए एक संकेतक है।


4

ऐसा लगता है कि आप दो अमूर्त वाक्यविन्यास पेड़ों (एएसटी) के बीच अंतर की गणना करना चाहते हैं, इसलिए आपको स्मार्ट डिफरेंशियल टूल में रुचि हो सकती है ।

Https://stackoverflow.com/questions/974855/eclipse-abstract-syntax-tree-diff पर मिला ।


(मेरे टूल की तारीफ के लिए धन्यवाद)। SmartDifferencer फ़ाइलों की एक विशिष्ट जोड़ी के बीच अंतर पाता है; समानता अंतर का पूरक है इसलिए मैं सहमत हूं कि यह सही विचार की तरह है लेकिन इसे देने के लिए आपको फ़ाइलों की एक जोड़ी की पहचान करने की आवश्यकता है, और यह दर्दनाक है अगर आपके सिस्टम में कई फाइलें शामिल हैं। क्या वास्तव में जरूरत है कि पूरक: समानता को ढूंढें, और इसे व्यक्तिगत रूप से फाइलों की जोड़ी की पहचान के बिना करें। इस तरह के एक उपकरण के लिए एक ही धागे में मेरा क्लोनड्रो जवाब देखें। हाँ, यह संबंधित प्रौद्योगिकी का उपयोग करता है।
इरा बैक्सटर

1

यहां तक ​​कि अगर आप एक अलग उपकरण के बारे में बात नहीं कर रहे हैं, तो भी आप कम से कम एक निश्चित सीमा तक, इसके लिए एक का उपयोग कर सकते हैं। अगर मुझे कोड के दो खंड मिलते हैं जो समान दिखते हैं, उदाहरण के लिए, मैं अक्सर दोनों को BeyondCompare में पेस्ट करता हूं यह देखने के लिए कि यह सामान्य कार्यक्षमता को बाहर निकालकर इसे सरल बनाने के लिए कितना काम करेगा।

दूसरी ओर, यदि आप नहीं जानते कि समान कोड कहां है, लेकिन आप सोच रहे हैं कि यदि कोई कहीं मौजूद है ... तो आप क्या ढूंढ रहे हैं? साहित्यिक चोरी का पता लगाने के लिए एक स्वचालित उपकरण? मुझे यकीन नहीं है कि ऐसी कोई चीज मौजूद है।


यदि ऐसा होता है, तो SCO IBM :-)

1

विषय पर विकिपीडिया के इस लेख में कई उपकरणों के लिंक भी शामिल हैं जिनका उपयोग समान या डुप्लिकेट कोड खोजने के लिए किया जा सकता है। हमारे पास इसके लिए एक आंतरिक उपकरण है, इसलिए मैं लेख में वर्णित बाहरी उपकरणों से परिचित नहीं हूं।


1

यदि आप वास्तव में करना चाहते हैं, तो यह देखें कि क्या दो प्रोजेक्ट्स में कोड क्लोन (कॉपी किया हुआ) है (दोनों प्रोजेक्ट्स जिसमें संभवतः फाइलों के बड़े सेट शामिल हैं)। आप क्लोन डिटेक्शन टूल चलाकर ऐसा कर सकते हैं। विकिपीडिया उनमें से कई को सूचीबद्ध करता है।

स्थूल रूप से तय करने के लिए कि बहुत अधिक नकल है, आपको केवल स्रोत लाइनों से मेल खाना चाहिए, और वहाँ से बाहर सटीक स्रोत-लाइन क्लोन डिटेक्टर की एक किस्म है। मेरा मानना ​​है कि पीएमडी उनमें से एक है। ये क्या नहीं करेंगे कोड कोड पेस्ट-संपादित है; वे बॉयलर-कॉपी-पेस्ट-अपरिवर्तित कोड को कॉपी-पास्ट-एडेड सामान के चारों ओर लिपटे हुए पाएंगे।

यदि आप कॉपी-पास्ट-एडिट कोड के लिए कॉपी का विवरण देखना चाहते हैं, तो आपको एक क्लोन डिटेक्टर की आवश्यकता होती है जो "पैरामीटर" वाले क्लोन को ढूंढता है। टोकन आधारित डिटेक्टर संपादन के लिए ऐसा करते हैं जो केवल चर नामों या स्थिरांक को प्रतिस्थापित करते हैं।

एब्सट्रैक्ट-सिंटैक्स ट्री (एएसटी) आधारित डिटेक्टर बड़े चंक्स से जुड़े एडिट के लिए करते हैं, जैसे एक्सप्रेशन, स्टेटमेंट, इंसर्शन, डिलीट, एट। ये उत्तरार्द्ध बेहतर उत्तर देते हैं, क्योंकि टोकन डिटेक्टरों के विपरीत, वे एक गाइड के रूप में कंप्यूटर स्रोत कोड की भाषा संरचना का उपयोग कर सकते हैं।

हमारा क्लोन टूल एक ऐसा डिटेक्टर है।

मुझे ऐसे उपकरणों का पता नहीं है जो वास्तव में "समतुल्य" कोड (उलटे सशर्त) आदि पाएंगे। शोधकर्ताओं ने क्लोन डिटेक्टर बनाए हैं जो ऐसा कुछ करते हैं, लेकिन कॉम्बिनेटरिक्स इसे निष्पादित करने के लिए बहुत महंगा बनाते हैं, और अनुसंधान प्रोटोटाइप खराब तरीके से स्केल करते हैं।


1

मुझे वास्तव में पसंद है कि कैसे CCFinderX समानता की कल्पना करता है, इसलिए आप उस एक को भी जांचना चाहते हैं। काफी कुछ भाषाओं का समर्थन करता है, यह मुफ़्त है और सेटअप के लिए काफी आसान है (पायथन 2.6)।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.