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

Reproduction Test Generation for Java SWE Issues

यह शोध पत्र TDD-Bench-Java को पेश करके जावा के लिए रिप्रोडक्शन टेस्ट जनरेशन टूल्स की कमी को संबोधित करता है, जो ओपन-सोर्स रिपॉजिटरीज़ से 250 इंस्टेंस के साथ इस कार्य के लिए पहला बेंचमार्क है, और एक अनुकूलित समाधान e-Otter++ को प्रस्तुत करता है जो इस बेंचमार्क और एक प्रोप्रायटरी इंडस्ट्री डेटासेट दोनों पर उच्च प्रदर्शन प्रदर्शित करता है।

मूल लेखक: Toufique Ahmed, Jatin Ganhotra, Avraham Shinnar, Martin Hirzel

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

मूल लेखक: Toufique Ahmed, Jatin Ganhotra, Avraham Shinnar, Martin Hirzel

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

कल्पना कीजिए कि आप एक बड़ी कंपनी में एक सॉफ्टवेयर डिटेक्टिव (जासूस) के रूप में काम कर रहे हैं। एक यूजर ने बग की रिपोर्ट दी है: "हे, जब मैं इस बटन पर क्लिक करता हूँ, तो ऐप क्रैश हो जाता है!" कोड को ठीक करने से पहले, आपको यह साबित करना होगा कि वह बग वास्तव में मौजूद है। आप एक छोटा, ऑटोमेटेड टेस्ट स्क्रिप्ट लिखते हैं जो उस बटन को क्लिक करने की कोशिश करता है। यदि स्क्रिप्ट क्रैश हो जाती है, तो आपने बग की पुष्टि कर ली है। एक बार जब आप कोड को ठीक कर देते हैं, तो आप स्क्रिप्ट को फिर से चलाते हैं; यदि अब यह पूरी तरह से काम करता है, तो आप जानते हैं कि फिक्स असली है।

यह पेपर इस बारे में है कि AI को स्वचालित रूप से ऐसे विशिष्ट "बग-हंटिंग" (बग खोजने वाले) स्क्रिप्ट लिखना कैसे सिखाया जाए, लेकिन एक ट्विस्ट के साथ: यह Java के लिए किया जा रहा है, जो कि एक ऐसी प्रोग्रामिंग भाषा है जिसका उपयोग बड़ी कंपनियां करती हैं, जबकि पिछले अधिकांश AI टूल्स मुख्य रूप से केवल Python के लिए अच्छी तरह काम करते थे।

यहाँ उनके काम का विवरण रोजमर्रा के उदाहरणों (analogies) का उपयोग करके दिया गया है:

1. समस्या: गायब "बग हंटर" (Bug Hunter)

सॉफ्टवेयर की दुनिया में, ये बग-हंटिंग टेस्ट लिखना उबाऊ होता है और अक्सर इसे छोड़ दिया जाता है। हाल ही में, AI ने Python (एक लोकप्रिय भाषा जो स्टार्टअप्स और डेटा साइंस के लिए है) के लिए उन्हें लिखने में महारत हासिल कर ली है। लेकिन Java कॉर्पोरेट जगत की "भारी मशीनरी" (बड़ी कंपनियां, एयरलाइंस, बिग टेक) है। AI, Java के लिए संघर्ष कर रहा था क्योंकि यह अधिक कठोर और जटिल है।

लेखक कहते हैं, "हमें Java में बग खोजने के लिए AI को बेहतर बनाने का एक बेहतर तरीका चाहिए।"

2. नया नक्शा: TDD-Bench-Java

AI को प्रशिक्षित करने और परीक्षण करने के लिए, उन्हें एक नक्शे की आवश्यकता थी। उन्होंने TDD-Bench-Java नामक एक नया बेंचमार्क बनाया।

  • उदाहरण (Analogy): इसे AI के लिए एक विशाल "जिम" के रूप में सोचें। इसमें प्रसिद्ध ओपन-सोर्स Java प्रोजेक्ट्स से 250 वास्तविक दुनिया के बग रिपोर्ट्स शामिल हैं। प्रत्येक "वर्कआउट" में एक बग का विवरण और फिक्स से पहले का कोड होता है। AI का काम एक ऐसा टेस्ट लिखना है जो टूटे हुए कोड पर फेल हो जाए और फिक्स होने के बाद पास हो जाए।
  • यह क्यों महत्वपूर्ण है: इससे पहले, ऐसा कोई मानकीकृत तरीका नहीं था जिससे यह देखा जा सके कि क्या AI वास्तव में Java के लिए यह कर सकता है। यह बेंचमार्क अपने आप में पहला है।

3. समाधान: e-Otter++ (स्मार्ट डिटेक्टिव)

उन्होंने एक मौजूदा AI डिटेक्टिव e-Otter (जो Python के लिए बहुत अच्छा था) को लिया और उसे Java का मेकओवर दिया, जिसे अब e-Otter++ कहा गया।

