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

Combining Example-Based and Rule-Based Program Transformations to Resolve Build Conflicts

यह शोध पत्र BuCoR को प्रस्तुत करता है, जो एक हाइब्रिड टूल है जो सॉफ़्टवेयर मर्ज ऑपरेशन्स से उत्पन्न होने वाले बिल्ड और टेस्ट संघर्षों का प्रभावी ढंग से पता लगाने और उन्हें हल करने के लिए नियम-आधारित (rule-based) और उदाहरण-आधारित (example-based) प्रोग्राम रूपांतरणों को संयोजित करता है।

मूल लेखक: Sheikh Shadab Towqir, Fei He, Todd Mytkowicz, Na Meng

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

मूल लेखक: Sheikh Shadab Towqir, Fei He, Todd Mytkowicz, Na Meng

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

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

कभी-कभी, आप दोनों बिल्कुल एक ही वाक्य को बदल देते हैं। कंप्यूटर कहता है, "मैं तय नहीं कर पा रहा हूँ कि मुझे किसे रखना चाहिए!" और रुक जाता है। यह एक टेक्स्टुअल कॉन्फ्लिक्ट (Textual Conflict) है।

लेकिन कभी-कभी, कंप्यूटर को लगता है कि उसने इसे ठीक से मर्ज कर दिया है, लेकिन रेसिपी अब खराब हो गई है। शायद आपने एक सामग्री का नाम बदल दिया (जैसे "मक्खन" को "घी" कर दिया), लेकिन आपके दोस्त ने एक नया स्टेप जोड़ दिया जिसमें अभी भी "मक्खन" का इस्तेमाल किया गया है। कंप्यूटर ने टेक्स्ट को तो मर्ज कर दिया, लेकिन रेसिपी अब काम नहीं करेगी। यह एक बिल्ड कॉन्फ्लिक्ट (Build Conflict) है।

लंबे समय तक, कंप्यूटर इन टूटी हुई रेसिपीज़ को खोजने में तो बहुत अच्छे थे, लेकिन उन्हें ठीक करने में बहुत खराब थे। वे बस कह देते थे, "यहाँ एक त्रुटि (error) है," और इसे ठीक करने के लिए इंसान पर छोड़ देते थे। यह उबाऊ और निराशाजनक था।

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

BuCoR के दो दिमाग

BuCoR केवल एक ही ट्रिक पर निर्भर नहीं रहता; यह दो अलग-अलग रणनीतियों को मिलाकर एक हाइब्रिड दृष्टिकोण अपनाता है:

1. "कॉपीकैट" दिमाग (उदाहरण-आधारित - Example-Based)

यह कैसे काम करता है:
कल्पना कीजिए कि आप एक टूटी हुई रेसिपी को ठीक करने की कोशिश कर रहे हैं, लेकिन आपको नहीं पता कि कैसे। आप किताब का इतिहास देखते हैं। आप देखते हैं कि पिछले महीने, किसी ने दूसरे अध्याय में "मक्खन" को "घी" में बदला था। जब उन्होंने ऐसा किया, तो उन्होंने सिर्फ "मक्खन" शब्द को नहीं बदला; उन्होंने उस बर्तन का नाम भी बदल दिया जिसमें वह रखा जाता है और ओवन का तापमान भी बदल दिया ताकि सब कुछ मेल खा सके।

BuCoR का "कॉपीकैट" दिमाग बिल्कुल यही करता है। यह कोड की शाखाओं (कोड के विभिन्न संस्करणों) को देखता है ताकि यह ढूँढ सके कि पहले डेवलपर्स ने समान समस्याओं को कैसे ठीक किया था।

  • यह एक पुराना फिक्स ढूँढता है जहाँ एक डेवलपर ने एक क्लास का नाम बदला था।
  • वह देखता है कि डेवलपर ने उसके आसपास के वेरिएबल्स और मेथड कॉल्स को भी अपडेट किया था।
  • वह एक पैटर्न सीखता है: "जब आप X का नाम बदलते हैं, तो आपको Y और Z को भी अपडेट करना होगा।"
  • फिर वह इस सीखे हुए पैटर्न को आपकी वर्तमान टूटी हुई रेसिपी पर लागू करता है।

उपमा (Analogy): यह एक दोस्त को देखकर गाड़ी चलाना सीखने जैसा है। आप देखते हैं कि वे स्टीयरिंग घुमाते हैं और साथ ही ब्रेक भी दबाते हैं। जब आप ऐसी ही स्थिति का सामना करते हैं, तो आप केवल स्टीयरिंग ही नहीं, बल्कि उस पूरे क्रम की नकल करते हैं।

2. "रूलबुक" दिमाग (नियम-आधारित - Rule-Based)

