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

ScratchLens: Lens-Parametric Behavioral Equivalence for Scratch Programs

स्क्रैचलेंस (ScratchLens) स्क्रैच प्रोग्रामों में व्यवहारिक तुल्यता (behavioral equivalence) निर्धारित करने के लिए एक लेंस-पैरामीट्रिक ढांचे को पेश करता है, जो उन्हें एक कारण मध्यवर्ती प्रतिनिधित्व (causal intermediate representation) में संकलित करता है, समवर्तीता (concurrency) को संभालने के लिए कैनोनिकलाइजेशन (canonicalization) और आंशिक-क्रम न्यूनीकरण (partial-order reduction) लागू करता है, और साक्ष्य के साथ साउंड वर्डिक्ट (sound verdicts) प्रदान करने के लिए SMT-आधारित परिशोधन (SMT-based refinement) का उपयोग करता है, जिससे स्वचालित ग्रेडिंग और मरम्मत में सिंटैक्टिक डिफरेंसिंग (syntactic differencing) और सिंगल-रन डायनेमिक एनालिसिस (single-run dynamic analysis) की सीमाओं को दूर किया जा सके।

मूल लेखक: Yuan Si, Jialu Zhang

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

मूल लेखक: Yuan Si, Jialu Zhang

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

कल्पना कीजिए कि आप एक शिक्षक हैं जो एक कक्षा के छात्रों को ग्रेड दे रहे हैं जो Scratch का उपयोग करके कोडिंग करना सीख रहे हैं, जो एक रंगीन, ब्लॉक-आधारित प्रोग्रामिंग भाषा है। दो छात्र, एलिस और बॉब, ऐसे प्रोजेक्ट जमा करते हैं जो स्क्रीन पर पूरी तरह से अलग दिखते हैं। एलिस ने अपने सभी वेरिएबल्स (variables) का नाम बदल दिया, अपने कोड को छोटे-छोटे टुकड़ों में बाँट दिया, और अपने निर्देशों को फिर से व्यवस्थित कर दिया। बॉब ने अपने कोड को सरल रखा लेकिन एक बहुत छोटा सा ब्लॉक बदल दिया।

बड़ा सवाल शिक्षक के लिए यह है: क्या ये दोनों प्रोग्राम वास्तव में एक ही चीज़ कर रहे हैं, या उनमें से एक खराब (broken) है?

यहीं पर यह पेपर ScratchLens के बारे में बताता है। ScratchLens को एक सुपर-स्मार्ट, जादुई आवर्धक लेंस (magnifying glass) के रूप में समझें जो न केवल शब्दों (कोड ब्लॉक्स) को देखता है, बल्कि उनके पीछे की कहानी (व्यवहार) को भी समझता है।

यहाँ यह टूल कैसे काम करता है, इसे सरल अवधारणाओं में तोड़कर समझाया गया है:

1. समस्या: "एक ही कहानी, अलग-अलग अध्याय"

Scratch में, आप एक ही कहानी को लाखों अलग तरीकों से सुना सकते हैं।

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

मौजूदा टूल्स इस मामले में खराब हैं। कुछ बहुत सख्त हैं (वे केवल इसलिए "अलग!" कहते हैं क्योंकि कोड अलग दिखता है)। अन्य बहुत ढीले हैं (वे प्रोग्राम को एक बार चलाते हैं, देखते हैं कि यह काम करता है, और कहते हैं "एक जैसा!" भले ही वह वास्तव में खराब हो)।

2. समाधान: "लेंस" की अवधारणा

लेखकों ने महसूस किया कि "समानता" (equivalence) इस बात पर निर्भर करती है कि आप क्या देख रहे हैं। वे इसे एक लेंस कहते हैं।

कल्पना कीजिए कि आप एक फिल्म को अलग-अलग रंग के चश्मों के माध्यम से देख रहे हैं:

  • "फाइनल स्टेट" (Final State) लेंस: आपको केवल इस बात की परवाह है कि क्या खेल समान स्कोर के साथ समाप्त होता है। (क्या खिलाड़ी जीत गया?)
  • "फ्रेम" (Frame) लेंस: आपको एनिमेशन की परवाह है। (क्या पात्र सुचारू रूप से फिसला या अचानक कूदा?)
  • "इवेंट" (Event) लेंस: आपको टाइमिंग की परवाह है। (क्या पात्र ने नाचने से पहले संगीत के शुरू होने का इंतज़ार किया?)

ScratchLens केवल "हाँ/नहीं" का उत्तर नहीं देता। यह कहता है: "फाइनल स्टेट लेंस के तहत, ये समान हैं। लेकिन फ्रेम लेंस के तहत, ये अलग हैं क्योंकि एक कूदता है और दूसरा फिसलता है।" यह टूल भ्रमित करने वाला उत्तर देने से रोकता है जब दो लोग समस्या को अलग तरह से देख रहे हों।

3. यह कैसे काम करता है: "रेसिपी" बनाम "भोजन"

