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

Investigating the application of differential fuzzing to support the identification and suppression of equivalent mutants: An experimental study

यह प्रयोगात्मक अध्ययन प्रदर्शित करता है कि डिफरेंशियल फज़िंग (differential fuzzing) विविध वास्तविक दुनिया के सॉफ़्टवेयर प्रोजेक्ट्स में समान म्यूटेंट्स (equivalent mutants) को कुशलतापूर्वक पहचानने और दबाने के लिए एक व्यावहारिक, भाषा-अज्ञेय (language-agnostic) दृष्टिकोण है, जो पारंपरिक टेस्ट सूट्स को मजबूत करने के लिए कार्रवाई योग्य इनपुट्स उत्पन्न करते हुए लगभग पूर्ण म्यूटेशन स्कोर प्राप्त करता है।

मूल लेखक: Bruno Ely Reis Garcia, Simone do Rocio Senger de Souza

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

मूल लेखक: Bruno Ely Reis Garcia, Simone do Rocio Senger de Souza

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

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

साथ ही, 'फज़िंग' (fuzzing) नामक एक अन्य परीक्षण विधि सुरक्षा खामियों को खोजने के लिए एक मानक उपकरण बन गई है। फज़िंग एक प्रोग्राम को भारी मात्रा में रैंडम या विकृत डेटा खिलाकर यह देखने का काम करती है कि क्या वह क्रैश होता है। प्रोग्राम को बंद करने वाली बग्स को खोजने में प्रभावी होने के बावजूद, पारंपरिक फज़िंग अक्सर उन सूक्ष्म त्रुटियों को छोड़ देती है जो बिना क्रैश हुए प्रोग्राम के गणना या व्यवहार को बदल देती हैं। साओ पाउलो विश्वविद्यालय के शोधकर्ताओं द्वारा एक नया अध्ययन इन दोनों दुनियाओं को मिलाने का एक तरीका तलाशता है। उन्होंने 'डिफरेंशियल फज़िंग' (differential fuzzing) नामक एक तकनीक की जांच की, जो मूल प्रोग्राम और एक छोटी त्रुटि वाले संस्करण को अगल-बगल चलाती है, उन्हें बिल्कुल समान डेटा खिलाती है और परिणामों की तुलना करती है। यदि दोनों संस्करण अलग-अलग आउटपुट देते हैं, तो त्रुटि पकड़ी जाती है। शोधकर्ता यह देखना चाहते थे कि क्या यह दृष्टिकोण उन मायावी 'इक्विवेलेंट म्यूटेंट्स' को स्वचालित रूप से पहचान सकता है और क्या वह ऐसा किसी इंसान की तुलना में बहुत तेज़ी से कर सकता है।

इस विचार का परीक्षण करने के लिए, टीम ने चार अलग-अलग प्रोग्रामिंग भाषाओं (C++, C, Go, और Python) में लिखे गए चार प्रसिद्ध ओपन-सोर्स सॉफ्टवेयर प्रोजेक्ट्स के छह विशिष्ट फंक्शन्स को चुना। इन प्रोजेक्ट्स में बिटकॉइन कोर (एक क्रिप्टोकरेंसी प्रोटोकॉल), ओपनएसएसएल (एक क्रिप्टोग्राफी लाइब्रेरी), एलएनडी (एक पेमेंट चैनल नेटवर्क), और एरो (एक डेट एंड टाइम लाइब्रेरी) शामिल थे। एक ऐसे टूल का उपयोग करके जो किसी भी प्रोग्रामिंग भाषा के लिए त्रुटियाँ उत्पन्न कर सकता है, उन्होंने इन फंक्शन्स के 1,090 वैध रूपांतर बनाए। स्वचालित परीक्षण शुरू करने से पहले, शोधकर्ताओं ने स्पष्ट रूप से 'इक्विवेलेंट' त्रुटियों को हटाने के लिए मैन्युअल रूप से उनकी जांच की, जिससे चुनौतीपूर्ण मामलों का एक सेट बचा ताकि यह देखा जा सके कि स्वचालित प्रणाली बाकी को पहचान सकती है या नहीं। इसके बाद उन्होंने इन त्रुटियों पर पांच अलग-अलग परीक्षण परिदृश्य चलाए, जिनमें मानक यूनिट टेस्ट से लेकर प्रति त्रुटि पांच मिनट के समय-सीमित फज़िंग सत्र तक शामिल थे।

