← नवीनतम पेपर
🤖 AI

Evaluating LLM-Based Test Generation Under Software Evolution

यह बड़े पैमाने पर किया गया अनुभवजन्य अध्ययन यह प्रकट करता है कि जहाँ LLMs स्थिर कोड के लिए उच्च गुणवत्ता वाले यूनिट टेस्ट उत्पन्न करते हैं, वहीं उनका प्रदर्शन अर्थ-परिवर्तक (semantic-altering) और अर्थ-संरक्षण करने वाले (semantic-preserving) दोनों प्रकार के कोड परिवर्तनों के तहत काफी कम हो जाता है, जो वास्तविक अर्थपूर्ण तर्क या प्रतिगमन जागरूकता (regression awareness) के बजाय सतही पैटर्न पर अत्यधिक निर्भरता को दर्शाता है।

मूल लेखक: Sabaat Haroon, Mohammad Taha Khan, Muhammad Ali Gulzar

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

मूल लेखक: Sabaat Haroon, Mohammad Taha Khan, Muhammad Ali Gulzar

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

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

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

बड़ा सवाल यह है जो यह पेपर पूछता है: जब आप उस संशोधित नुस्खे को अपने सहायक को देते हैं, तो क्या वह वास्तव में नए निर्देशों को समझता है, या वह केवल उसी पुराने नुस्खे के लिए चेकलिस्ट लिखना जारी रखता है क्योंकि उसने उसे पहले देखा था?

यहाँ शोधकर्ताओं ने जो पाया है, उसे सरल भाषा में समझाया गया है:

1. "पैरट" (तोते) वाली समस्या

शोधकर्ताओं ने 8 अलग-अलग AI मॉडल का परीक्षण किया (जैसे कि उन्नत संस्करण जिन्हें आप जानते होंगे)। उन्होंने पाया कि जब कोड (नुस्खा) बिल्कुल नया और अपरिवर्तित होता है, तो AI अद्भुत प्रदर्शन करता है। वे हर कदम को पकड़ने वाली एक सटीक चेकलिस्ट लिखते हैं।

हालाँकि, जैसे ही कोड बदलता है, AI एक शेफ के बजाय एक तोते की तरह व्यवहार करने लगता है।

  • परिदृश्य: आप नुस्खे को बदलते हैं ताकि इसमें 10 के बजाय केवल 9 अंडे इस्तेमाल हों।
  • AI की प्रतिक्रिया: AI एक चेकलिस्ट लिखता है जिसमें लिखा होता है, "जांचें कि केक में 10 अंडे हैं।"
  • परिणाम: चेकलिस्ट नए नुस्खे पर विफल हो जाती है, लेकिन यह पुराने नुस्खे पर पास हो जाती। AI ने नए निर्देशों को पढ़ा ही नहीं; उसने बस अपने ट्रेनिंग डेटा से पुराने निर्देशों को याद कर लिया।

2. "ट्वीक्स" (बदलावों) के दो प्रकार

शोधकर्ताओं ने यह देखने के लिए दो प्रकार के बदलावों का परीक्षण किया कि AI कैसे प्रतिक्रिया देता है:

A. "मीनिंग चेंज" (अर्थ बदलने वाला)

यह तब होता है जब आप वास्तव में प्रोग्राम के काम करने के तरीके को बदल देते हैं।

  • उपमा: ट्रैफिक लाइट को "हरा मतलब जाओ" से बदलकर "हरा मतलब रुको" कर देना।
  • AI की विफलता: AI अक्सर इसे अनदेखा कर देता है। वह "हरा मतलब जाओ" के लिए चेकलिस्ट लिखना जारी रखता है। भले ही कोड अलग है, AI उन पैटर्न पर इतना केंद्रित है जो उसने पहले देखे थे कि वह पुराने नियमों को ही सच मान लेता है (hallucinate करता है)।
  • आंकड़ा: जब अर्थ बदला गया, तो AI की टेस्ट पास रेट 100% से गिरकर लगभग 66% हो गई। इससे भी बुरा यह है कि, 99% टेस्ट जो नए कोड पर फेल हुए, वे वास्तव में पुराने कोड पर पास हो जाते। यह साबित करता है कि AI अतीत में अटका हुआ था।

