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

Taming the Drift: Context-aware Repair of Dockerfile Drift during Software Evolution

यह शोध पत्र Cadre प्रस्तुत करता है, जो एक संदर्भ-जागरूक ढांचा (context-aware framework) है जो लक्षित पैच उत्पन्न करने के लिए एक संदर्भ-जागरूक निर्भरता ग्राफ (Context-aware Dependency Graph - CDG) का निर्माण करने हेतु स्टैटिक एनालिसिस का लाभ उठाता है ताकि Dockerfile ड्रिफ्ट को प्रभावी ढंग से ठीक किया जा सके, और यह नए पेश किए गए 1,040 वास्तविक-विश्व ड्रिफ्ट उदाहरणों के D3D^3 बेंचमार्क पर मौजूदा नियम-आधारित और LLM-आधारित बेसलाइन से बेहतर प्रदर्शन करता है।

मूल लेखक: Chengjie Wang, Jingzheng Wu, Xiang Ling, Tianyue Luo, Chen Zhao

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

मूल लेखक: Chengjie Wang, Jingzheng Wu, Xiang Ling, Tianyue Luo, Chen Zhao

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

कल्पना कीजिए कि आप अपने गैरेज में एक रोबोट बना रहे हैं। आपने एक बेहतरीन निर्देश पुस्तिका (Dockerfile) लिखी है जो आपके रोबोट को बताती है कि उसे कौन से पुर्जे उठाने हैं, उन्हें कहाँ रखना है और उन्हें कैसे जोड़ना है। लेकिन फिर, आप रोबोट के दिमाग को अपग्रेड करने का फैसला करते हैं (source code) और कुछ तार बदल देते हैं। आप नए पुर्जों के अनुसार निर्देश पुस्तिका को अपडेट करना भूल जाते हैं।

अब, जब आप रोबोट बनाने की कोशिश करते हैं, तो वह लड़खड़ाता है और बंद हो जाता है। निर्देश पुस्तिका व्याकरण के लिहाज से "टूटी" नहीं है; शब्द सही हैं। लेकिन निर्देश पुस्तिका वास्तविकता से दूर (drift) हो गई है। यह एक ऐसे पुर्जे को पकड़ने की कोशिश कर रही है जो अब मौजूद नहीं है या एक ऐसे उपकरण का उपयोग करने की कोशिश कर रही है जिसे बदल दिया गया है। सॉफ्टवेयर की दुनिया में, इसे Dockerfile drift कहा जाता है, और यह कंप्यूटरों को चुपचाप विफल कर देता है, जिससे डेवलपर्स कई दिनों तक सिर खुजलाते रह जाते हैं।

पुराना तरीका: अंधेरे में अनुमान लगाना

पिछले टूल्स ने इसे केवल मैनुअल और एरर मैसेज को पढ़कर ठीक करने की कोशिश की। यह कार के इंजन को ठीक करने के लिए केवल "चेक इंजन" लाइट और ओनर मैनुअल को देखने जैसा है, बिना बोनट खोलकर यह देखे कि असली तार कहाँ हैं।

कुछ टूल्स ने कठोर नियमों (जैसे चेकलिस्ट) का उपयोग किया, जबकि अन्य सुपर-स्मार्ट AI (लार्ज लैंग्वेज मॉडल्स) का उपयोग करके सुधार का अनुमान लगाने लगे। लेकिन समस्या यह थी: ये AI टूल्स सूचनाओं में डूब रहे थे। उन्हें पूरे गैरेज के साथ—हर एक पेंच, हर पुराना मैनुअल और कबाड़ का हर डिब्बा—एरर मैसेज के साथ थमा दिया गया था। AI इस शोर से इतना अभिभूत हो गया कि या तो उसने हार मान ली या उसने एक पागलपन भरा समाधान बताया जो काम नहीं आया। वास्तव में, हर बैच की 41 से 58 समस्याओं में से, इन AI टूल्स ने कोई भी उत्तर देने में विफलता दिखाई क्योंकि "निर्देश सूची" इतनी लंबी थी कि वे उसे पढ़ ही नहीं सके।

नया नायक: Cadre (जासूस)

यहाँ Cadre आता है, एक नया फ्रेमवर्क जो एक शानदार जासूस की तरह काम करता है। लेखक, चेंगजी वांग और उनकी टीम ने महसूस किया कि रोबोट को ठीक करने का रहस्य जासूस को और अधिक चीजें पढ़ने के लिए देना नहीं है, बल्कि उन्हें सही नक्शा देना है।

उनका बड़ा विचार सरल है: संरचना (Structure), मात्रा (Volume) से अधिक महत्वपूर्ण है। यह जानना कि कौन सा विशिष्ट तार किस विशिष्ट पेंच से जुड़ता है, हजारों असंबंधित टेक्स्ट को पढ़ने की तुलना में बहुत अधिक महत्वपूर्ण है।

