2009-04-02 14 views
19

क्या किसी के पास कुछ टूल है या कुछ अनुशंसित अभ्यास है कि कोड का एक टुकड़ा कैसे ढूंढें जो किसी अन्य कोड के समान है?समान कोड खंड कैसे प्राप्त करें?

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

समान कोड टुकड़े होने के कारण अनावश्यक कोड डुप्लिकेशंस होता है, हालांकि एक बड़े कोड बेस के साथ सभी कोड स्मृति में रखना असंभव है। क्या कोई उपकरण है जो कोड के कुछ विश्लेषण और कार्यक्षमता के मामले में "समान" चिह्नित टुकड़े या कार्यों को चिह्नित करेगा?

निम्नलिखित पर विचार करें उदाहरण:

float xDistance = 0, zDistance = 0; 
    if (camPos.X()<xgMin) xDistance = xgMin-camPos.X(); 
    if (camPos.X()>xgMax) xDistance = camPos.X()-xgMax; 
    if (camPos.Z()<zgMin) zDistance = zgMin-camPos.Z(); 
    if (camPos.Z()>zgMax) zDistance = camPos.Z()-zgMax; 
    float dist = sqrt(xDistance*xDistance+zDistance*zDistance); 

और

float distX = 0, distZ = 0; 
    if (cPos.X()<xgMin) distX = xgMin-cPos.X(); 
    if (cPos.X()>xgMax) distX = cPos.X()-xgMax; 
    if (cPos.Z()<zgMin) distZ = zgMin-cPos.Z(); 
    if (cPos.Z()>zgMax) distZ = cPos.Z()-zgMax; 
    float dist = sqrt(distX*distX +distZ*distZ); 

मुझे ऐसा लगता है यह पहले से ही कहा गया है और जवाब कई बार:

https://stackoverflow.com/questions/204177/what-tool-to-find-code-duplicates-in-c-projects

How to detect code duplication during development?

मैं यहां डुप्लिकेट के रूप में बंद करने का सुझाव देता हूं।


वास्तव में मुझे लगता है कि यह एक अधिक सामान्य खोज समस्या है, जैसे: मैं कैसे खोज करते हैं, तो सवाल पहले से ही StackOverflow पर कहा गया था?

+0

संबंधित प्रश्न - http://stackoverflow.com/questions/2490884/why-is-copy-and-paste-of-code- खतरनाक – Oded

+0

संभावित डुप्लिकेट [विकास के दौरान कोड डुप्लिकेशन का पता लगाने के लिए कैसे?] (Http: //stackoverflow.com/questions/191614/how-to-detect-code-duplication-during-development) – Suma

उत्तर

10

आप Simian का उपयोग कर सकते हैं। यह एक ऐसा उपकरण है जो जावा, सी #, सी ++, एक्सएमएल, और कई और (यहां तक ​​कि सादे txt फ़ाइलों) में डुप्लिकेट कोड का पता लगाता है। यह क्रूज़ कंट्रोल जैसे टूल में अच्छी तरह से एकीकृत करता है।

3

हमारे CloneDR लैंगेज सिंटैक्स द्वारा पैरामीटर द्वारा बड़े स्रोत सिस्टम में, सटीक प्रतियां और पास-मिस दोनों डुप्लिकेट कोड पाता है। यह जावा, सी #, कोबोल, सी ++, PHP, पायथन और कई अन्य भाषाओं का समर्थन करता है।

यह अनेक पैरामीटर परिभाषित करने के लिए सहित स्वीकार करता है, "क्या एक क्लोन है?": क) Similarilty सीमा को नियंत्रित करने के लिए कैसे कोड के समान दो ब्लॉकों क्लोन के रूप में घोषित करने का होना चाहिए (आमतौर पर 95% अच्छा है) बी) लाइनों की संख्या न्यूनतम क्लोन आकार (3 अच्छी पसंद है) सी) पैरामीटर की संख्या (पाठ में अलग-अलग परिवर्तन; 5 अच्छी पसंद होने लगता है) इन सेटिंग्स के साथ, यह 10- वस्तुतः में 15% अनावश्यक कोड जो यह संसाधित करता है।

लाइन-ओरिएंटेड क्लोन डिटेक्शन टूल्स जैसे सिमियन को क्लोन कोड नहीं मिला है जो को दोबारा सुधारित किया गया है, लेकिन क्लोनरड होगा। वे बता सकते हैं कि कोड मिलान के दो ब्लॉक, लेकिन वे आमतौर पर आपको बिल्कुल नहीं दिखाते हैं कि वे कैसे मेल खाते हैं या अंतर कहां हैं; क्लोनडीआर होगा। वे क्लोन कोड को सारणीबद्ध करने का सुझाव नहीं देते हैं; क्लोनडीआर होगा।

कमजोर मिलान एल्गोरिदम होने के कारण, वे अधिक झूठी सकारात्मक उत्पन्न करते हैं; जब आपको 5000 क्लोन मिलते हैं तो 0 मिलियन लाइनों में की सूचना दी जाती है, तो झूठी सकारात्मक संख्याओं की संख्या बहुत मायने रखती है।

आपके उदाहरण के आधार पर, मुझे उम्मीद है कि यह उन दो टुकड़े (आपके पास कोई भी बिंदु नहीं है) और यह ध्यान दें कि समान हैं यदि आप परिवर्तनीय नामों को दूर करते हैं।

0

ऐसा होता है कि मेरा थीसिस कोड के समान टुकड़ों का पता लगाने के बारे में था।

यहां मुझे सबसे अच्छा पृष्ठ मिला है। साहित्य, उपकरण, लिंक के बहुत सारे:

http://students.cis.uab.edu/tairasr/clones/literature/

सामान्य में वहाँ कई कार्यक्रम हैं, लेकिन उनमें से कोई सबसे अच्छा या सबसे लोकप्रिय हो रहा है। आपको यह परिभाषित करना होगा कि आपके लिए सबसे महत्वपूर्ण क्या है और उपलब्ध टूल के माध्यम से खोजें ... या कुछ कागजात पढ़ें और अपना खुद का टूल लिखें, जो आपके लिए सबसे उपयुक्त है। यदि आप एक अच्छा क्लोन डिटेक्टर लिखते हैं, तो आप इसे ग्रहण प्लगइन के रूप में बंद कर सकते हैं और यह कई लोगों के लिए उपयोगी होगा। प्लगइन में से कोई भी हाल ही में एक हावी स्थिति नहीं है, तो आप एक हो सकते हैं।

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