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

DRReduce: Enhancing Syntax-Guided Program Reduction with Dependency Reconstruction

DRReduce एक भाषा-अज्ञेय (language-agnostic) प्रोग्राम रिडक्शन फ्रेमवर्क है जो विलोपन के बाद सिमेंटिक सुसंगतता को सुधारने के लिए डिपेंडेंसी रिकंस्ट्रक्शन को पेश करके सिंटैक्स-गाइडेड सर्च की दक्षता और प्रभावशीलता को बढ़ाता है, जिससे यह दोनों अत्याधुनिक सामान्य रिड्यूसर्स और भाषा-विशिष्ट टूल्स की तुलना में बेहतर आकार कमी और गति प्राप्त करता है।

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

प्रकाशित 2026-05-20
📖 5 मिनट में पढ़ें🧠 गहराई से पढ़ें

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

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

कल्पना कीजिए कि आप एक जासूस हैं जो एक रहस्य सुलझाने की कोशिश कर रहे हैं। आपके पास एक विशाल, अराजक अपराध स्थल (एक बड़ा कंप्यूटर प्रोग्राम) है जिसने एक आपदा (एक बग या क्रैश) पैदा की है। आपका लक्ष्य हर उस चीज़ को हटा देना है जो अनावश्यक है, जब तक कि आप उस बिल्कुल छोटे, सरल दृश्य तक न पहुँच जाएँ जो अभी भी उस आपदा को दोबारा उत्पन्न कर सके। इसे प्रोग्राम रिडक्शन (Program Reduction) कहा जाता है।

ऐसा क्यों करना है? क्योंकि यदि आप एक डेवलपर को कोड का एक छोटा सा, 10-लाइन वाला हिस्सा दिखा सकते हैं जो सॉफ़्टवेयर को तोड़ देता है, तो वे इसे मिनटों में ठीक कर सकते हैं। यदि आप उन्हें 100,000 लाइनों वाली एक फ़ाइल दिखाते हैं, तो वे हार मान सकते हैं।

समस्या: "आंखों पर पट्टी बंधा हुआ" सफाईकर्मी

लंबे समय तक, इस काम के लिए सबसे अच्छे उपकरण आंखों पर पट्टी बंधे हुए सफाईकर्मियों की तरह थे। वे कोड के आकार (सिंटैक्स) के आधार पर चीजों को हटाने के बारे में जानते थे, लेकिन वे वास्तव में कोड का क्या मतलब है (सिमेंटिक्स), यह नहीं समझते थे।

कल्पना कीजिए कि एक घर में एक जटिल प्लंबिंग सिस्टम है।

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

समाधान: DRReduce (एक "स्मार्ट" सफाईकर्मी)

लेखकों ने DRReduce बनाया है, जो एक नया उपकरण है और एक स्मार्ट, अनुकूलन योग्य सफाईकर्मी की तरह काम करता है।

DRReduce केवल कोड के आकार को नहीं देखता है; यह डिपेंडेंसी का एक मानचित्र (एक "कौन किसको चाहिए" वाला आरेख) बनाता है।

  1. यह कनेक्शन देखता है: यह जानता है कि यदि आप एक फंक्शन को हटाते हैं, तो आपको उन जगहों को भी ठीक करना होगा जहाँ उस फंक्शन को कॉल किया गया था।
  2. यह "डिपेंडेंसी रिकंस्ट्रक्शन" करता है: यही असली जादू है।
    • परिदृश्य A (टूटा हुआ लिंक): यदि सफाईकर्मी एक फंक्शन को हटा देता है, लेकिन कोड के अन्य हिस्से अभी भी उसका उपयोग करने की कोशिश करते हैं, तो DRReduce केवल एक खाली जगह नहीं छोड़ता है। यह तुरंत उस छेद को एक "डमी" प्लेसहोल्डर (जैसे एक जेनेरिक "1" या "null") से भर देता है ताकि कोड अभी भी कंपाइल और रन हो सके। यह घर को खड़ा रखते हुए फर्नीचर को हटा देता है।
    • परिदृश्य B (उलझी हुई गांठ): कभी-कभी, दो चीजें एक दूसरे पर निर्भर होती हैं (जैसे एक पैरामीटर और उसे पास किया गया तर्क)। यदि आप एक को हटाते हैं, तो दूसरा टूट जाता है। DRReduce इस गांठ को पहचान लेता है और दोनों हिस्सों को एक साथ काट देता है, बजाय इसके कि वह केवल एक को काटने की कोशिश में फंसा रहे।

परिणाम: तेज़ और छोटा

लेखकों ने वास्तविक दुनिया के कंप्यूटर बग्स पर दो लोकप्रिय भाषाओं में C और Java में DRReduce का परीक्षण किया।

  • "आंखों पर पट्टी बंधे हुए" सफाईकर्मियों (जैसे Perses, WDD) की तुलना में:
    DRReduce ने औसतन 51.9% छोटे प्रोग्राम तैयार किए। इसने कई परीक्षणों में काम को बहुत तेज़ी से भी पूरा किया क्योंकि इसने उन चीजों को हटाने में समय बर्बाद नहीं किया जो कोड को तोड़ देतीं। इसने "लीकी सिंक" की समस्या को पूरी तरह से टाल दिया।
  • "मास्टर प्लंबरों" (जैसे CReduce) की तुलना में:
    आमतौर पर, मास्टर प्लंबर (जो विशिष्ट भाषाएँ जानते हैं) सबसे छोटे परिणाम देते हैं। DRReduce, जो किसी विशिष्ट भाषा के नियमों को नहीं जानता, ने विशेषज्ञों के समान ही छोटे परिणाम प्राप्त किए। इससे भी बेहतर, यह विशेषज्ञ C-Reducer की तुलना में 3.3 गुना तेज़ था क्योंकि इसे हर एक घर के लिए हजारों विशिष्ट नियमों की मैन्युअल जांच नहीं करनी पड़ी।

मुख्य निष्कर्ष

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

  • पुराना तरीका: कुछ हटाने की कोशिश करें -> कोड टूट जाता है -> वापस पहले जैसा करें -> फिर से कोशिश करें। (धीमा, अस्त-व्यस्त)।
  • DRReduce का तरीका: देखें कि आप क्या हटा रहे हैं -> तुरंत टूटे हुए कनेक्शनों को ठीक करें -> उसे हटा दें। (तेज़, साफ, और संभव सबसे छोटे आकार तक पहुँचने वाला)।

पेपर यह निष्कर्ष निकालता है कि इस "रिपेयर" स्टेप को जोड़ने से, वे परीक्षण में लगने वाले समय को लगभग 60% तक कम कर सकते हैं और बग रिपोर्ट्स के आकार को 50% से अधिक कम कर सकते हैं, जिससे सॉफ़्टवेयर डेवलपर्स के लिए अपने बग्स को ठीक करना बहुत आसान हो जाता है।

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

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

Digest आज़माएँ →