11

मैं एक कोडेट की प्रतिलिपि बनाने और बड़े कोड बेस पर विकास के हिस्से के रूप में चिपकाए जाने का पता लगाने के लिए एक स्वचालित तरीका ढूंढ रहा हूं। हम मुख्य रूप से सी ++ में काम कर रहे हैं। इसका लक्ष्य यह है कि इसे स्वचालित रूप से उच्च संभावना और कुछ झूठी सकारात्मकताओं के साथ पहचानें, जैसे कि इसे करने में बदलाव को खारिज कर दिया जा सकता है।बड़े कोड बेस में कॉपी किए गए कोड का पता लगाने के लिए स्वचालित कैसे करें?

डेवलपर्स के लिए कुछ कोड के अज्ञात से डरना आसान है और इसके बजाय इसे अपने उपयोग के लिए कॉपी करना और मास्टर कॉपी पर काम करने के बजाए एक छोटा सा बदलाव करना है जो सभी के लिए काम करता है। मैं ऐसे छोटे कटों को पहचानना और रोकना चाहता हूं जो कोड को बनाए रखने के लिए कठिन बना देंगे।

क्या कोई भी ऐसे मामलों को आजमाने और पहचानने का एक स्वचालित तरीका सुझा सकता है? क्या इस तथ्य के बाद इस क्षेत्र को उन क्षेत्रों को खोजने के लिए लागू किया जा सकता है जो इस स्वचालित समाधान की शुरूआत से पहले ही फिसल चुके हैं।

उत्तर

10

बस PMD पैकेज का उपयोग करें। यह सी ++ और विन्यास सीपीडी (प्रतिलिपि बनाने-चिपकाने-जांच) का समर्थन करता है ...

यह भी एक बहुत अधिक का पता लगाने के लिए सक्षम बनाता है:

  • अप्रयुक्त कोड
  • कोडिंग शैली उल्लंघन
  • विधि/समारोह/नियमित आकार
  • तंग युग्मन

और अधिक (हालांकि डॉक्स का एक बहुत जावा विशिष्ट हैं, इसलिए मैं वास्तव में डब्ल्यू यकीन नहीं है टोपी और सी ++ पर लागू होती है) ...

4

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

1

मैंने ग्रोवी और जावा के लिए सिमियन का उपयोग किया और यह बहुत प्रभावी साबित हुआ। यह एक व्यापक विन्यास और कई भाषाओं का समर्थन किया। http://www.harukizaemon.com/simian/features.html पर एक नज़र डालें। यह गैर वाणिज्यिक उपयोग के लिए नि: शुल्क है, मेरा सुझाव है कि आप मूल्यांकन लाइसेंस का उपयोग करके पता लगाएं।

2

हमारे CloneDR देखें, जो कि विभिन्न प्रकार की भाषाओं में क्लोनों का पता लगाने के लिए डिज़ाइन किया गया है।

CloneDR द्वारा अन्य क्लोन डिटेक्टरों से अनूठा है:

  • (ध्यान नहीं देता भाषा खाली स्थान के और टिप्पणियों एक गाइड के रूप भाषा संरचना/सिंटैक्स का उपयोग -,> लेआउट द्वारा मूर्ख नहीं शुद्ध-पाठ matchers इस तरह के विपरीत पैरामीट्रिक विविधताओं न सिर्फ चर या स्थिर, लेकिन यह भी पूरे बयान या ब्लॉक से मिलकर (विपरीत टोकन शैली के लिए डिटेक्टरों)
  • प्रमाण्य उच्चतम परिशुद्धता ("कुछ झूठी प्रदान करने के साथ राबिन-कार्प शैली डुप्लिकेट डिटेक्टरों के रूप में
  • का पता लगाने के क्लोन पॉजिटिव्स ") एक संख्या के अनुसार रिपोर्टिंग ओ च शोध पत्र की तुलना क्लोन डिटेक्टरों

सी के लिए संस्करण हैं ++ (जावा, सी #, ...), और आप वेबसाइट पर उदाहरण रिपोर्ट देख सकते हैं। आप भी एक मूल्यांकन संस्करण डाउनलोड कर सकते हैं।

मैं लेखक हूं।

1

हमारे SourceMeter उपकरण का उपयोग कर आप दोहराया स्रोत कोड (क्लोन) के बारे में एक पाठ रिपोर्ट मिलता है। यह तथाकथित टाइप -2 क्लोन है, जो संरचना की दृष्टि से बहुत समान हैं का पता लगाता है, लेकिन lexically भिन्न हो सकती है। पता चला क्लोन पूरे वाक्यात्मक इकाइयों (उदा काम करता है, ब्लॉक) हैं, इसलिए वे पुनर्संशोधित किया जा सकता है आसानी से, यह नहीं हो सकता कि एक क्लोन एक समारोह के अंत में शुरू होता है और एक और एक की शुरुआत में समाप्त होता है।

एक और महत्वपूर्ण विशेषता आप देख रहे हैं कि यह समय में विश्लेषण संस्करणों में अलग-अलग दोहराव का ट्रैक रखता है। यही कारण है कि जिस तरह से यह खबर दी है जब एक नया दोहराव बनाई गई है या किसी मौजूदा नष्ट कर दिया या असंगत बदल जाता है।

संबंधित मुद्दे