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

CrossLangFuzzer: Differential Testing of Cross-Language JVM Compilers

यह शोध पत्र CrossLangFuzzer को प्रस्तुत करता है, जो पहला डिफरेंशियल टेस्टिंग फ्रेमवर्क है जो क्रॉस-लैंग्वेज टेस्ट प्रोग्रामों को संश्लेषित करने के लिए कोटलिन कंपाइलर के यूनिफाइड इंटरमीडिएट रिप्रेजेंटेशन और म्यूटेशन ऑपरेटर्स का लाभ उठाता है, जिसने पांच प्रमुख JVM कंपाइलरों में 32 पुष्ट बग्स को सफलतापूर्वक उजागर किया है।

मूल लेखक: Xiaotian Ma, Qiong Feng, Yongqiang Tian, Wei Song, Peng Liang

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

मूल लेखक: Xiaotian Ma, Qiong Feng, Yongqiang Tian, Wei Song, Peng Liang

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

कल्पना कीजिए कि जावा वर्चुअल मशीन (JVM) एक विशाल, हलचल भरा अंतरराष्ट्रीय हवाई अड्डा है। इस हवाई अड्डे में, विभिन्न एयरलाइंस (प्रोग्रामिंग भाषाएं जैसे Java, Kotlin, Scala और Groovy) सभी एक ही रनवे का उपयोग करती हैं और एक ही कंट्रोल टावर का उपयोग करती हैं। आमतौर पर, वे आपस में ठीक से तालमेल बिठा लेती हैं। लेकिन कभी-कभी, एक देश की एयरलाइन दूसरे देश की एयरलाइन को यात्री सौंपने की कोशिश करती है और वह हैंडऑफ (handoff) गलत हो जाता है क्योंकि उनके "बोर्डिंग पास" (types) या "सामान की सीमा" (nullability) के नियम थोड़े अलग होते हैं।

जब ये हैंडऑफ विफल हो जाते हैं, तो विमान दुर्घटनाग्रस्त हो सकता है, या इससे भी बुरा, विमान गलत यात्रियों के साथ उड़ान भर सकता है, जिससे बाद में अराजकता फैल सकती है। इन्हें miscompilations कहा जाता है।

समस्या: "साइलेंट हैंडऑफ" (The Silent Handoff)

इस शोध पत्र के लेखकों ने गौर किया कि जबकि हमारे पास यह परीक्षण करने के लिए उत्कृष्ट उपकरण हैं कि एक एकल एयरलाइन कितनी अच्छी तरह काम करती है (केवल Java का परीक्षण करना, या केवल Kotlin का परीक्षण करना), हमारे पास यह परीक्षण करने के लिए अच्छे उपकरण नहीं हैं कि जब वे आपस में इंटरैक्ट करते हैं तो क्या होता है।

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

समाधान: CrossLangFuzzer

टीम ने CrossLangFuzzer नामक एक टूल बनाया है। आप इस टूल को एक सुपर-रोबोटिक अनुवादक और शरारती तत्व (prankster) के रूप में देख सकते हैं जिसे विशेष रूप से इन हैंडऑफ्स को तोड़ने के लिए डिज़ाइन किया गया है।