परिणामों ने दिखाया कि पारंपरिक फज़िंग, जो केवल क्रैश को देखती है, सबसे कम प्रभावी तरीका था, क्योंकि इसने बहुत कम त्रुटियों को पकड़ा। इसके विपरीत, डिफरेंशियल फज़िंग दृष्टिकोण उल्लेखनीय रूप से शक्तिशाली साबित हुआ। प्रत्येक त्रुटि को टेस्ट करने के लिए पांच मिनट की समय सीमा दिए जाने पर, इस पद्धति ने छह में से पांच फंक्शन्स में त्रुटियों की सफलतापूर्वक पहचान की और उनके व्यवहार की पुष्टि की, जिससे 98 से 100 प्रतिशत की सफलता दर प्राप्त हुई। जिस एक फंक्शन में इसे शुरू में संघर्ष करना पड़ा, वहां शोधकर्ताओं ने पाया कि अपेक्षित कीवर्ड्स की एक सरल सूची जोड़ने से सिस्टम को इनपुट समझने में मदद मिली, जिससे अंततः एक परफेक्ट स्कोर तक पहुँचना संभव हुआ। अध्ययन ने यह भी खुलासा किया कि इन त्रुटियों को खोजने में लगने वाला समय आश्चर्यजनक रूप से कम था; औसतन, सिस्टम ने लगभग 30 सेकंड में अंतर खोज लिया, जो एक इंसान द्वारा एक सिंगल केस का मैन्युअल विश्लेषण करने में लगने वाले 15 मिनटों की तुलना में बहुत तेज़ है।

केवल त्रुटियों को खोजने के अलावा, शोधकर्ताओं ने पाया कि फज़िंग प्रक्रिया के दौरान उपयोग किए गए डेटा में छिपी हुई वैल्यू थी। इनपुट का वह संग्रह जिसे फज़िंग टूल द्वारा उत्पन्न किया गया था, जिसे 'सीड कॉर्पस' (seed corpus) कहा जाता है, में विशिष्ट टेस्ट केस शामिल थे जिन्हें मानक यूनिट टेस्ट मिस कर गए थे। ये इनपुट उन म्यूटेंट्स को खत्म करने में सक्षम थे जिन्हें पारंपरिक टेस्ट सुइट्स नहीं पकड़ सके। यह सुझाव देता है कि सुरक्षा टीमों द्वारा पहले से ही उत्पन्न किए जा रहे डेटा का पुन: उपयोग नियमित टेस्ट सुइट्स को मजबूत करने के लिए किया जा सकता है, जिससे सुरक्षा परीक्षण के उपोत्पाद को सामान्य सॉफ्टवेयर गुणवत्ता के संसाधन में बदला जा सकता है। अध्ययन ने यह भी विश्लेषण किया कि सबसे कठिन-से-पकड़ने वाली त्रुटियों को खोजने में कितना समय लगा, और पाया कि हालांकि अधिकांश जल्दी मिल गईं, कुछ को काफी अधिक समय की आवश्यकता थी और इसमें एक पैटर्न दिखा जहाँ कठिनाई बहुत अधिक भिन्न थी, ठीक वैसे ही जैसे कुछ कार्यों में थोड़ा अधिक समय लगता है जबकि अन्य में बहुत लंबा समय लगता है।

शोधकर्ताओं ने निष्कर्ष निकाला कि डिफरेंशियल फज़िंग इन कठिन त्रुटियों के वर्गीकरण के लिए समर्थन करने का एक व्यावहारिक, भाषा-तटस्थ तरीका प्रदान करता है। इसके लिए जटिल नए टूल्स या भाषा-विशिष्ट सेटअप की आवश्यकता नहीं है, क्योंकि यह केवल मूल कोड की संशोधित संस्करण के साथ तुलना करता है। जीवित बचे हुए त्रुटियों को मैन्युअल समीक्षा के लिए उम्मीदवार के रूप में मानकर, न कि हर एक को वर्गीकृत करने की कोशिश करके, यह विधि मानवीय प्रयास को काफी कम कर देती है। अध्ययन सुझाव देता है कि इस दृष्टिकोण को मौजूदा वर्कफ़्लो में एकीकृत किया जा सकता है ताकि वास्तव में 'इक्विवेलेंट' त्रुटियों को कुशलतापूर्वक फ़िल्टर किया जा सके, जिससे मानव विशेषज्ञ केवल उन गिने-चुने मामलों पर ध्यान केंद्रित कर सकें जो अनिश्चित रह गए हैं। यह निष्कर्ष इंगित करता है कि प्रोग्राम के व्यवहारों की एक सरल, स्वचालित तुलना उस समस्या को हल कर सकती है जिसे लंबे समय से व्यापक औद्योगिक उपयोग के लिए बहुत महंगा और समय लेने वाला माना जाता रहा है।

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

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

Digest आज़माएँ →