← नवीनतम पेपर
💻 computer science

Project-wise Comparison of Software Birthmarks Using Weighted Partial Similarity

यह शोध पत्र एक प्रोजेक्ट-वार सॉफ्टवेयर बर्थमार्क तुलना ढांचा प्रस्तावित करता है जो आंशिक कोड पुन: उपयोग का मजबूती से पता लगाने और छोटे मॉड्यूल के कारण होने वाले फॉल्स पॉजिटिव को कम करने के लिए भारित एकत्रीकरण (weighted aggregation) और आंशिक समानता तंत्र का उपयोग करता है, जो विविध ओपन-सोर्स जावा प्रोजेक्ट्स में मौजूदा विधियों की तुलना में बेहतर प्रदर्शन प्रदर्शित करता है।

मूल लेखक: Nikolay Fedorov, Akito Monden, Hiroki Inayoshi, Haruaki Tamada, Masateru Tsunoda

प्रकाशित 2026-06-30
📖 6 मिनट में पढ़ें🧠 गहराई से पढ़ें

मूल लेखक: Nikolay Fedorov, Akito Monden, Hiroki Inayoshi, Haruaki Tamada, Masateru Tsunoda

मूल पेपर CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/) के तहत लाइसेंस किया गया है। नीचे दिए गए पेपर की यह व्याख्या AI से तैयार की गई है। इसे लेखकों ने न तो लिखा है, न इसका समर्थन किया है। तकनीकी सटीकता के लिए मूल पेपर देखें। पूरा डिस्क्लेमर पढ़ें

कल्पना कीजिए कि आप एक जासूस हैं जो सॉफ्टवेयर साहित्यिक चोरी (software plagiarism) के मामले को सुलझाने की कोशिश कर रहे हैं। किसी ने एक ओपन-सोर्स प्रोजेक्ट के कोड के एक हिस्से को लिया है, उसमें थोड़ा बदलाव किया है, और उसे अपना बताकर दावा किया है। आपका काम यह साबित करना है कि उन्होंने चोरी की है।

अतीत में, जासूस (शोधकर्ता) इस समस्या को एक समय में एक फ़ाइल के रूप में देखते थे। वे प्रोजेक्ट X की फ़ाइल A की तुलना प्रोजेक्ट Y की फ़ाइल B से करते थे। यदि वे समान दिखते थे, तो वे उन्हें चिह्नित कर देते थे।

लेकिन वास्तविक दुनिया का सॉफ़्टवेयर एक विशाल पुस्तकालय की तरह है, न कि केवल एक अकेली किताब की। एक प्रोजेक्ट में हजारों फ़ाइलें हो सकती हैं। अक्सर, एक चोर एक किताब के केवल एक या दो अध्याय (मॉड्यूल) चुराता है और उन्हें अपनी विशाल विश्वकोश (encyclopedia) में डाल देता है। यदि आप पूरे विश्वकोश की तुलना मूल से करते हैं, तो चोरी किए गए अध्याय शोर में खो जाते हैं। इसके अलावा, कभी-कभी दो पूरी तरह से अलग पुस्तकालयों में कुछ सामान्य शब्द (जैसे "the" या "and") समान हो सकते हैं, जो जासूस को यह सोचने के लिए भ्रमित कर सकते हैं कि वे एक ही किताब हैं।

यह पेपर सॉफ्टवेयर की तुलना करने का एक नया, स्मार्ट तरीका पेश करता है ताकि इन चोरों को पकड़ा जा सके। उन्होंने इसे कैसे किया, इसे सरल भाषा में यहाँ समझाया गया है:

1. समस्या: "भूसे के ढेर में सुई" और "गलत अलार्म"

लेखकों ने पुराने तरीकों के साथ दो मुख्य सिरदर्द की पहचान की:

  • भूसे के ढेर में सुई (आंशिक पुन: उपयोग - Partial Reuse): यदि एक प्रोजेक्ट में 1,000 फ़ाइलें हैं और केवल 10 चोरी की गई हैं, तो सभी 1,000 फ़ाइलों की औसत समानता देखने से सबूत कमजोर हो जाता है। "चोरी हुआ" संकेत "साफ" फ़ाइलों के बीच दब जाता है।
  • गलत अलार्म (आकस्मिक समानता - Incidental Similarity): छोटी, सामान्य फ़ाइलें (जैसे एक साधारण "Hello World" या एक बुनियादी यूटिलिटी फंक्शन) संयोग से समान हो सकती हैं। यदि आप एक छोटी 5-लाइन वाली फ़ाइल को एक विशाल 5,000-लाइन वाली फ़ाइल के समान ही मानते हैं, तो वह छोटी फ़ाइल एक गलत अलार्म पैदा कर सकती है, जिससे दो निर्दोष प्रोजेक्ट जुड़वा (twins) लग सकते हैं।

2. समाधान: एक दो-चरणीय जासूसी रणनीति

लेखकों ने एक नया फ्रेमवर्क प्रस्तावित किया जो एक स्मार्ट फिल्टर की तरह काम करता है। उन्होंने केवल फ़ाइलों को नहीं देखा; उन्होंने फ़ाइलों के वजन (weight) को देखा और शोर को अनदेखा किया।

