ReDef: Do Code Language Models Truly Understand Code Changes for Just-in-Time Software Defect Prediction?
यह शोध पत्र ReDef को प्रस्तुत करता है, जो रिवर्ट कमिट्स (revert commits) द्वारा सत्यापित कोड परिवर्तनों का एक उच्च-विश्वास वाला डेटासेट है, और इसका उपयोग यह प्रदर्शित करने के लिए करता है कि यद्यपि कोड लैंग्वेज मॉडल्स कॉम्पैक्ट डिफ-स्टाइल एनकोडिंग्स (compact diff-style encodings) के साथ सर्वश्रेष्ठ प्रदर्शन करते हैं, वे वास्तव में कोड परिवर्तन के अर्थों (semantics) को समझने में विफल रहते हैं, जो काउंटरफैक्चुअल परटर्बेशन्स (counterfactual perturbations) के तहत स्थिर प्रदर्शन से प्रकट होता है।
मूल पेपर CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/) के तहत लाइसेंस किया गया है। नीचे दिए गए पेपर की यह व्याख्या AI से तैयार की गई है। इसे लेखकों ने न तो लिखा है, न इसका समर्थन किया है। तकनीकी सटीकता के लिए मूल पेपर देखें। पूरा डिस्क्लेमर पढ़ें
कल्पना कीजिए कि आप एक विशाल, अराजक समाचार पत्र के संपादक-इन-चीफ हैं। हर दिन, सैकड़ों लेखक लेखों में बदलाव जमा करते हैं। आपका काम कोड में होने वाले खतरनाक टाइपो या तथ्यात्मक त्रुटियों को पहचानना है, इससे पहले कि समाचार पत्र छपे, ताकि आपको बाद में शर्मनाक सुधार जारी न करने पड़ें। यही वह काम है जिसे Just-in-Time Software Defect Prediction (JIT-SDP) कंप्यूटर कोड के लिए करने की कोशिश करता है।
वर्षों से, शोधकर्ताओं ने "AI संपादकों" (Code Language Models) का निर्माण किया है जो कोड के बदलावों को पहचानने में मदद कर सकें। वे दावा करते हैं कि ये AI एक कोड परिवर्तन को पढ़ सकते हैं, इसका अर्थ समझ सकते हैं, और कह सकते हैं, "हे, यह जोखिम भरा लग रहा है!"
लेकिन KAIST और अन्य संस्थानों के शोधकर्ताओं द्वारा किए गए एक नए अध्ययन ने एक डरावना सवाल पूछा है: क्या ये AI वास्तव में कोड को समझते हैं, या वे केवल सतही संकेतों के आधार पर अनुमान लगा रहे हैं?
यह पता लगाने के लिए, उन्होंने एक नया, अत्यंत सख्त परीक्षण बनाया जिसे ReDef कहा जाता है। उनकी खोज की कहानी, यहाँ सरल रूप में दी गई है।
1. समस्या: "शोर वाले" पुराने डेटासेट (The "Noisy" Old Datasets)
कल्पना कीजिए कि आप एक छात्र को गलतियाँ पकड़ने के लिए पुराने समाचार पत्रों का ढेर देकर सिखाने की कोशिश कर रहे हैं। लेकिन पेच यह है: वह ढेर गलतियों से भरा है। कुछ पन्नों पर लिखा है "यह लेख गलत था" जबकि वह वास्तव में ठीक था। अन्य जगहों पर लिखा है "यह ठीक था" जबकि वह एक आपदा थी।
सॉफ्टवेयर के पिछले डेटासेट्स के साथ भी ऐसा ही हुआ। उन्होंने बग्स खोजने के लिए SZZ नामक एक विधि का उपयोग किया। यह एक जासूस की तरह है जो यह पता लगाने की कोशिश करता है कि किसने गलती की, यह देखकर कि कोड की किसी लाइन को फिक्स करने के बाद किसने उसे छुआ था। लेकिन यह जासूस अक्सर गलत होता है। वे गलत व्यक्ति पर दोष मढ़ सकते हैं, या असली अपराधी को पूरी तरह से छोड़ सकते हैं। यह "शोर" (noise) यह जानने में कठिन बनाता है कि क्या कोई AI वास्तव में स्मार्ट है या सिर्फ भाग्यशाली है।
2. समाधान: "रिवर्ट" एंकर (The "Revert" Anchor)
शोधकर्ताओं ने Reverts का उपयोग करके एक बेहतर परीक्षण बनाने का निर्णय लिया।
एक Revert को एक "दोबारा प्रयास करें" (Do-Over) बटन की तरह समझें। यदि कोई डेवलपर एक कोड परिवर्तन पुश करता है और वह सॉफ्टवेयर को तोड़ देता है, तो वे उसे पूर्ववत करने के लिए "Revert" बटन दबा सकते हैं। इसका संदेश आमतौर पर कहता है, "इस कारण से रिवर्ट किया जा रहा है क्योंकि इसने क्रैश किया।"
- तर्क: यदि कोई डेवलपर स्पष्ट रूप से एक बदलाव को इसलिए वापस लेता है क्योंकि उसने कुछ तोड़ दिया है, तो वह बदलाव निश्चित रूप से एक "बगी" (buggy) वाला था।
- फ़िल्टर: उन्होंने "डू-ओवर" संदेशों को पढ़ने और उन संदेशों को फ़िल्टर करने के लिए एक सुपर-स्मार्ट AI (GPT-4o) का उपयोग किया जो वास्तव में बग्स नहीं थे (जैसे फॉर्मेटिंग परिवर्तन)।
परिणामस्वरूप ReDef प्राप्त हुआ: 13,000 से अधिक कोड परिवर्तनों का एक डेटासेट जहाँ "बगी" वाले बदलाव 92% गारंटी के साथ वास्तविक बग्स हैं। यह AI के लिए एक साफ, उच्च-दांव वाला एग्जाम है।
3. परीक्षण: क्या AI "बदलाव" को पढ़ सकता है?
शोधकर्ताओं ने चार लोकप्रिय AI मॉडल (CodeBERT, CodeT5+, UniXcoder, और विशाल Qwen2.5) को लिया और उन्हें दो चरणों के परीक्षण से गुजरने के लिए रखा।
चरण 1: हम उन्हें बदलाव कैसे दिखाते हैं?
उन्होंने AI को अलग-अलग तरीकों से कोड खिलाने का प्रयास किया:
- पूरी कहानी: पूरे फंक्शन के "पहले" और "बाद" के कोड को दिखाना (जैसे किसी किताब का पूरा अध्याय दिखाना)।
- हाइलाइट: केवल उन विशिष्ट लाइनों को दिखाना जो बदली गई हैं,
<ADDED>या<DELETED>जैसे टैग के साथ (जैसे किसी पन्ने पर केवल लाल पेन के निशान दिखाना)।
परिणाम: "हाइलाइट" विधि सबसे अच्छा काम करती है। AI पूरे फंक्शन को दिखाए जाने पर खराब प्रदर्शन करते हैं क्योंकि इसमें बहुत अधिक जानकारी होती है (जैसे किसी उपन्यास में केवल एक वाक्य देखने की आवश्यकता होने पर पूरा उपन्यास देखना)। संक्षिप्त "डिफ" (diff) शैली AI को महत्वपूर्ण हिस्सों पर केंद्रित रखती है।
चरण 2: "जादुई ट्रिक" (Counterfactuals)
सबसे महत्वपूर्ण हिस्सा यह है। शोधकर्ताओं ने पूछा: यदि AI वास्तव में तर्क को समझता है, तो क्या होता है यदि हम इसे धोखा दें?
उन्होंने डेटा पर "जादुई ट्रिक्स" कीं:
- स्वैप (The Swap): उन्होंने एक "फिक्स" (खराब कोड को अच्छे कोड में बदलना) लिया और लेबल बदल दिए। अब, इनपुट ऐसा दिख रहा था जैसे "अच्छे कोड" को "बुरे कोड" में बदला जा रहा हो।
- इवर्जन (The Inversion): उन्होंने "जोड़ा गया" (Added) और "हटाया गया" (Deleted) टैग्स को उलट दिया।
तर्क: यदि AI समझता है कि "क्रैश को ठीक करना" अच्छा है, और आप उसे "क्रैश को तोड़ना" (लॉजिक बदलकर) दिखाते हैं, तो AI को भ्रमित होना चाहिए और उसका स्कोर गिरना चाहिए। उसे कहना चाहिए, "रुको, यह समझ में नहीं आ रहा है!"
चौंकाने वाला परिणाम: AI को कोई फर्क नहीं पड़ा।
भले ही शोधकर्ताओं ने कोड के तर्क को पूरी तरह से उलट दिया हो, AI का प्रदर्शन बिल्कुल वैसा ही रहा।
- उपमा: कल्पना कीजिए कि एक छात्र गणित की परीक्षा दे रहा है। आप उनसे कहते हैं, "यदि आप 2 + 2 जोड़ते हैं, तो आपको 4 मिलता है।" फिर, आप नंबरों को बदल देते हैं और कहते हैं, "यदि आप 4 + 2 जोड़ते हैं, तो आपको 2 मिलता है।" एक छात्र जो गणित समझता है, वह भ्रमित हो जाएगा। लेकिन ये AI बस पैटर्न को याद रख रहे थे, गणित को नहीं।
4. निष्कर्ष: "सिमेंटिक ब्लाइंडनेस" (Semantic Blindness)
पेपर निष्कर्ष निकालता है कि वर्तमान कोड लैंग्वेज मॉडल्स "सिमेंटिक ब्लाइंडनेस" से ग्रस्त हैं।
- वे पैटर्न पहचानने में माहिर हैं (जैसे, "यदि मैं
ifऔरNULLशब्द देखता हूँ, तो यह शायद एक बग है")। - वे "पहले" और "बाद" की स्थितियों के बीच के संबंध को समझने में बहुत खराब हैं।
वे कोड परिवर्तनों के बारे में "सोच" नहीं रहे हैं; वे केवल सतही संकेतों पर प्रतिक्रिया दे रहे हैं। जब आप संकेतों को विकृत करते हैं, तो वे टूटते नहीं हैं क्योंकि उन्होंने कभी मूल रूप से अर्थ को समझा ही नहीं था।
यह क्यों मायने रखता है?
यदि हम इन AI पर महत्वपूर्ण प्रणालियों (जैसे मेडिकल डिवाइस या सेल्फ-ड्राइविंग कार) में बग्स पकड़ने के लिए भरोसा करते हैं, तो हम मुसीबत में पड़ सकते हैं। वे इस तथ्य से पास हो सकते हैं कि वे अनुमान लगाने में अच्छे हैं, लेकिन वे एक सूक्ष्म, तार्किक त्रुटि को मिस कर सकते हैं जिसके लिए वास्तविक समझ की आवश्यकता होती है।
सीख: हमें इन AI को "प्रतिभाशाली" के रूप में मानना बंद करना होगा जो कोड समझते हैं। वे वर्तमान में बहुत तेज़, पैटर्न-मैचिंग करने वाले तोते की तरह हैं। उन्हें वास्तव में उपयोगी बनाने के लिए, हमें उन्हें केवल पन्ने पर मौजूद "शब्दों" को नहीं, बल्कि बदलाव की "कहानी" को समझना सिखाना होगा।
अपने क्षेत्र के पेपरों की भीड़ में उलझे हुए हैं?
आपके रिसर्च कीवर्ड से मेल खाने वाले सबसे नए और अलग सोच वाले पेपरों का रोज़ाना Digest पाएँ—तकनीकी सारांश के साथ, आपकी भाषा में।