Automated Generation of Issue-Reproducing Tests by Combining LLMs and Search-Based Testing
यह शोध पत्र BLAST प्रस्तुत करता है, जो एक नवीन उपकरण है जो इश्यू-पैच युग्मों (issue-patch pairs) से इश्यू-पुनरुत्पादक परीक्षणों (issue-reproducing tests) को स्वचालित रूप से उत्पन्न करने के लिए लार्ज लैंग्वेज मॉडल्स को सर्च-बेस्ड सॉफ्टवेयर टेस्टिंग के साथ जोड़ता है, जो एक पायथन बेंचमार्क पर बेहतर प्रदर्शन प्रदर्शित करता है और ओपन-सोर्स रिपॉजिटरीज़ में एक गिटहब बॉट की तीन महीने की तैनाती के माध्यम से इसकी व्यावहारिक उपयोगिता को प्रमाणित करता है।
मूल पेपर CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/) के तहत लाइसेंस किया गया है। नीचे दिए गए पेपर की यह व्याख्या AI से तैयार की गई है। इसे लेखकों ने न तो लिखा है, न इसका समर्थन किया है। तकनीकी सटीकता के लिए मूल पेपर देखें। पूरा डिस्क्लेमर पढ़ें
कल्पना कीजिए कि आप एक सॉफ्टवेयर डेवलपर हैं। आपने अभी-अभी अपने कोड में एक बड़ी समस्या को ठीक किया है—एक "पैच" (patch)। लेकिन एक समस्या है: आप यह साबित करने के लिए टेस्ट लिखना भूल गए कि वह बग वास्तव में वहां मौजूद था और आपका समाधान वास्तव में काम कर रहा है। इस टेस्ट के बिना, वह बग बाद में फिर से वापस आ सकता है, या आप 100% सुनिश्चित नहीं हो पाएंगे कि आपका समाधान कितना ठोस है।
इन टेस्ट्स को लिखना उबाऊ और समय लेने वाला काम है, इसलिए डेवलपर्स अक्सर इन्हें छोड़ देते हैं। यहीं पर BLAST काम आता है।
BLAST क्या है?
BLAST (बग रिप्रोडक्शन वाया LLMs एंड सर्च-बेस्ड टेस्टिंग) को एक सुपर-स्मार्ट, दो-सदस्यीय जासूसी टीम के रूप में समझें जिसे आपके कोड के लिए "क्राइम सीन रिकंस्ट्रक्शन" (घटनास्थल का पुनर्निर्माण) लिखने के लिए काम पर रखा गया है।
उनका लक्ष्य एक विशिष्ट टेस्ट केस बनाना है जो एक "स्मोक डिटेक्टर" (धुआं पहचानने वाले यंत्र) की तरह काम करे:
- फिक्स से पहले: डिटेक्टर बज उठता है (टेस्ट फेल हो जाता है), जिससे यह साबित होता है कि बग मौजूद है।
- फिक्स के बाद: डिटेक्टर शांत रहता है (टेस्ट पास हो जाता है), जिससे यह साबित होता है कि बग चला गया है।
दो जासूस
BLAST केवल एक व्यक्ति पर निर्भर नहीं है; यह दो बहुत अलग प्रकार के जासूसों की एक हाइब्रिड टीम का उपयोग करता है:
1. "क्रिएटिव राइटर" (The Creative Writer - LLM)
यह जासूस एक लार्ज लैंग्वेज मॉडल (LLM) है (जैसे वह AI जिससे आप चैट करते हैं)।
- यह कैसे काम करता है: यह बग रिपोर्ट (क्राइम का विवरण) और कोड फिक्स (समाधान) को पढ़ता है। यह प्राकृतिक भाषा और संदर्भ (context) को समझने में माहिर है।
- इसकी कमजोरी: कभी-कभी, ये बहुत अधिक रचनात्मक हो जाते हैं। ये ऐसे टूल्स का आविष्कार कर सकते हैं जो अस्तित्व में ही नहीं हैं या ऐसा कोड लिख सकते हैं जो दिखने में तो अच्छा है लेकिन तुरंत क्रैश हो जाता है (हैलुसिनेशन/भ्रम)। वे एक ऐसे लेखक की तरह हैं जो कहानी तो जानता है लेकिन कभी-कभी व्याकरण के नियमों को भूल जाता है।
2. "मेथोडिकल इंजीनियर" (The Methodical Engineer - SBST)
यह जासूस सर्च-बेस्ड सॉफ्टवेयर टेस्टिंग (SBST) का उपयोग करता है। इसे एक ऐसे रोबोट के रूप में सोचें जो इनपुट के लाखों रैंडम कॉम्बिनेशन आज़माता है, जैसे कोई बंदर कीबोर्ड पर टाइप कर रहा हो, लेकिन एक बहुत ही विशिष्ट लक्ष्य के साथ।
- यह कैसे काम करता है: यह व्यवस्थित रूप से कोड को तोड़ने की कोशिश करता है। यह कोड को विफल करने का कोई भी तरीका खोजने में अविश्वसनीय रूप से सक्षम है, और यह सिंटैक्स (syntax) के नियमों का सख्ती से पालन करता है।
- इसकी कमजोरी: यह कहानी से पूरी तरह अनजान है। यदि आप उनसे सिर्फ "इस कोड को तोड़ दो" कहेंगे, तो वे इसे इस तरह तोड़ सकते हैं जिसका उस विशिष्ट बग से कोई लेना-देना नहीं है जिसकी आपको परवाह है। वे एक ऐसे मैकेनिक की तरह हैं जो किसी भी इंजन को ठीक कर सकता है लेकिन यह नहीं जानता कि आप कौन सा इंजन चला रहे हैं।
वे मिलकर कैसे काम करते हैं (जादुई सूत्र)
BLAST की प्रतिभा इस बात में है कि यह इन दोनों जासूसों को एक साथ कैसे काम करवाता है ताकि वे एक-दूसरे के रास्ते में न आएं।
चरण 1: "सीड" रणनीति (The Seed Strategy)
"क्रिएटिव राइटर" (LLM) बग रिपोर्ट पढ़ता है और एक टेस्ट का कच्चा ड्राफ्ट लिखता है। यह अपराध स्थल का एक नक्शा स्केच करने जैसा है।
- समस्या: नक्शे में गलतियाँ हो सकती हैं (गलत सड़कें, गायब इमारतें)।
- समाधान: "मेथोडिकल इंजीनियर" (SBST) इस कच्चे स्केच को लेता है और इसे साफ करता है। यह चेक करता है कि नक्शा वास्तविक शहर के नियमों (कोड) के अनुरूप है या नहीं और त्रुटियों को ठीक करता है। अब, इंजीनियर के पास एक वैध शुरुआती बिंदु है जो वास्तव में समझ में आता है।
चरण 2: "सर्च" (The Search)
"मेथोडिकल इंजीनियर" उस साफ किए गए नक्शे का उपयोग करके अपनी लाखों-प्रयासों वाली खोज शुरू करता है। क्योंकि उसने एक अच्छे सुराग (LLM के विचार) के साथ शुरुआत की है, इसलिए वह अंधेरे में खोजने के बजाय बहुत तेज़ी से विशिष्ट बग को ढूंढ लेता है।
चरण 3: "कॉन्टेक्स्ट" अदला-बदली (The Context Swap)
एक बार जब इंजीनियर एक काम करने वाला टेस्ट ढूंढ लेता है, तो वह वह टेस्ट वापस "क्रिएटिव राइटर" को दे देता है।
- क्यों? राइटर देखता है, "ओह, देखो! इंजीनियर ने कोड को तोड़ने का एक ऐसा तरीका ढूंढ लिया है जो वास्तव में काम करता है।" राइटर फिर इस वास्तविक, काम करने वाले उदाहरण का उपयोग एक बेहतर, अधिक मानव-पठनीय टेस्ट लिखने के लिए करता है।
वास्तविक दुनिया का परीक्षण: "GitHub Bot"
शोधकर्ताओं ने इसे केवल पुराने डेटा (जिसे AI ने याद कर लिया हो) के साथ लैब में टेस्ट नहीं किया। उन्होंने एक GitHub Bot बनाया और इसे तीन महीनों तक तीन वास्तविक सॉफ्टवेयर प्रोजेक्ट्स में तैनात किया।
- परिदृश्य: हर बार जब कोई डेवलपर बग को ठीक करने के लिए "पुल रिक्वेस्ट" (कोड परिवर्तन मर्ज करने का अनुरोध) खोलता था, तो बॉट जाग जाता था।
- कार्रवाई: यदि डेवलपर ने टेस्ट नहीं लिखा था, तो बॉट BLAST का उपयोग करके एक टेस्ट जेनरेट करने की कोशिश करता था।
- परिणाम:
- इसने 32 में से 11 मामलों में सफलतापूर्वक एक वैध टेस्ट जेनरेट किया।
- डेवलपर्स ने इन टेस्ट्स की समीक्षा की। 11 में से 6 मामलों में, डेवलपर्स ने कहा, "हाँ, हमें बिल्कुल इसी की ज़रूरत थी!"
- इनमें से दो टेस्ट को आधिकारिक कोड में भी शामिल (merge) किया गया।
यह क्यों महत्वपूर्ण है
BLAST से पहले, बेहतरीन टूल्स भी इन "बग-रिप्रोड्यूसिंग" टेस्ट्स को केवल 23% समय ही जेनरेट कर पाते थे। BLAST ने इसे बढ़ाकर 35% कर दिया।
लेकिन इससे भी महत्वपूर्ण बात यह है कि यह पेपर एक महत्वपूर्ण सबक उजागर करता है: केवल AI पर्याप्त नहीं है।
- यदि आप केवल "क्रिएटिव राइटर" पर भरोसा करते हैं, तो आपको भ्रम (hallucinations) मिलेंगे।
- यदि आप केवल "मेथोडिकल इंजीनियर" पर भरोसा करते हैं, तो आपको अप्रासंगिक परिणाम मिलेंगे।
- साथ मिलकर, वे एक-दूसरे की कमियों को पूरा करते हैं।
निष्कर्ष (The Takeaway)
BLAST सॉफ्टवेयर क्वालिटी के लिए एक को-पायलट की तरह है। यह मानव डेवलपर की जगह नहीं लेता है; यह उन उबाऊ, दोहराव वाले टेस्ट लिखने का भारी काम करता है जो यह साबित करते हैं कि बग ठीक हो गया है। यह AI की कल्पना को ऑटोमेटेड टेस्टिंग की सटीकता के साथ जोड़ता है ताकि हमारा सॉफ्टवेयर बग-मुक्त बना रहे, भले ही हम खुद टेस्ट लिखने के लिए बहुत थक गए हों।
अपने क्षेत्र के पेपरों की भीड़ में उलझे हुए हैं?
आपके रिसर्च कीवर्ड से मेल खाने वाले सबसे नए और अलग सोच वाले पेपरों का रोज़ाना Digest पाएँ—तकनीकी सारांश के साथ, आपकी भाषा में।