Fuzzing with Agents? Generators Are All You Need
यह शोध पत्र Gentoo को प्रस्तुत करता है, जो एक ऐसा फ्रेमवर्क है जो जावा लाइब्रेरीज़ के लिए अत्यधिक प्रभावी, डोमेन-विशिष्ट इनपुट जनरेटरों को स्वचालित रूप से संश्लेषित करने के लिए AI कोडिंग एजेंटों का लाभ उठाता है, यह प्रदर्शित करते हुए कि एजेंट-निर्मित जनरेटर मानव-लिखित बेसलाइन की तुलना में बेहतर ब्रांच कवरेज प्राप्त करते हैं और पारंपरिक कवरेज-गाइडेड म्यूटेशन रणनीतियों को काफी हद तक अनावश्यक बना देते हैं।
मूल पेपर CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/) के तहत लाइसेंस किया गया है। नीचे दिए गए पेपर की यह व्याख्या AI से तैयार की गई है। इसे लेखकों ने न तो लिखा है, न इसका समर्थन किया है। तकनीकी सटीकता के लिए मूल पेपर देखें। पूरा डिस्क्लेमर पढ़ें
यहाँ एक शोध पत्र "Fuzzing with Agents? Generators Are All You Need" का सरल भाषा और रचनात्मक उपमाओं (analogies) के साथ अनुवाद दिया गया है।
मुख्य विचार: डार्ट फेंकने के बजाय एक मास्टर शेफ को काम पर रखना
कल्पना कीजिए कि आप एक जटिल सॉफ़्टवेयर प्रोग्राम (जैसे कोई वीडियो गेम या बैंकिंग ऐप) में बग्स (खामियां) खोजना चाहते हैं। इसे करने का पारंपरिक तरीका "Fuzzing" कहलाता है।
पुराना तरीका (डार्ट फेंकने वाला):
कल्पना कीजिए कि आप एक बंद तिजोरी खोलने की कोशिश कर रहे हैं। पारंपरिक तरीका यह है कि आप पीछे खड़े हो जाएं और तिजोरी पर हजारों रैंडम डार्ट (तीर) फेंकें। अधिकांश डार्ट दरवाजे से टकराकर वापस आ जाते हैं। कभी-कभी, एक डार्ट हैंडल पर लगता है, दरवाजा थोड़ा सा खुलता है, और आपको कुछ पता चलता है। यह "कवरेज-गाइडेड फज़िंग" (Coverage-Guided Fuzzing) है। यह प्रभावी तो है, लेकिन धीमा है और किस्मत पर निर्भर करता है। तिजोरी के गहरे, छिपे हुए रहस्यों तक पहुँचने के लिए आपको बहुत सारे डार्ट्स (म्यूटेशन) की आवश्यकता होती है।
नया तरीका (मास्टर शेफ):
यह शोध पत्र एक अलग दृष्टिकोण प्रस्तावित करता है। रैंडम डार्ट फेंकने के बजाय, आप एक मास्टर शेफ (AI एजेंट) को काम पर रखते हैं जो ठीक जानता है कि तिजोरी कैसे काम करती है। आप शेफ को बताते हैं, "मुझे एक ऐसी चाबी चाहिए जो इस विशिष्ट लॉक में फिट हो सके।" शेफ लॉक के ब्लूप्रिंट का अध्ययन करता है, उसके पुर्जों (tumblers) को समझता है, और शून्य से एक "परफेक्ट की" (चाबी) बनाता है।
शोध पत्र पूछता है: क्या एक AI एजेंट इतना अच्छा "परफेक्ट की जनरेटर" बना सकता है कि हमें अब रैंडम डार्ट फेंकने की ज़रूरत ही न पड़े?
इसका उत्तर है: हाँ।
यह कैसे काम करता है: "Gentoo" सिस्टम
शोधकर्ताओं ने एक सिस्टम बनाया जिसे वे Gentoo कहते हैं (पेंगुइन के नाम पर, लेकिन यहाँ इसका अर्थ है "Generate the Generator")। यहाँ बताया गया है कि AI एजेंट चरण-दर-चरण कैसे काम करता है:
- ब्रीफिंग (Briefing): AI को उस सॉफ़्टवेयर का सोर्स कोड दिया जाता है जिसका उसे परीक्षण करना है और एक टर्मिनल (कमांड लाइन) दिया जाता है ताकि वह टेस्ट चला सके।
- मिशन (Mission): AI का काम एक कंप्यूटर प्रोग्राम (एक "जनरेटर") लिखना है जो ऐसे इनपुट्स (जैसे नकली यूजर डेटा) बनाता है जो विशेष रूप से सॉफ़्टवेयर को तोड़ने के लिए डिज़ाइन किए गए हों।
- फीडबैक लूप (Feedback Loop):
- AI एक जनरेटर लिखता है।
- वह सॉफ़्टवेयर के खिलाफ उस जनरेटर को चलाता है।
- वह परिणामों को देखता है। क्या वह सामने के दरवाजे को पार कर पाया? क्या वह अंदर की तिजोरी तक पहुँच पाया?
- सीक्रेट सॉस (Secret Sauce): सिस्टम AI को एक "हाइलाइटर" देता है। यह कोड की उन विशिष्ट लाइनों (predicates) की ओर इशारा करता है जिन्हें AI के जनरेटर को ट्रिगर करने में असफल रहा।
- उदाहरण: "आपने 1,000 प्रोग्राम जेनरेट किए, लेकिन उनमें से किसी में भी 'Class A' नहीं था जो 'Class B' से इनहेरिट (inherit) करता हो। वह विशिष्ट संयोजन ही गुप्त कमरे को खोलता है। अपने जनरेटर को ठीक करें।"
- सुधार (Refinement): AI फीडबैक पढ़ता है, अपने जनरेटर को फिर से लिखता है ताकि वह विशेष रूप से उस "Class A + Class B" वाले परिदृश्य को बना सके, और फिर से प्रयास करता है।
तीन प्रयोग
शोधकर्ताओं ने यह देखने के लिए कि उन्हें कितनी मदद की आवश्यकता है, तीन अलग-अलग वर्ज़न का परीक्षण किया:
- Gentoo-Base (सहज कलाकार - The Intuitive Artist): AI को बस "एक अच्छा जनरेटर लिखें" कहा जाता है और कच्चे टेस्ट परिणामों को देखने के लिए कहा जाता है। उसे खुद ही समझना पड़ता है कि क्या गायब है।
- Gentoo-S (सांख्यिकीविद् - The Statistician): AI को एक पहले से गणना किया गया मैप दिया जाता है जो दिखाता है कि कोड के कौन से हिस्से "पहुंचने में सबसे कठिन" हैं (इसे डोमिनेटर एनालिसिस नामक गणितीय अवधारणा का उपयोग करके दिखाया जाता है)। यह उन विशिष्ट क्षेत्रों पर ध्यान केंद्रित करता है।
- Gentoo-L (जासूस - The Detective): AI को खुद कोड पढ़ने के लिए कहा जाता है और यह तय करने के लिए कहा जाता है, "हे, मुझे लगता है कि ये विशिष्ट लाइनें पहुँचने में कठिन हैं।" यह अपने स्वयं के तर्क का उपयोग करके लक्ष्यों को चुनता है।
आश्चर्यजनक परिणाम
टीम ने इन AI एजेंटों का परीक्षण 7 वास्तविक दुनिया की जावा लाइब्रेरीज़ (जैसे JSON पार्सर, कम्प्रेशन टूल्स और कंपाइलर) पर किया और उनकी तुलना मानव विशेषज्ञों द्वारा लिखे गए जनरेटर्स से की।
1. AI जनरेटर्स बेहतर थे (ज्यादातर मामलों में)
7 में से 4 मामलों में, AI द्वारा बनाए गए प्रोग्रामों ने मानव-लिखित प्रोग्रामों की तुलना में अधिक बग्स खोजे और अधिक कोड कवर किया। AI जटिल नियमों (जैसे "यह वेरिएबल संख्याओं की एक लिस्ट होना चाहिए, टेक्स्ट नहीं") को समझने और उन नियमों को पूरी तरह से संतुष्ट करने के लिए इनपुट्स बनाने में सक्षम था।
2. "डार्ट फेंकने" की आवश्यकता नहीं थी
यह सबसे महत्वपूर्ण खोज है।
- मानव जनरेटर्स के लिए: जब इंसानों ने जनरेटर लिखे, तो वे अक्सर "बेवकूफ" (dumb) थे। उन्हें सही इनपुट तक पहुँचने के लिए "डार्ट फेंकने" (कवरेज-गाइडेड म्यूटेशन) की मदद की आवश्यकता थी। रैंडम म्यूटेशन के बिना, मानव जनरेटर विफल हो गया।
- AI जनरेटर्स के लिए: AI ने इतना स्मार्ट जनरेटर बनाया कि उसे "डार्ट फेंकने" की बिल्कुल भी ज़रूरत नहीं पड़ी। जनरेटर इतना सटीक था कि वह सीधे गहरे कोड तक पहुँच गया। रैंडम म्यूटेशन जोड़ने से वास्तव में ज्यादा मदद नहीं मिली।
उपमा (Analogy):
- मानव जनरेटर: एक अंधा व्यक्ति जो लाइब्रेरी में एक विशिष्ट किताब खोजने की कोशिश कर रहा है। उसे सही दिशा में धकेलने के लिए एक गाइड (फज़र) की आवश्यकता होती है।
- AI जनरेटर: एक लाइब्रेरियन जो डेवी डेसिमल सिस्टम (Dewey Decimal system) को पूरी तरह से जानता है। वह सीधे किताब तक जाता है। उसे किसी के धकेलने की ज़रूरत नहीं है।
3. "मैप" उतना महत्वपूर्ण नहीं था जितना कि आप सोचते हैं
चाहे AI ने पूर्व-निर्धारित मैप (Gentoo-S) का उपयोग किया हो या खुद इसे खोजा हो (Gentoo-L), उन्होंने लगभग समान प्रदर्शन किया। AI इतना स्मार्ट था कि वह कठिन हिस्सों को खुद ही समझ सकता था।
एक विफलता का मामला (The "BCEL" सबक)
एक लाइब्रेरी (BCEL) थी जहाँ AI बुरी तरह विफल रहा। मानव जनरेटर ने इनपुट्स आसानी से बनाने के लिए लाइब्रेरी द्वारा प्रदान किए गए एक विशेष "हाई-लेवल टूल" का उपयोग किया। हालाँकि, AI ने कच्चे कोड का उपयोग करके शून्य से इनपुट्स बनाने की कोशिश की, जैसे कि असेंबली लाइन टूल्स का उपयोग करने के बजाय हर एक बोल्ट को खुद बनाना।
- सबक: AI महान है, लेकिन कभी-कभी वह स्पष्ट शॉर्टकट (जैसे कि लाइब्रेरी का अपना API उपयोग करना) को मिस कर देता है, जिसे एक इंसान तुरंत पहचान लेता।
यह क्यों मायने रखता है
यह शोध पत्र सॉफ़्टवेयर परीक्षण के तरीके में एक बड़े बदलाव का सुझाव देता है:
- पुराना फोकस: "हम अपने म्यूटेशन इंजन को और स्मार्ट कैसे बना सकते हैं? हम डार्ट्स बेहतर तरीके से कैसे फेंक सकते हैं?"
- नया फोकस: "हम बेहतर जनरेटर्स कैसे बना सकते हैं?"
यदि हम AI का उपयोग परफेक्ट, डोमेन-विशिष्ट जनरेटर्स लिखने के लिए कर सकते हैं जो सॉफ़्टवेयर के नियमों को समझते हैं, तो हमें जटिल फज़िंग इंजन की आवश्यकता ही नहीं पड़ सकती है। जनरेटर सारा भारी काम करता है।
निष्कर्ष (The Takeaway)
कल्पना कीजिए कि आप घर में घुसने की कोशिश कर रहे हैं।
- पुराना तरीका: आप चाबियों के एक विशाल छल्ले में से हर चाबी आज़माते हैं, इस उम्मीद में कि कोई एक फिट हो जाए।
- नया तरीका: आप एक AI ताला बनाने वाले (locksmith) को काम पर रखते हैं। AI ताले का अध्ययन करता है, तंत्र को समझता है, और ठीक वैसी ही चाबी 3D प्रिंट करता है जिसकी आपको आवश्यकता है। एक बार जब आपके पास वह चाबी आ जाती है, तो आपको 1,000 अन्य चाबियाँ आज़माने की ज़रूरत नहीं होती। आप बस हैंडल घुमाते हैं।
यह शोध पत्र सिद्ध करता है कि AI एजेंट वह ताला बनाने वाले बन सकते हैं, और वे इतने अच्छे हैं कि वे पुराने "हर-चाबी-को-आज़माने" वाले तरीके को लगभग अप्रचलित बना देते हैं।
अपने क्षेत्र के पेपरों की भीड़ में उलझे हुए हैं?
आपके रिसर्च कीवर्ड से मेल खाने वाले सबसे नए और अलग सोच वाले पेपरों का रोज़ाना Digest पाएँ—तकनीकी सारांश के साथ, आपकी भाषा में।