यह यहाँ कैसे काम करता है, चरण-दर-चरण:

  1. यूनिवर्सल ब्लूप्रिंट (The IR):
    सीधे Java या Kotlin में कोड लिखने के बजाय, रोबोट पहले एक "यूनिवर्सल ब्लूप्रिंट" (जिसे इंटरमीडिएट रिप्रेजेंटेशन या IR कहा जाता है) बनाता है। यह ब्लूप्रिंट एक मास्टर आर्किटेक्चरल ड्राइंग की तरह है जिसे इस बात से फर्क नहीं पड़ता कि अंतिम इमारत ईंट (Java) की बनी है या लकड़ी (Kotlin) की। यह बस संरचना को जानता है: "यहाँ एक दरवाजा है, यहाँ एक खिड़की है, यहाँ एक छत है।"

  2. अनुवादक (The Printer):
    रोबोट इस यूनिवर्सल ब्लूप्रिंट को लेता है और तुरंत इसे एक साथ कई भाषाओं में वास्तविक कोड के रूप में प्रिंट करता है। यह एक ही तार्किक संरचना (logical structure) के Java संस्करण, Kotlin संस्करण और Scala संस्करण को प्रिंट कर सकता है।

  3. शरारती तत्व (The Mutator):
    यही मजेदार हिस्सा है। रोबोट के पास सात "प्रैंक" मूव्स (prank moves) का एक सेट है। यह ब्लूप्रिंट को लेता है और उसे जानबूझकर ऐसे तरीकों से मोड़ता है जो कंपाइलर्स के लिए संभालना मुश्किल हो।

    • उपमा: कल्पना कीजिए कि यह "The cat sat on the mat" जैसे वाक्य को लेता है और "cat" को "dog" से बदल देता है, या "sat" को "jumped" में बदल देता है, या जहाँ नहीं होना चाहिए वहाँ प्रश्न चिह्न लगा देता है।
    • यह प्रकारों (types) और नियमों (जैसे कि किसी नंबर को वैकल्पिक बनाना या जेनेरिक लिस्ट को बदलना) के साथ ऐसा करता है। यह कंपाइलर्स को भ्रमित करने की कोशिश कर रहा है: "हे, क्या यह अभी भी आपको समझ में आ रहा है?"
  4. रेफरी (Differential Testing):
    रोबोट इन मुड़े-तुड़े प्रोग्रामों को वास्तविक कंपाइलर्स (कंट्रोल टावर्स) के पास भेजता है।

    • परिदृश्य A: कंपाइलर A कहता है, "यह ठीक है!" और कंपाइलर B कहता, "त्रुटि! यह टूटा हुआ है!"
    • परिदृश्य B: कंपाइलर A क्रैश हो जाता है, लेकिन कंपाइलर B चलता रहता है।
    • निर्णय: यदि कंपाइलर इस बात पर असहमत हैं कि कोड वैध है या नहीं, तो रोबोट इसे एक बग (bug) के रूप में चिह्नित करता है। यह दो रेफरी द्वारा एक ही खेल के लिए अलग-अलग कारणों से सीटी बजाने जैसा है।
  5. डिटेक्टिव (The Reducer):
    जब कोई बग पाया जाता है, तो टेस्ट प्रोग्राम बहुत बड़ा और जटिल हो सकता है। रोबोट एक जासूस की तरह कार्य करता है, कोड के हिस्सों को एक-एक करके हटाता है ताकि उस सबसे छोटे हिस्से को खोजा जा सके जो अभी भी क्रैश का कारण बनता है। यह मानव डेवलपर्स के लिए कोड को देखना आसान बनाता है ताकि वे कह सकें, "आह, हाँ, मैं यहाँ समस्या देख सकता हूँ।"

परिणाम

टीम ने इस रोबोट का JVM की दुनिया की पांच सबसे बड़ी "एयरलाइंस" के खिलाफ परीक्षण किया: Java, Kotlin, Scala (संस्करण 2 और 3), और Groovy।

रोबोट ने 32 पुष्ट बग (confirmed bugs) खोजे।

  • इसने Kotlin में 15 बग पाए।
  • Scala 3 में 7 बग पाए।
  • Groovy में 4 बग पाए।
  • Java में 4 बग पाए।
  • Scala 2 में 2 बग पाए।

महत्वपूर्ण बात यह है कि ये केवल सैद्धांतिक समस्याएं नहीं थीं। इन भाषाओं के डेवलपर्स ने बग्स की पुष्टि की। वास्तव में, Groovy टीम ने रोबोट द्वारा खोजे गए बग्स में से 100% को ठीक कर दिया है, और Kotlin टीम ने पहले ही एक को ठीक कर दिया है, बाकी पुष्टि किए गए हैं और पैच का इंतजार कर रहे हैं।

यह क्यों मायने रखता है

यह शोध पत्र तर्क देता है कि जैसे-जैसे सॉफ्टवेयर अधिक जटिल होता जा रहा है और विभिन्न भाषाओं को आपस में मिला रहा है, हम अब उन्हें अलग-थलग रहकर टेस्ट नहीं कर सकते। हमें एक ऐसे टूल की आवश्यकता है जो विशेष रूप से उन उलझे हुए और भ्रमित करने वाले सीमाओं को देखे जहाँ ये भाषाएँ मिलती हैं। CrossLangFuzzer पहला टूल है जो व्यवस्थित रूप से ऐसा करता है, जो JVM इकोसिस्टम में इन "हैंडऑफ्स" के लिए एक स्ट्रैस-टेस्ट के रूप में कार्य करता है ताकि विमानों को सुरक्षित रूप से उड़ते रहने के लिए रखा जा सके।

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

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

Digest आज़माएँ →