सॉफ्टवेयर सत्यापन: Difference between revisions

From Vigyanwiki
(Created page with "सॉफ़्टवेयर सत्यापन सॉफ्टवेयर इंजीनियरिंग, प्रोग्रामिंग भाषा...")
 
No edit summary
Line 1: Line 1:
सॉफ़्टवेयर सत्यापन [[सॉफ्टवेयर इंजीनियरिंग]], [[प्रोग्रामिंग भाषा]]ओं और गणना के सिद्धांत का एक अनुशासन है जिसका लक्ष्य यह सुनिश्चित करना है कि सॉफ़्टवेयर अपेक्षित आवश्यकताओं को पूरा करता है।
सॉफ़्टवेयर वेरिफिकेशन [[सॉफ्टवेयर इंजीनियरिंग]], [[प्रोग्रामिंग भाषा|प्रोग्रामिंग]] लैंग्वेजस और कम्प्यूटेशन के सिद्धांत का एक डिसिप्लिन है, जिसका उद्देश्य यह सुनिश्चित करना है कि सॉफ़्टवेयर अपेक्षित आवश्यकताओं को पूरा करता है।


== व्यापक दायरा और वर्गीकरण ==
== ब्रॉड स्कोप और क्लासिफिकेशन ==


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


[[एसीएम कंप्यूटिंग वर्गीकरण प्रणाली]] के तहत, सॉफ्टवेयर सत्यापन विषय सॉफ्टवेयर निर्माण के भीतर सॉफ्टवेयर और इसकी इंजीनियरिंग के अंतर्गत दिखाई देते हैं, जबकि प्रोग्राम सत्यापन सिमेंटिक्स और तर्क, प्रोग्राम तर्क के तहत गणना के सिद्धांत के तहत भी दिखाई देता है।
[[एसीएम कंप्यूटिंग वर्गीकरण प्रणाली|एसीएम कंप्यूटिंग क्लासिफिकेशन सिस्टम]] के अनुसार, सॉफ्टवेयर वेरिफिकेशन टॉपिक "सॉफ्टवेयर क्रिएशन" के साथ "सॉफ्टवेयर और इसकी इंजीनियरिंग" के अंतर्गत दिखाई देते हैं, जबकि प्रोग्राम वेरिफिकेशन सिमेंटिक्स और रीजनिंग, प्रोग्राम रीजनिंग के अनुसार तथा कम्प्यूटेशन के सिद्धांत के अनुसार भी दिखाई देता है।


== गतिशील सत्यापन (परीक्षण, प्रयोग) ==
== डायनमिक वेरिफिकेशन (टैस्टिंग, एक्सपेरिमेंटेशन) ==


सॉफ़्टवेयर के निष्पादन के दौरान गतिशील सत्यापन किया जाता है, और गतिशील रूप से उसके व्यवहार की जाँच की जाती है; इसे आमतौर पर सॉफ़्टवेयर परीक्षण चरण के रूप में जाना जाता है।
सॉफ़्टवेयर के एक्सेक्युशन के समय डायनमिक वेरिफिकेशन किया जाता है, और डायनमिक रूप से उसके व्यवहार की जाँच की जाती है; इसे सामान्यतः सॉफ़्टवेयर टैस्टिंग फेज़ के रूप में जाना जाता है। वेरिफिकेशन एक रिव्यु प्रक्रिया है, टैस्टिंगों के स्कोप के आधार पर, हम उन्हें तीन फैमिलीज़ में क्लासीकृत कर सकते हैं:
सत्यापन एक समीक्षा प्रक्रिया है.
* टैस्टिंग इन स्मॉल: एक टैस्टिंग जो सिंगल फ़ंक्शन या क्लास की जांच करता है, (यूनिट टैस्टिंग)
परीक्षणों के दायरे के आधार पर, हम उन्हें तीन परिवारों में वर्गीकृत कर सकते हैं:
* टैस्टिंग इन लार्ज: एक टैस्टिंग जो क्लासेस के समूह की जाँच करता है, जैसे
* छोटे में परीक्षण: एक परीक्षण जो एकल फ़ंक्शन या वर्ग की जांच करता है (यूनिट परीक्षण)
** मॉड्यूल टैस्टिंग (सिंगल मॉड्यूल)
* बड़े पैमाने पर परीक्षण: एक परीक्षण जो कक्षाओं के समूह की जाँच करता है, जैसे
** [[एकीकरण परीक्षण|इंटीग्रेशन टैस्टिंग]] (एक से अधिक मॉड्यूल)
** मॉड्यूल परीक्षण (एकल मॉड्यूल)
** सिस्टम टैस्टिंग (संपूर्ण सिस्टम)
** [[एकीकरण परीक्षण]] (एक से अधिक मॉड्यूल)
* एक्सेप्टेन्स टैस्टिंग: किसी सॉफ़्टवेयर के लिए एक्सेप्टेन्स क्राइटेरिया की जाँच करने के लिए परिभाषित एक फॉर्मल टैस्टिंग
** सिस्टम परीक्षण (संपूर्ण सिस्टम)
** फंक्शनल टैस्टिंग
* स्वीकृति परीक्षण: किसी सॉफ़्टवेयर के लिए स्वीकृति मानदंड की जाँच करने के लिए परिभाषित एक औपचारिक परीक्षण
** नॉन फंक्शनल टैस्टिंग (परफॉरमेंस, [[तनाव परीक्षण (सॉफ्टवेयर)|स्ट्रैस टैस्टिंग (सॉफ्टवेयर)]])
** काम की जांच
** गैर कार्यात्मक परीक्षण (प्रदर्शन, [[तनाव परीक्षण (सॉफ्टवेयर)]])


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


