सॉफ्टवेयर सत्यापन

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

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

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

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

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

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

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

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

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

यह भी देखें

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

संदर्भ

 * 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)