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

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

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

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

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

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

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

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

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

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

यह भी देखें

 * सत्यापन और सत्यापन (सॉफ्टवेयर)
 * रनटाइम सत्यापन
 * हार्डवेयर सत्यापन

संदर्भ

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