== स्थैतिक सत्यापन (विश्लेषण) ==
== स्टैटिक वेरिफिकेशन (एनालिसिस) ==


स्थैतिक सत्यापन यह जांचने की प्रक्रिया है कि सॉफ़्टवेयर चलने से पहले कोड का निरीक्षण करके आवश्यकताओं को पूरा करता है या नहीं। उदाहरण के लिए:
स्टैटिक वेरिफिकेशन यह जांचने की प्रक्रिया है कि सॉफ़्टवेयर चलने से पहले कोड का निरीक्षण करके आवश्यकताओं को पूरा करता है या नहीं, उदाहरण के लिए:
* [[कोड कन्वेंशन]] सत्यापन
* [[कोड कन्वेंशन]] वेरिफिकेशन
* खराब प्रथाओं ([[विरोधी पैटर्न]]) का पता लगाना
* बैड प्रैक्टिसेस ([[विरोधी पैटर्न|कॉन्फ्लिक्टी पैटर्न]]) का पता लगाना
* [[ सॉफ्टवेयर मीट्रिक ]]्स गणना
* [[ सॉफ्टवेयर मीट्रिक | सॉफ्टवेयर मिट्रिसेस]] कम्प्यूटेशन
*औपचारिक सत्यापन#सॉफ्टवेयर के लिए औपचारिक सत्यापन
*फॉर्मल वेरिफिकेशन


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


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


== सत्यापन के साथ तुलना ==
== वेलिडेशन के साथ कम्पैरिज़न ==
{{Main|Software verification and validation}}
{{Main|सॉफ्टवेयर वेरिफिकेशन और वेलिडेशन}}
सॉफ़्टवेयर सत्यापन को अक्सर सॉफ़्टवेयर सत्यापन के साथ भ्रमित किया जाता है। सत्यापन और सत्यापन (सॉफ्टवेयर) के बीच अंतर:
 
* सॉफ़्टवेयर सत्यापन प्रश्न पूछता है, क्या हम उत्पाद का निर्माण सही ढंग से कर रहे हैं? ; अर्थात्, क्या सॉफ़्टवेयर इसके विनिर्देशों के अनुरूप है? (जैसे एक घर अपने ब्लूप्रिंट के अनुरूप होता है।)
सॉफ़्टवेयर वेरिफिकेशन को अधिकांशतः सॉफ़्टवेयर वेरिफिकेशन के साथ भ्रमित किया जाता है। वेरिफिकेशन और वेलिडेशन (सॉफ्टवेयर) के बीच अंतर:
* सॉफ़्टवेयर सत्यापन प्रश्न पूछता है, क्या हम सही उत्पाद बना रहे हैं? ; अर्थात्, क्या सॉफ़्टवेयर वह करता है जिसकी उपयोगकर्ता को वास्तव में आवश्यकता होती है? (जैसा कि एक घर उसके मालिक की जरूरतों और चाहतों के अनुरूप होता है।)
* सॉफ़्टवेयर वेरिफिकेशन प्रश्न पूछता है, क्या हम प्रोडक्ट का निर्माण सही ढंग से कर रहे हैं?; अर्थात्, क्या सॉफ़्टवेयर इसके विनिर्देशों के अनुरूप है? (जैसे एक हॉउस अपने ब्लूप्रिंट के अनुरूप होता है।)
* सॉफ़्टवेयर वेरिफिकेशन प्रश्न पूछता है, क्या हम सही प्रोडक्ट बना रहे हैं?; अर्थात्, क्या सॉफ़्टवेयर वह करता है जिसकी उपयोगकर्ता को वास्तव में आवश्यकता होती है? (जैसा कि एक हॉउस उसके ओनर की जरूरतों और चाहतों के अनुरूप होता है।)


==यह भी देखें==
==यह भी देखें==