चरण A: "वजन का पैमाना" (वेटिंग - Weighting)

कल्पना कीजिए कि आप फलों की दो टोकरियों की तुलना कर रहे हैं। एक टोकरी में एक बड़ा तरबूज है, और दूसरी में एक छोटा अंगूर।

  • पुराना तरीका: अंगूर और तरबूज दोनों को "1 फल" के रूप में गिनता है।
  • नया तरीका: महसूस करता है कि तरबूज बहुत अधिक महत्वपूर्ण है। यह तरबूज को भारी "वजन" देता है और अंगूर को हल्का "वजन" देता है।

उनके सॉफ़्टवेयर में, उन्होंने बड़े कोड मॉड्यूल को अधिक महत्व (higher importance) दिया। यदि एक छोटी फ़ाइल दूसरी छोटी फ़ाइल के समान दिखती है, तो सिस्टम कहता है, "वह शायद सिर्फ एक संयोग है; इसे अनदेखा करें।" लेकिन यदि एक बड़ी, जटिल फ़ाइल समान दिखती है, तो सिस्टम उस पर ध्यान देता है। यह छोटी, सामान्य फ़ाइलों के कारण होने वाले "गलत अलार्म" को रोकता है।

चरण B: "टॉप 1%" का नियम (आंशिक समानता - Partial Similarity)

कल्पना कीजिए कि आप 1,000 गानों की प्लेलिस्ट में एक विशिष्ट गाना ढूंढ रहे हैं। आप अपने लक्ष्य से सबसे अधिक मेल खाने वाले शीर्ष कुछ गानों को सुनने के लिए पूरी प्लेलिस्ट नहीं सुनना चाहते।

  • पुराना तरीका: दो प्रोजेक्ट्स के बीच प्रत्येक फ़ाइल जोड़ी की समानता का औसत निकालता है।
  • नया तरीका: कहता है, "आइए हम केवल सबसे समान फ़ाइल जोड़ियों के शीर्ष 1% से 5% को देखें।"

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

3. प्रयोग: नए जासूस का परीक्षण

यह साबित करने के लिए कि यह काम करता है, शोधकर्ताओं ने एक टेस्ट लैब बनाई:

  • परीक्षण विषय (Test Subjects): उन्होंने GitHub से 35 वास्तविक दुनिया के जावा (Java) प्रोजेक्ट्स (जैसे मीडिया प्लेयर, टेक्स्ट एडिटर और टेस्टिंग टूल्स) को इकट्ठा किया।
  • सेटअप: उन्होंने एक ही प्रोजेक्ट के विभिन्न संस्करणों को "चोरी" के मामलों के रूप में माना (क्योंकि नए संस्करण बदलावों के साथ पुराने संस्करण ही होते हैं)। उन्होंने एक ही श्रेणी के विभिन्न प्रोजेक्ट्स (जैसे दो अलग-अलग मीडिया प्लेयर) को "निर्दोष" मामलों के रूप में माना।
  • मेट्रिक (Metric): उन्होंने दो चीजें मापीं:
    1. लचीलापन (Resilience): क्या यह अभी भी "चोरी किए गए" कोड को ढूंढ सकता है भले ही चोर ने उसमें बदलाव किया हो?
    2. विश्वसनीयता (Credibility): क्या यह सही ढंग से कह सकता है कि "नहीं, ये दोनों अलग हैं" जब वे वास्तव में अलग हों?

4. परिणाम: नया तरीका जीतता है

परिणाम स्पष्ट थे:

  • नया तरीका (वेटिंग + टॉप 1% फोकस) सभी मौजूदा तरीकों की तुलना में काफी बेहतर था।
  • यह बहुत स्थिर (consistent results) था और शायद ही कभी गलतियाँ करता था।
  • दिलचस्प बात यह है कि उन्होंने पाया कि सममिति (Symmetry) मायने रखती है। यदि आप प्रोजेक्ट A की तुलना प्रोजेक्ट B से करते हैं, तो स्कोर वही होना चाहिए जो B की तुलना A से करने पर होता है। उनके नए तरीके ने यह संतुलन सुनिश्चित किया, जिसमें पुराने तरीके विफल रहे थे।
  • उन्होंने यह भी पाया कि एडिट डिस्टेंस (Edit Distance) (यह मापने का एक तरीका कि एक स्ट्रिंग को दूसरी में बदलने के लिए कितने बदलाव करने पड़ते हैं) वास्तविक कोड स्निपेट्स की तुलना करने के लिए सबसे अच्छा उपकरण था।

निष्कर्ष (The Bottom Line)

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

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

अपने क्षेत्र के पेपरों की भीड़ में उलझे हुए हैं?

आपके रिसर्च कीवर्ड से मेल खाने वाले सबसे नए और अलग सोच वाले पेपरों का रोज़ाना Digest पाएँ—तकनीकी सारांश के साथ, आपकी भाषा में।

Digest आज़माएँ →