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

Combining Tests and Proofs for Better Software Verification

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

मूल लेखक: Li Huang, Bertrand Meyer, Manuel Oriol

प्रकाशित 2026-02-10
📖 4 मिनट में पढ़ें☕ कॉफ़ी ब्रेक में पढ़ें

मूल लेखक: Li Huang, Bertrand Meyer, Manuel Oriol

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

कल्पना कीजिए कि आप लेगो (Lego) का एक जटिल किला बना रहे हैं। यह सुनिश्चित करने के लिए कि यह मज़बूत रहे, आपके पास अपने काम की जाँच करने के दो तरीके हैं:

  1. "तनाव परीक्षण" (Testing): आप किले को उंगली से छूते हैं, मेज़ को हिलाते हैं, या उसके पास एक भारी किताब गिराते हैं ताकि यह देख सकें कि क्या वह बिखर जाता है। यह व्यावहारिक है, लेकिन आप मेज़ को हर संभव तरीके से नहीं हिला सकते, इसलिए आप किसी कमज़ोर बिंदु को मिस कर सकते हैं।
  2. "ब्लूप्रिंट ऑडिट" (Proving): आप निर्देश पुस्तिका (instruction manual) के साथ बैठते हैं और भौतिकी के नियमों के आधार पर गणित का उपयोग करके यह सिद्ध करते हैं कि किला कभी नहीं गिरना चाहिए। यह सिद्धांत में तो उत्तम है, लेकिन यदि गणित कहता है कि "यह विफल हो सकता है," तो यह आपको यह नहीं बताता कि कहाँ या क्यों। यह केवल एक निराशाजनक त्रुटि संदेश (error message) दे देता है।

लंबे समय तक, इंजीनियरों ने इस बात पर बहस की है कि कौन सा बेहतर है। इस शोध पत्र के लेखक कहते हैं: "चुनाव क्यों करें? आइए उन्हें एक-दूसरे से बात करने दें।"

यहाँ वे इन तीन चतुर "सुपरपावर्स" का उपयोग करके इन दोनों दुनियाओं को कैसे मिलाते हैं:

1. "अनुवादक" (Proof2Test)

कल्पना कीजिए कि आप गणित की परीक्षा के लिए पढ़ाई कर रहे हैं। आप एक समस्या हल करते हैं, और शिक्षक बस उस पर लाल घेरा बनाकर लिख देता है, "गलत।" आप निराश होते! आप चाहते कि शिक्षक कहे, "आपने इसे गलत किया क्योंकि आपने तीसरे चरण पर पहुँचने पर 'एक जोड़ने' (carry the one) की गलती की।"

वर्तमान में, "सिद्ध करने वाले" (Proving) उपकरण उस अनुपयोगी शिक्षक की तरह हैं। वे आपको बताते हैं कि प्रोग्राम गलत है, लेकिन यह नहीं बताते कि कैसे। यह पेपर एक ऐसा टूल पेश करता है जो एक अनुवादक के रूप में कार्य करता है। यह उस अमूर्त "गलत" को एक ठोस उदाहरण में बदल देता है। यह कहने के बजाय कि "गणित टूटा हुआ है," यह कहता है, "यदि आप इस स्लॉट में संख्या 5 डालते हैं, तो मशीन टूट जाएगी।" यह एक भ्रमित करने वाली गणितीय त्रुटि को एक वास्तविक दुनिया के "तनाव परीक्षण" में बदल देता है जिसे आप वास्तव में देख और ठीक कर सकते हैं।

2. "रोबोट मैकेनिक" (Proof2Fix)

कल्पना कीजिए कि आपकी कार खराब हो गई है। आमतौर पर, एक मैकेनिक को अंदाज़ा लगाना पड़ता है कि कौन सा हिस्सा खराब है, एक नया हिस्सा आज़माना पड़ता है, और देखना पड़ता है कि क्या वह काम करता है। कभी-कभी वे स्थिति को और बिगाड़ देते हैं!

यह पेपर एक "रोबोट मैकेनिक" का प्रस्ताव देता है। चूंकि "सिद्ध करने वाला" टूल पहले से ही जानता है कि गणित क्यों विफल हुआ, इसलिए वह सुधार का सुझाव दे सकता है। लेकिन यहाँ जादू यह है: एक बार जब रोबोट सुधार का सुझाव देता है, तो वह केवल इस उम्मीद पर नहीं रहता कि यह काम करेगा; बल्कि वह गणित को फिर से चलाता है ताकि गारंटी दी जा सके कि सुधार एकदम सटीक है। यह एक ऐसे मैकेनिक की तरह है जो भविष्य देख सकता है ताकि यह सुनिश्चित हो सके कि कार उस विशिष्ट तरीके से फिर कभी खराब न हो।

3. "नियंत्रित तोड़फोड़" (Seeding Contradiction)

यह सबसे रचनात्मक हिस्सा है। आमतौर पर, हम यह देखने के लिए परीक्षण लिखते हैं कि एक काम करने वाला प्रोग्राम काम करता रहे। लेकिन आप कैसे जानेंगे कि आपके परीक्षण वास्तव में अच्छे हैं? आप कैसे जानेंगे कि आपने किले के हर कोने का परीक्षण किया है?

लेखक एक "जासूस" तकनीक का सुझाव देते हैं: जानबूझकर की गई तोड़फोड़ (Deliberato Sabotage)।
वे एक पूरी तरह से सही प्रोग्राम लेते हैं और जानबूझकर हर कोने में छोटे, अदृश्य बग (bugs) "प्लांट" करते हैं। फिर, वे अपने गणितीय उपकरणों से उन बग्स को खोजने के लिए कहते हैं। उन बग्स को ढूंढकर जिन्हें उन्होंने खुद प्लांट किया था, वे स्वचालित रूप से एक "मास्टर चेकलिस्ट" के रूप में परीक्षण तैयार करते हैं।

यह एक सुरक्षा कंपनी द्वारा बैंक वॉल्ट का परीक्षण करने जैसा है—जानबूझकर पिछला दरवाज़ा खुला छोड़ देना, और फिर देखना कि क्या उनके सेंसर उसे पकड़ पाते हैं। यदि सेंसर "नकली" घुसपैठ को पकड़ लेते हैं, तो आप जानते हैं कि आपका सुरक्षा तंत्र वास्तव में काम कर रहा है। यह एक विशाल, उच्च-गुणवत्ता वाला परीक्षण सूट बनाता है जो सॉफ़्टवेयर के हर कोने और कोने को कवर करता है।

बड़ी तस्वीर

परीक्षण (हाथों से हिलाने वाला) और सिद्ध करना (दिमाग चलाने वाला गणितज्ञ) को दुश्मन के रूप में देखने के बजाय, यह शोध पत्र उन्हें एक टीम में बदल देता है। गणितज्ञ खामियों को ढूंढता है, हिलाने वाला (shaker) यह सिद्ध करता है कि वे वास्तविक हैं, और साथ मिलकर वे ऐसा सॉफ़्टवेयर बनाते हैं जिसे तोड़ना बहुत कठिन होता है।

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

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

Digest आज़माएँ →