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

Semantic Spectrum: Fault Localization via Method Behavioral Divergence

यह शोध पत्र सेमेंटिक स्पेक्ट्रम-आधारित फॉल्ट लोकलाइजेशन (SSFL) का प्रस्ताव करता है, जो एक मेथड-लेवल दृष्टिकोण है जो सेमेंटिक स्पेक्ट्रा के निर्माण के लिए रनटाइम आउटपुट-वैल्यू डिस्ट्रीब्यूशन का लाभ उठाता है, जिससे बिना किसी मॉडल ट्रेनिंग या ऑनलाइन रीजनिंग के पारंपरिक स्पेक्ट्रम-आधारित, लर्निंग-आधारित और LLM-आधारित तकनीकों की तुलना में बेहतर फॉल्ट लोकलाइजेशन सटीकता प्राप्त होती है।

मूल लेखक: Tu Peng, Xianju Zheng, Yin Kuang, Abdelmounaim Mekaoui, Yazhi Yang, Ling Xiong

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

मूल लेखक: Tu Peng, Xianju Zheng, Yin Kuang, Abdelmounaim Mekaoui, Yazhi Yang, Ling Xiong

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

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

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

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

इस सिद्धांत का परीक्षण करने के लिए, टीम ने अपनी पद्धति को पांच अलग-अलग जावा प्रोजेक्ट्स (गणितीय लाइब्रेरी से लेकर तिथि-प्रसंस्करण उपकरणों तक) में पाए गए 357 वास्तविक दुनिया के सॉफ़्टवेयर बग्स के एक प्रसिद्ध संग्रह पर लागू किया। उन्होंने एक विशेष उपकरण का उपयोग किया जो हर बार परीक्षण चलने पर कोड के प्रत्येक मेथड (method) के आउटपुट को इंटरसेप्ट करता है। प्रत्येक मेथड के लिए, उन्होंने दो प्रोफाइल बनाए: एक जो सफल परीक्षणों से आउटपुट का वितरण दिखाता है, और दूसरा जो विफल परीक्षणों से वितरण दिखाता है। उन्होंने फिर इन दो प्रोफाइलों की तुलना की ताकि यह मापा जा सके कि व्यवहार में कितना विचलन आया है। यदि एक मेथड ने सफल और विफल दोनों परीक्षणों में समान मान लौटाए, तो उसे निर्दोष माना गया। लेकिन यदि लौटाए गए मानों का पैटर्न नाटकीय रूप से बदल गया—उदाहरण के लिए, एक मेथड जो आमतौर पर "true" लौटाता है, अचानक विफल परीक्षणों में "false" लौटाने लगा—तो सिस्टम ने उसे अत्यधिक संदिग्ध के रूप में चिह्नित किया।

इस प्रयोग के परिणाम आश्चर्यजनक थे। केवल कोड निष्पादन को ट्रैक करने वाले सर्वोत्तम पारंपरिक उपकरणों की तुलना में, नई पद्धति ने संदिग्धों की संख्या को, जिन्हें डेवलपर को जांचना पड़ता है, 60 से 90 प्रतिशत तक कम कर दिया। कुछ बड़े प्रोजेक्ट्स में, जहाँ पारंपरिक उपकरण डेवलपर को दर्जनों समान रूप से संदिग्ध लाइनों की खोज में छोड़ देते, वहीं नई पद्धति ने वास्तविक त्रुटि को सूची में बहुत ऊपर तक सटीक रूप से पहचाना। यह सुधार इतना महत्वपूर्ण था कि सबसे बड़े परीक्षण किए गए प्रोजेक्ट में, शोधकर्ताओं ने सही त्रुटि की औसत स्थिति को 71.63 से घटाकर 6.88 कर दिया—यानी खोज प्रयास में 90.4% की कमी। यह एक ऐसी उपलब्धि थी जिसे पारंपरिक विधियाँ प्राप्त नहीं कर सकीं। यह पद्धति "टाई प्रॉब्लम" (tie problem) को हल करने में विशेष रूप से प्रभावी सिद्ध हुई, जहाँ पारंपरिक उपकरण विफल हो जाते हैं क्योंकि कई मेथड्स एक जैसे दिखते हैं। आउटपुट को सुनकर, नया दृष्टिकोण एक सही मेथड और एक दोषपूर्ण मेथड के बीच अंतर सुन सका, भले ही वे एक ही पथ पर चल रहे हों।

शोधकर्ताओं ने अपनी तकनीक की तुलना आर्टिफिशियल इंटेलिजेंस-आधारित उपकरणों की नवीनतम पीढ़ी से भी की, जिन्हें अक्सर विशाल डेटासेट पर प्रशिक्षण की आवश्यकता होती है या कोड को पढ़ने और समझने के लिए शक्तिशाली लैंग्वेज मॉडल्स का उपयोग करना पड़ता है। उनकी पद्धति, जिसमें कोई प्रशिक्षण और कोई जटिल एआई तर्क की आवश्यकता नहीं है, सबसे मजबूत लर्निंग-आधारित बेसलाइन, HetFL से बेहतर प्रदर्शन करती है, जो रैंक की गई सूची में टॉप-3 और टॉप-5 स्थितियों में अधिक बग्स की पहचान करती है। विशेष रूप से, इसने Top-3 और Top-5 में क्रमशः 242 और 262 बग्स को लोकलाइज किया, जबकि HetFL के लिए यह संख्या 195 और 228 थी। यह सुझाव देता है कि प्रोग्राम क्या उत्पन्न करता है उसका कच्चा डेटा (raw data), उन जटिल पैटर्न की तुलना में अधिक सीधा और विश्वसनीय सुराग है जिन्हें एआई मॉडल सीखने की कोशिश करते हैं। यह पद्धति नियतत्ववादी (deterministic) भी है, जिसका अर्थ है कि यह हर बार समान परिणाम देती है, उन एआई सिस्टम के विपरीत जो अपने उत्तर बदल सकते हैं।

इस खोज का एक सबसे व्यावहारिक पहलू इसकी दक्षता है। हालांकि आउटपुट मानों को कैप्चर करने की प्रक्रिया परीक्षण चरण में थोड़ा समय जोड़ती है—सॉफ़्टवेयर के प्रत्येक संस्करण के लिए लगभग सात सेकंड—लेकिन सटीकता में वृद्धि पर्याप्त है। शोधकर्ताओं ने पाया कि यह अतिरिक्त समय मैन्युअल खोज के घंटों को बचाने के लिए एक छोटा सा मूल्य है। यह पद्धति सॉफ़्टवेयर के कच्चे आउटपुट को एक एकीकृत प्रारूप में बदलकर काम करती है, संख्याओं, शब्दों और true-or-false मानों को टोकन की एक सामान्य भाषा के रूप में मानती है। फिर यह गिनती करती है कि गुजरने वाले परीक्षणों बनाम विफल होने वाले परीक्षणों में प्रत्येक टोकन कितनी बार आता है। यदि एक विशिष्ट टोकन विफल परीक्षणों में बार-बार आता है लेकिन गुजरने वाले परीक्षणों में शायद ही कभी आता है, या यदि टोकन का संतुलन नाटकीय रूप रूप से बदल जाता है, तो सिस्टम जान जाता है कि कुछ गलत है। इस दृष्टिकोण के लिए सॉफ़्टवेयर को फिर से लिखने या डेवलपर्स द्वारा अतिरिक्त जानकारी प्रदान करने की आवश्यकता नहीं है; यह केवल वही सुनता है जो मौजूदा परीक्षण पहले से ही उत्पन्न कर रहे हैं।

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

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

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

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

Digest आज़माएँ →