B. "कॉस्मेटिक चेंज" (दिखावटी बदलाव)

यह तब होता है जब आप कोड के दिखने के तरीके को बदलते हैं लेकिन उसके काम करने के तरीके को नहीं।

  • उपमा: किसी वेरिएबल का नाम count से बदलकर total कर देना, या एक कमेंट जोड़ देना कि "चम्मच को न खाएं।" लॉजिक बिल्कुल समान है, लेकिन शब्द अलग हैं।
  • AI की विफलता: आश्चर्यजनक रूप से, AI इन बड़े बदलावों की तुलना में इन छोटे बदलावों से अधिक भ्रमित हो गया!
  • क्यों? AI कोड की "सतह" (surface) के प्रति जुनूनी है। यदि आप किसी वेरिएबल का नाम बदलते हैं, तो AI सोचता है, "ओह, यह तो बिल्कुल अलग प्रोग्राम है!" और अपनी पुरानी, सटीक चेकलिस्ट को छोड़कर शुरू से एक नई, खराब चेकलिस्ट बनाना शुरू कर देता है।
  • आंकड़ा: भले ही प्रोग्राम ने बिल्कुल वही काम किया, लेकिन केवल कुछ शब्दों को बदलने के कारण AI की टेस्ट पास रेट गिरकर 79% हो गई।

3. "स्कैटरशॉट" (बिखराव वाली) रणनीति

जब AI भ्रमित होता है, तो वह गहराई से सोचने की कोशिश नहीं करता। इसके बजाय, वह घबरा जाता है और "ब्रूट फोर्स" (ज़ोर-ज़बरदस्ती) के जरिए रास्ता खोजने की कोशिश करता है।

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

4. मुख्य निष्कर्ष

पेपर यह निष्कर्ष निकालता है कि वर्तमान AI टेस्ट जनरेटर सतही (superficial) हैं।

  • वे उन पैटर्न को कॉपी करने में माहिर हैं जो उन्होंने पहले देखे हैं।
  • वे यह समझने में बहुत खराब हैं कि कोड क्यों काम करता है या कैसे बदलता है।
  • वे छोटे कॉस्मेटिक बदलावों (जैसे वेरिएबल का नाम बदलना) से आसानी से धोखा खा जाते हैं और अक्सर बड़े कार्यात्मक (functional) बदलावों को नोटिस करने में विफल रहते हैं।

संक्षेप में: यदि आप अपने सॉफ़्टवेयर के लिए टेस्ट लिखने के लिए AI का उपयोग करते हैं, और फिर आप अपने सॉफ़्टवेयर को अपडेट करते हैं, तो AI आपको ऐसी चेकलिस्ट दे सकता है जो आपके नए वर्ज़न के लिए पूरी तरह से गलत है, भले ही वह कागज़ पर एकदम सही दिखे। वह आपके कोड के बारे में "तर्क" (reasoning) नहीं कर रहा है; वह बस उस चीज़ को "याद" कर रहा है जो वह अपने पिछले ट्रेनिंग डेटा के आधार पर सोचता है कि आपके कोड को कैसा दिखना चाहिए।

यह क्यों मायने रखता है

वास्तविक दुनिया में, सॉफ़्टवेयर हमेशा बदलता रहता है। डेवलपर्स लगातार बग्स ठीक करते हैं, नए फीचर्स जोड़ते हैं और कोड को रिफैक्टर (refactor) करते हैं। यदि हम इन बदलावों के लिए सुरक्षा जाँच (टेस्ट) लिखने के लिए AI पर भरोसा करते हैं, और AI यह नहीं बता पाता कि एक "नया फीचर" और "नाम बदला गया वेरिएबल" में क्या अंतर है, तो हम ऐसे क्रिटिकल बग्स को मिस कर सकते हैं जो हमारे ऐप्स को क्रैश कर सकते हैं या सुरक्षा संबंधी समस्याएं पैदा कर सकते हैं।

शोधकर्ता सुझाव देते हैं कि इसे ठीक करने के लिए, हमें AI को केवल कच्चे कोड (raw code) को देखने और अंदाज़ा लगाने के बजाय, बदलावों (the "diff") को देखने और उनके पीछे के इरादे (intent) को समझने के लिए सिखाने की आवश्यकता है।

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

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

Digest आज़माएँ →