* [[सत्यापन और सत्यापन (सॉफ्टवेयर)]]
* [[सत्यापन और सत्यापन (सॉफ्टवेयर)|वेरिफिकेशन और वेरिफिकेशन (सॉफ्टवेयर)]]
* [[रनटाइम सत्यापन]]
* [[रनटाइम सत्यापन|रनटाइम वेरिफिकेशन]]
* [[हार्डवेयर सत्यापन]]
* [[हार्डवेयर सत्यापन|हार्डवेयर वेरिफिकेशन]]


== संदर्भ ==
== संदर्भ ==

Revision as of 09:36, 11 August 2023

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

ब्रॉड स्कोप और क्लासिफिकेशन

वेरिफिकेशन की एक ब्रॉड परिभाषा इसे सॉफ़्टवेयर टैस्टिंग से संबंधित बनाती है। उस स्थिति में, वेरिफिकेशन के दो फंडामेंटल एप्प्रोचेस हैं:

  • डायनमिक वेरिफिकेशन, जिसे एक्सपेरिमेंटेशन, डायनमिक टैस्टिंग या, बस टैस्टिंग के रूप में भी जाना जाता है। - यह फॉल्ट्स (सॉफ़्टवेयर बग) ढूंढने के लिए अच्छा है।
  • स्टैटिक वेरिफिकेशन, जिसे एनालिसिस या स्टैटिक टैस्टिंग के रूप में भी जाना जाता है - यह किसी प्रोग्राम की करेक्टनैस (कंप्यूटर विज्ञान) को सिद्ध करने के लिए उपयोगी है। चूंकि इसका परिणाम फॉल्स पॉजिटिव हो सकता है जब किसी सॉफ़्टवेयर द्वारा वास्तव में की जाने वाली प्रक्रिया और स्टैटिक वेरिफिकेशन जो मानता है उसके बीच एक या अधिक कॉन्फ्लिक्ट होते हैं।

एसीएम कंप्यूटिंग क्लासिफिकेशन सिस्टम के अनुसार, सॉफ्टवेयर वेरिफिकेशन टॉपिक "सॉफ्टवेयर क्रिएशन" के साथ "सॉफ्टवेयर और इसकी इंजीनियरिंग" के अंतर्गत दिखाई देते हैं, जबकि प्रोग्राम वेरिफिकेशन सिमेंटिक्स और रीजनिंग, प्रोग्राम रीजनिंग के अनुसार तथा कम्प्यूटेशन के सिद्धांत के अनुसार भी दिखाई देता है।

डायनमिक वेरिफिकेशन (टैस्टिंग, एक्सपेरिमेंटेशन)

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

  • टैस्टिंग इन स्मॉल: एक टैस्टिंग जो सिंगल फ़ंक्शन या क्लास की जांच करता है, (यूनिट टैस्टिंग)
  • टैस्टिंग इन लार्ज: एक टैस्टिंग जो क्लासेस के समूह की जाँच करता है, जैसे
    • मॉड्यूल टैस्टिंग (सिंगल मॉड्यूल)
    • इंटीग्रेशन टैस्टिंग (एक से अधिक मॉड्यूल)
    • सिस्टम टैस्टिंग (संपूर्ण सिस्टम)
  • एक्सेप्टेन्स टैस्टिंग: किसी सॉफ़्टवेयर के लिए एक्सेप्टेन्स क्राइटेरिया की जाँच करने के लिए परिभाषित एक फॉर्मल टैस्टिंग

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

स्टैटिक वेरिफिकेशन (एनालिसिस)

स्टैटिक वेरिफिकेशन यह जांचने की प्रक्रिया है कि सॉफ़्टवेयर चलने से पहले कोड का निरीक्षण करके आवश्यकताओं को पूरा करता है या नहीं, उदाहरण के लिए:

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

नैरो स्कोप

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

वेलिडेशन के साथ कम्पैरिज़न

सॉफ़्टवेयर वेरिफिकेशन को अधिकांशतः सॉफ़्टवेयर वेरिफिकेशन के साथ भ्रमित किया जाता है। वेरिफिकेशन और वेलिडेशन (सॉफ्टवेयर) के बीच अंतर:

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

यह भी देखें

संदर्भ

  • IEEE: SWEBOK: Guide to the Software Engineering Body of Knowledge
  • Carlo Ghezzi, Mehdi Jazayeri, Dino Mandrioli: Fundamentals of Software Engineering, Prentice Hall, ISBN 0-13-099183-X
  • Alan L. Breitler: A Verification Procedure for Software Derived from Artificial Neural Networks, Journal of the International Test and Evaluation Association, Jan 2004, Vol 25, No 4.
  • Vijay D'Silva, Daniel Kroening, Georg Weissenbacher: A Survey of Automated Techniques for Formal Software Verification. IEEE Trans. on CAD of Integrated Circuits and Systems 27(7): 1165-1178 (2008)