Cadre तीन जादुई चरणों में यह करता है:

  1. द कॉन्टेक्स्ट प्रोफाइलर (समय यात्री): किसी भी चीज़ को ठीक करने की कोशिश करने से पहले, Cadre पूरी निर्माण प्रक्रिया का चरण-दर-चरण अनुकरण (simulate) करता है। यह देखता है कि कौन सी फाइलें कॉपी की जा रही हैं, कौन से वेरिएबल्स सेट किए जा रहे हैं, और किन टूल्स को कॉल किया जा रहा है। यह हर क्षण प्रोजेक्ट की "अवस्था" (state) का एक मानसिक मॉडल बनाता है।
  2. द CDG (डिपेंडेंसी मैप): उस सिमुलेशन का उपयोग करके, Cadere एक कॉन्टेक्स्ट-अवेयर डिपेंडेंसी ग्राफ (CDG) बनाता है। इसे अपने सॉफ्टवेयर के लिए एक सबवे मैप की तरह समझें। यह दिखाता है कि "FROM" निर्देश (बेस) कैसे "COPY" निर्देश (पुर्जे) से जुड़ता है और अंत में "RUN" निर्देश (असेंबली) से जुड़ता है। यदि कोई फ़ाइल बदलती है, तो मैप दिखाता है कि कौन से निर्देश उस पर ठोकर खाएंगे।
  3. द टू-स्टेप फिक्स (स्मार्ट फिल्टर): AI पर पूरा गैरेज डालने के बजाय, Cadre पहले AI से एक स्मार्ट सवाल पूछता है: "इस मैप और एरर के आधार पर, आपको वास्तव में किन विशिष्ट फाइलों को देखने की आवश्यकता है?"
    • चरण 1: AI केवल प्रासंगिक फाइलों (मुख्य फाइलों) को चुनता है।
    • चरण 2: AI केवल उन फाइलों को पढ़ता है और सुधार लिखता है।

यह AI के "दिमाग" को ओवरफ्लो होने से रोकता है। जहाँ अन्य तरीके 41-58 मामलों में पैच बनाने में विफल रहे क्योंकि प्रॉम्प्ट बहुत बड़ा था, वहीं Cadre ने अपने हर प्रयास के लिए एक पैच तैयार किया।

परिणाम: क्या यह काम करता है?

टीम ने 1,040 वास्तविक दुनिया के उदाहरणों पर Cadre का परीक्षण किया जिन्हें उन्होंने GitHub के इतिहास से निकाला था (एक डेटासेट जिसे उन्होंने 𝐷3 कहा)। ये नकली समस्याएं नहीं थीं; ये वास्तविक सॉफ़्टवेयर प्रोजेक्ट्स में हुई वास्तविक विफलताएं थीं, जिनमें उन्हें दोबारा उत्पन्न करने के लिए सटीक सेटिंग्स भी शामिल थीं।

यहाँ Cadre का मुकाबला हुआ:

  • Cadre ने समस्याओं के 35.22% को ठीक किया।
  • सबसे अच्छे पिछले AI मेथड (बिना इस स्मार्ट मैपिंग के) ने 28.48% को ठीक किया।
  • पुराने नियम-आधारित चेकलिस्ट मेथड ने केवल 9.34% को ठीक किया।

इसका मतलब है कि Cadre अपने सबसे अच्छे AI प्रतिद्वंद्वी से 1.24 गुना बेहतर है और पुराने नियम-आधारित टूल्स से लगभग 3 गुना बेहतर है।

लेकिन असली जादू तब होता है जब समस्या "पुरानी (stale)" हो जाती है। कल्पना कीजिए कि एक टूटा हुआ बिल्ड जिसे पांच या छह अपडेट के बाद भी ठीक नहीं किया गया। हाल के कोड परिवर्तन मूल त्रुटि से पूरी तरह से असंबंधित लग सकते हैं। अधिकांश टूल्स भ्रमित हो जाते हैं और हार मान लेते हैं। लेकिन क्योंकि Cadre CDG मैप का उपयोग करता है, यह टूटे हुए तार को उसके मूल तक ट्रैक कर सकता है, भले ही वह इतिहास में कहीं भी गहरा दबा हो। पांच या अधिक अपडेट दूर होने पर भी, Cadre ने 25.9% समस्याओं को ठीक किया, जबकि अगले सबसे अच्छे टूल ने केवल 19.7% ही प्रबंधित किया। यह अंतर और भी बढ़ गया क्योंकि समस्याएं जितनी पुरानी हुईं, मैप उतना ही मजबूत संकेत साबित हुआ।

यह क्या नहीं है

यह जानना महत्वपूर्ण है कि Cadre क्या नहीं है। यह हर चीज़ को ठीक करने वाली जादुई छड़ी नहीं है।

  • यह उन समस्याओं को ठीक नहीं कर सकता जो इंटरनेट डाउन होने या सर्वर में डिस्क स्पेस खत्म होने के कारण होती हैं।
  • यह वास्तविक कोड लॉजिक (जैसे प्रोग्राम के भीतर गणितीय त्रुटि) के भीतर के बग को ठीक नहीं कर सकता; यह केवल बिल्ड निर्देशों को ठीक करता है।
  • लगभग 65% मामलों में जहाँ यह विफल हुआ, समस्या एक जटिल बिल्ड-टूल बाधा थी जिसे केवल मैनुअल बदलकर हल नहीं किया जा सकता था (जैसे कि किसी प्राइवेट रजिस्ट्री में गायब पैकेज)।

निष्कर्ष

लेखक सुझाव देते हैं कि सॉफ्टवेयर रखरखाव के भविष्य के लिए, हमें केवल AI को अधिक डेटा देने के बजाय उसे निर्भरताओं (dependencies) की संरचना को समझने के लिए सिखाने की आवश्यकता है। फाइलों और निर्देशों के बीच संबंध का एक मैप बनाकर, Cadre ने सिद्ध किया कि थोड़ा सा स्मार्ट कॉन्टेक्स्ट बहुत काम आता है। यह पूरी लाइब्रेरी को पढ़ने के बारे में नहीं है; यह यह जानने के बारे में है कि बिल्कुल कौन सा पन्ना पलटना है।

1,040 वास्तविक दुनिया के ड्रिफ्ट्स का सारा कोड और डेटासेट किसी के भी द्वारा जांच के लिए खुला है, यह सुनिश्चित करता है कि यह केवल एक सिद्धांत नहीं है, बल्कि वास्तविक, पुनरुत्पादक साक्ष्य पर बना एक टूल है।

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

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

Digest आज़माएँ →