यह AI डिटेक्टिव स्टेप-बाय-स्टेप एक केस को कैसे सुलझाता है, यहाँ देखें:

  • स्टेप 1: लोकलाइज़र (अपराध स्थल का पता लगाना)
    AI बग रिपोर्ट और विशाल कोडबेस को देखता है। उसे अनुमान लगाना होता है कि समस्या कहाँ छिपी हुई है। यह एक जासूस की तरह है जो किसी शहर के नक्शे और अपराध के अस्पष्ट विवरण को देखकर यह अनुमान लगाता है कि जांच के लिए कौन सी विशिष्ट इमारत और कमरा देखना है।

    • Java ट्विस्ट: Java में, आपको अक्सर एक पूरा नया टेस्ट फ़ाइल बनाना पड़ता है। AI को यह पता लगाना होता है कि इस नई फ़ाइल को ठीक कहाँ रखा जाए ताकि बिल्डिंग की संरचना न टूटे।
  • स्टेप 2: कॉन्टेक्स्टुअलाइज़र (सुराग इकट्ठा करना)
    एक बार जब वह स्थान जान लेता है, तो वह सही टूल्स (imports) इकट्ठा करता है और दृश्य को सेट करता है (पैकेज नाम)। यह एक जासूस की तरह है जो कमरे में प्रवेश करने से पहले यह सुनिश्चित करता है कि उनके पास सही बैज और सही फ्लोर प्लान है।

  • स्टेप 3: इनिशियल टेस्ट जनरेटर (पहला प्रयास करना)
    AI एक ड्राफ्ट टेस्ट स्क्रिप्ट लिखता है। यह एक रफ स्केच है।

  • स्टेप 4: रिफ़ाइनर (फीडबैक लूप)
    यही असली सफलता का मंत्र है। AI अपने स्वयं के टेस्ट को टूटे हुए कोड पर चलाता है।

    • परिदृश्य A: टेस्ट क्रैश हो जाता है, लेकिन गलत कारण से (जैसे, टेस्ट इसलिए क्रैश हुआ क्योंकि टाइपो/स्पेलिंग की गलती थी, न कि बग के कारण)।
    • द फिक्स: AI एरर मैसेज को देखता है, अपनी गलती को समझता है, टेस्ट को फिर से लिखता है, और फिर से प्रयास करता है। यह 10 बार तक ऐसा कर सकता है, हर विफलता से सीखता है, जब तक कि वह एक ऐसा टेस्ट न ढूंढ ले जो ठीक उसी बग के कारण क्रैश होता है जिसकी रिपोर्ट की गई थी।
  • स्टेप 5: हेट्रोजेनियस प्रॉम्प्टिंग (एक ही सवाल को 6 अलग तरीकों से पूछना)
    यह सुनिश्चित करने के लिए कि वे समाधान मिस न करें, AI बग रिपोर्ट को छह अलग-अलग तरीकों से फिर से लिखता है (सरल बनाना, भ्रमित करने वाले कोड को हटाना, "हिंट" जोड़ना, आदि) और छह अलग-अलग टेस्ट उम्मीदवार तैयार करता है। यह छह अलग-अलग जासूसों से एक ही केस को अलग-अलग दृष्टिकोणों से सुलझाने के लिए कहने जैसा है।

  • स्टेप 6: सेलेक्टर (विजेता चुनना)
    अंत में, एक "जज" AI उन सभी छह उम्मीदवारों को देखता है और सबमिट करने के लिए सबसे अच्छा एकल टेस्ट चुनता है।

4. परिणाम: यह कितना अच्छा है?

  • पब्लिक जिम (TDD-Bench-Java) पर: AI लगभग 44% से 46% बार सफल रहा। इसका मतलब है कि उसने लगभग आधे मामलों में बग को पकड़ने और फिक्स की पुष्टि करने वाला टेस्ट सफलतापूर्वक लिखा। इतने कठिन कार्य के लिए यह एक मजबूत परिणाम माना जाता है।
  • "असली दुनिया" (प्रोपराइटरी डेटा) पर: लेखकों ने इसे अपनी निजी कंपनी (IBM) के 150 बग्स पर भी टेस्ट किया।
    • चुनौती: ये बग्स कठिन थे। विवरण छोटे, अस्पष्ट थे, और अक्सर उन नई फाइलों के निर्माण से जुड़े थे जो अभी तक मौजूद ही नहीं थीं।
    • परिणाम: बिना मदद के, AI केवल 4% बार सफल हुआ।
    • समाधान: जब उन्होंने AI को एक "हिंट" दिया (उसे उन नई फाइलों के नाम बताना जिन्हें उसे बनाना था), तो सफलता दर बढ़कर 20% हो गई।

5. निष्कर्ष (Takeaway)

पेपर यह निष्कर्ष निकालता है कि हालांकि AI, Java के लिए बग-हंटिंग टेस्ट लिखने में बेहतर हो रहा है, लेकिन वह ओपन-सोर्स प्रोजेक्ट्स में मिलने वाले साफ-सुथरे डेटा की तुलना में कॉर्पोरेट सॉफ्टवेयर की उलझी हुई और अस्पष्ट वास्तविकता के साथ संघर्ष कर रहा है।

संक्षेप में: उन्होंने एक नया प्रशिक्षण मैदान (TDD-Bench-Java) बनाया और एक स्मार्ट डिटेक्टिव (e-Otter++) तैयार किया जो अब Java कोड में बग ढूंढ सकता है। यह मानक समस्याओं के लिए अच्छा काम करता है लेकिन जब सुराग अस्पष्ट हों या कोड बिल्कुल नया हो, तो इसे अभी भी थोड़े मानवीय सहयोग (हिंट्स) की आवश्यकता होती है।

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

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

Digest आज़माएँ →