केवल सामग्री (कोड ब्लॉक्स) की सूची की तुलना करने के बजाय, ScratchLens भोजन को पकाता है और रेसिपी का एक विशेष तरीके से विश्लेषण करता है:

  • "कॉज़ल मैप" (Causal Map - CSIR): यह रंगीन ब्लॉक्स को एक सख्त, गणितीय कारण-और-प्रभाव (cause-and-effect) के मानचित्र में अनुवादित करता है। यह ट्रैक करता है कि कौन क्या पढ़ता है, कौन क्या लिखता है, और कौन किसका इंतज़ार करता है।
  • "मैजिक सॉर्ट" (Magic Sort - Canonicalization): यह कोड को लेता है और उसे एक मानक प्रारूप में पुनर्गठित करता है। यदि एलिस ने A + B लिखा और बॉब ने B + A लिखा, तो टूल जानता है कि ये एक ही गणितीय समस्या हैं। यह "शोर" (नाम बदलना, क्रम बदलना) को हटा देता है ताकि मूल तर्क (core logic) को देखा जा सके।
  • "रेस डिटेक्टर" (Race Detector): Scratch में, कई चीजें एक ही समय में होती हैं। टूल जाँचता है कि क्या दो क्रियाएं एक ही संसाधन (जैसे कि दो लोग एक ही व्हाइटबोर्ड पर लिखने की कोशिश कर रहे हैं) के लिए लड़ रही हैं। यदि वे ऐसा कर रहे हैं, तो यह इसे संभावित "रेस कंडीशन" (timing bug) के रूप में चिह्नित करता है।

4. "डिटेक्टिव" मोड

यदि टूल 100% सुनिश्चित नहीं है, तो वह केवल अनुमान नहीं लगाता। यह एक काउंटर-एग्जांपल जनरेटर (Counter-Example Generator) के साथ एक जासूस की तरह कार्य करता है:

  • यह कहता है, "मुझे लगता है कि ये अलग हैं, लेकिन मुझे प्रमाण चाहिए।"
  • फिर यह एक विशिष्ट, लक्षित परीक्षण (जैसे कि एक "स्ट्रेस टेस्ट") चलाता है ताकि यह देख सके कि क्या यह प्रोग्रामों को अलग व्यवहार करने के लिए मजबूर कर सकता है।
  • यदि परीक्षण विफल हो जाता है, तो यह बग को पकड़ लेता है और शिक्षक को ठीक से दिखाता है कि क्यों (उदाहरण के लिए, "एक 'wait' कमांड की कमी के कारण पात्र बहुत जल्दी हिल गया")।
  • यदि यह अभी भी अंतर साबित करने में असमर्थ है, तो यह ईमानदारी से कहता है, "अज्ञात" (Unknown)। यह महत्वपूर्ण है। यह कहना कि "मैं नहीं जानता" बेहतर है बजाय इसके कि यह झूठ बोले कि "वे एक जैसे हैं" जब वे वास्तव में खराब हो सकते हैं।

5. परिणाम: "परफेक्ट स्कोर"

लेखकों ने वास्तविक छात्र प्रोजेक्ट्स और "म्यूटेटेड" (mutated) संस्करणों (जहाँ उन्होंने जानबूझकर कोड को विशिष्ट तरीकों से बिगाड़ा है) के एक विशाल संग्रह पर ScratchLens का परीक्षण किया।

  • परीक्षण: उन्होंने तुलना के लिए प्रोग्रामों के 444 जोड़े रखे।
  • परिणाम: ScratchLens ने 100% सटीकता प्राप्त की।
  • "फॉल्स पॉजिटिव" (False Positive) सुरक्षा: सबसे महत्वपूर्ण बात यह है कि इसने कभी भी एक खराब प्रोग्राम को सही होने का दावा नहीं किया। ग्रेडिंग की दुनिया में, एक खराब प्रोग्राम को "अच्छा" कहना सबसे बड़ी गलती है। ScratchLens ने इससे पूरी तरह से परहेज किया।
  • तुलना: अन्य तरीकों (जैसे सरल टेक्स्ट तुलना, कोड को कुछ बार चलाना, या यहाँ तक कि उन्नत AI चैटबॉट्स) ने गलतियाँ कीं। या तो उन्होंने बग मिस कर दिए या उन्होंने सोचा कि टूटा हुआ कोड ठीक है। ScratchLens एकमात्र ऐसा था जिसने हर बार सही किया।

सारांश उपमा

कल्पना कीजिए कि दो शेफ केक की रेसिपी जमा कर रहे हैं।

  • पुराने टूल्स: सामग्री की सूची देखते हैं। यदि शेफ A कहता है "चीनी" और शेफ B कहता है "सैकरिन" (saccharin), तो वे कहते हैं "अलग!"। या वे एक निवाला चखते हैं और कहते हैं "एक जैसा!" भले ही बाद में केक गिर जाए।
  • ScratchLens: यह रेसिपी को पढ़ता है, समझता है कि इस संदर्भ में "चीनी" और "सैकरिन" एक ही कार्य (function) हो सकते हैं, लेकिन यह यह भी जाँचता है कि क्या बेकिंग का समय अलग है। यह आपको बताता है: "इनके केक का स्वाद एक जैसा होगा (Final State), लेकिन शेफ B का केक तेज़ी से फूलेगा (Frame/Event)।" यदि यह अनिश्चित है, तो यह अनुमान लगाने के बजाय कहता है, "मुझे निश्चित होने के लिए एक टेस्ट केक बनाना होगा।"

यह पेपर निष्कर्ष निकालता है कि कोडिंग सिखाने के लिए, हमें ऐसे टूल्स की आवश्यकता है जो केवल टेक्स्ट की तुलना करने के बजाय संदर्भ (लेंस) और कारणता (मैप) को समझते हों। ScratchLens पहला टूल है जो Scratch प्रोग्रामों के लिए इसे पूरी तरह से करता है।

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

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

Digest आज़माएँ →