यह कैसे काम करता है:
कभी-कभी, कॉपी करने के लिए कोई पिछला उदाहरण नहीं होता। हो सकता है कि यह एक बिल्कुल नया प्रकार का एरर हो, या डेवलपर्स ने इसे कभी भी एक ही तरीके से ठीक न किया हो। ऐसे मामलों में, BuCoR अपने "रूलबुक" दिमाग पर स्विच कर जाता है।

इस दिमाग में सामान्य गलतियों के लिए 16 मानक नियमों की एक पूर्व-लिखित सूची है।

  • नियम #1: यदि किसी क्लास का नाम बदला जाता है, तो सभी 'इंपोर्ट्स' को अपडेट करें।
  • नियम #2: यदि कोई मेथड हटाया जाता है, तो उसके कॉल्स को हटा दें।
  • नियम #3: यदि एक पैरेंट क्लास बदलती है, तो चाइल्ड क्लास को उसके अनुसार अपडेट करें।

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

वे एक साथ कैसे काम करते हैं

BuCoR का जादू यह है कि यह दोनों दिमागों का एक साथ उपयोग करता है।

  • परिदृश्य A: आपके पास एक अजीब, अनोखा एरर है। "रूलबुक" दिमाग कहता है, "मेरे पास इसके लिए कोई नियम नहीं है।" लेकिन "कॉपीकैट" दिमाग कहता है, "रुको! मैंने पिछले हफ्ते 'डेसर्ट्स' अध्याय में ऐसा ही कुछ देखा था। मुझे पता है कि इसे कैसे ठीक करना है!" -> सफलता।
  • परिदृश्य B: आपके पास एक बहुत ही सामान्य एरर है (जैसे एक साधारण नाम बदलना)। "कॉपीकैट" दिमाग शायद कोई सटीक उदाहरण न ढूँढ पाए। लेकिन "रूलबुक" दिमाग कहता है, "ओह, यह नियम #1 है। मैं इसे तुरंत ठीक कर सकता हूँ।" -> सफलता।

इन दोनों को मिलाकर, BuCoR अकेले किसी भी एक पद्धति की तुलना में अधिक क्षेत्र को कवर करता है।

क्या यह काम आया?

शोधकर्ताओं ने 88 वास्तविक-दुनिया के बिल्ड कॉन्फ्लिक्ट्स पर BuCoR का परीक्षण किया।

  • परिणाम: BuCoR इन कॉन्फ्लिक्ट्स में से 74% के लिए समाधान उत्पन्न करने में सक्षम रहा (88 में से 65)।
  • सटीकता: इसके द्वारा उत्पन्न किए गए समाधानों में से, 52% वास्तव में सही थे (यानी वे वही थे जो एक मानव डेवलपर ने किए होते)।

हालांकि 52% सुनने में एक सिक्के के उछाल (coin flip) जैसा लग सकता है, लेकिन ऑटोमेटेड कोड फिक्सिंग की दुनिया में, यह एक बहुत बड़ी छलांग है। BuCoR से पहले, टूल्स मुश्किल से सबसे सरल "रीनेम" (नाम बदलने) की त्रुटियों को भी ठीक कर पाते थे। BuCoR अब क्लासेस के बीच मेथड्स को मूव करने, पैरामीटर लिस्ट बदलने और टूटे हुए पदानुक्रमों (hierarchies) को ठीक करने जैसे जटिल बदलावों को संभाल सकता है।

यह क्यों महत्वपूर्ण है

सोचिए कि सॉफ्टवेयर डेवलपमेंट एक विशाल, सहयोगात्मक निर्माण परियोजना (construction project) है। हर बार जब टीम का कोई नया सदस्य एक दीवार या खिड़की जोड़ता है, तो इस बात का जोखिम होता है कि उनका काम किसी और के काम से टकरा जाए।

  • पुराने टूल्स: बस टकराती हुई ईंटों की ओर इशारा करेंगे और कहेंगे, "इसे ठीक करो।"
  • BuC0R: ब्लूप्रिंट को देखता है, याद करता है कि अतीत में समान दीवारों को कैसे ठीक किया गया था, बिल्डिंग कोड की जाँच करता है, और कहता है, "मुझे लगता है कि अगर हम इस ईंट को यहाँ ले जाएँ और उस खिड़की को दरवाजे में बदल दें, तो यह काम कर जाएगा।"

यह अभी मानव आर्किटेक्ट की जगह नहीं लेता है, लेकिन यह समाधान खोजने का भारी काम करता है, जिससे डेवलपर्स के सिरदर्द के घंटों बच जाते हैं और उन्हें सॉफ्टवेयर बनाने के रचनात्मक हिस्सों पर ध्यान केंद्रित करने का मौका मिलता है।

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

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

Digest आज़माएँ →