सॉफ़्टवेयर परीक्षण व विन्यास प्रबंधन

यह अध्याय इकाई 6 को सत्यापन व वैधीकरण, वह शब्दावली जो त्रुटि को दोष से व दोष को विफलता से पृथक करती है, दो संरचनात्मक परीक्षण-कुल (श्वेत-पेटी व श्याम-पेटी) व उनकी विशिष्ट तकनीकें, इकाई से स्वीकृति तक परीक्षण-स्तर पदानुक्रम, तथा सॉफ़्टवेयर विन्यास-प्रबंधन — परिवर्तन-नियंत्रण, पुनर्प्रयोग, पुनः-अभियांत्रिकी व विलोम-अभियांत्रिकी से पूर्ण करता है।

सत्यापन व वैधीकरण; त्रुटि, दोष, बग व विफलता

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

श्वेत-पेटी व श्याम-पेटी परीक्षण

  • श्वेत-पेटी (संरचनात्मक/काँच-पेटी) परीक्षण परीक्षण-स्थितियाँ कोड की आंतरिक संरचना व तर्क के ज्ञान से अभिकल्पित करता है। मूल-पथ परीक्षण कोड के नियंत्रण-प्रवाह ग्राफ से स्वतंत्र निष्पादन-पथों का समुच्चय व्युत्पन्न करता है, चक्रीय जटिलता (V(G) = कोर − नोड + 2, एकल संयोजित ग्राफ हेतु) का प्रयोग करते हुए पूर्ण कवरेज हेतु आवश्यक स्वतंत्र पथों की न्यूनतम संख्या निर्धारित करने को। नियंत्रण संरचना परीक्षण आगे विशिष्टीकृत होता है शर्त-परीक्षण (हर व्यक्तिगत बूलियन उप-शर्त चलाना), आँकड़ा-प्रवाह परीक्षण (चर की परिभाषा से उसके प्रयोग तक पथ चलाना) व लूप-परीक्षण (लूप को शून्य बार, एक बार, व कई बार चलाना, साथ ही उसकी सीमा-गिनतियाँ) में।
  • श्याम-पेटी (व्यावहारिक/प्रकार्यात्मक) परीक्षण केवल विनिर्देशन से परीक्षण-स्थितियाँ अभिकल्पित करता है, कोड के आंतरिक भाग के किसी संदर्भ के बिना — समतुल्यता-विभाजन (निवेशों को उन वर्गों में बाँटना जिनसे समान व्यवहार अपेक्षित हो, हर मान के बजाय प्रति वर्ग एक प्रतिनिधि परखते हुए) व सीमा-मान विश्लेषण (सीमा पर ठीक, तनिक ऊपर व तनिक नीचे के मान परखना, जहाँ दोष सर्वाधिक गुच्छित होते हैं) जैसी तकनीकों से परीक्षण-स्थितियाँ व्युत्पन्न करते हुए। अल्फ़ा परीक्षण अंतिम-उपयोगकर्ताओं द्वारा विकासकर्ता के स्थल पर विकासकर्ता के प्रेक्षण में संचालित होता है; बीटा परीक्षण अंतिम-उपयोगकर्ताओं द्वारा अपने ही स्थल पर बिना किसी विकासकर्ता के उपस्थित हुए संचालित होता है, सॉफ़्टवेयर को उन वास्तविक-जगत् शर्तों व प्रयोग-प्रतिरूपों में उजागर करते हुए जिन्हें विकासकर्ता का अपना परीक्षण-परिवेश दोहरा नहीं सकता।
⚠️ 100% कथन-कवरेज 100% शाखा/पथ-कवरेज नहीं है
परीक्षण-समुच्चय कोड की हर पंक्ति को कम-से-कम एक बार चला सकता है (100% कथन-कवरेज) फिर भी if-else की एक शाखा कभी न चलाते हुए (यदि, मान लें, else-शाखा की एकल पंक्ति संयोगवश किसी भिन्न पथ से भी पहुँचने योग्य व ढकी हो) या, अधिक सामान्यतः, किसी ऐसी शर्त के असत्य परिणाम को बिना कभी परखे जो किसी भिन्न अनढकी पंक्ति पर पृथक रूप से कभी शाखा नहीं करती। मूल-पथ परीक्षण, कच्ची पंक्ति-गिनती के बजाय नियंत्रण-प्रवाह ग्राफ पर बना, विशेष रूप से कवरेज की एक प्रबलतर, पथ-आधारित धारणा की गारंटी देने हेतु अभिकल्पित है जिसे भोली पंक्ति-गिनती मापक पूर्णतः चूक सकता है।

इकाई, समाकलन, प्रतिगमन, प्रदर्शन व दबाव परीक्षण

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

सॉफ़्टवेयर विन्यास प्रबंधन: परिवर्तन-नियंत्रण, पुनर्प्रयोग व पुनः-अभियांत्रिकी

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

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

मुख्य बिंदु

  • सत्यापन पूछता है 'सही उत्पाद सही ढंग से बना?'; वैधीकरण पूछता है 'सही उत्पाद बिल्कुल बना?' — भिन्न प्रश्न, दोनों आवश्यक।
  • त्रुटि (मानवीय भूल) कलाकृति में दोष (बग) छोड़ती है, जो निष्पादन के दौरान वस्तुतः ट्रिगर होने पर ही विफलता उत्पन्न करती है।
  • श्वेत-पेटी परीक्षण (मूल-पथ, शर्त, आँकड़ा-प्रवाह, लूप परीक्षण) कोड-आंतरिक प्रयोग करता है; श्याम-पेटी परीक्षण (समतुल्यता-विभाजन, सीमा-मान विश्लेषण, अल्फ़ा/बीटा परीक्षण) केवल विनिर्देशन प्रयोग करता है।
  • प्रतिगमन परीक्षण परिवर्तन के बाद पहले-कार्यरत प्रकार्यता पुनः जाँचता है; प्रदर्शन व दबाव परीक्षण भिन्न प्रश्न पूछते हैं (कितना अच्छा बनाम यह कैसे विफल होता है)।
  • पुनः-अभियांत्रिकी बाह्य व्यवहार बदले बिना विद्यमान तंत्र की संरचना सुधारती है, सामान्यतः पहले विलोम-अभियांत्रिकी से होकर; आधार-रेखा केवल औपचारिक परिवर्तन-नियंत्रण से बदलती है।

अभ्यास प्रश्न (8)

उत्तर खोलने से पहले प्रत्येक प्रश्न हल करें। हर व्याख्या सही विकल्प के साथ लुभावना गलत विकल्प भी बताती है, क्योंकि अंक वहीं जाते हैं।

  1. सत्यापन से भिन्न, वैधीकरण पूछता है:

    1. 'क्या हम सही उत्पाद बना रहे हैं?' — क्या यह ग्राहक की वास्तविक आवश्यकताएँ पूरी करता है
    2. 'क्या हम उत्पाद सही ढंग से बना रहे हैं?' — क्या हर कलाकृति अपने विनिर्देशन से मेल खाती है
    3. कुछ नहीं; वैधीकरण व सत्यापन समान हैं
    4. केवल क्या कोड संकलित होता है
    उत्तर देखें

    उत्तर: A — 'क्या हम सही उत्पाद बना रहे हैं?' — क्या यह ग्राहक की वास्तविक आवश्यकताएँ पूरी करता है

    सत्यापन पूर्ववर्ती विनिर्देशन के अनुरूपण की जाँच करता है; वैधीकरण निर्मित उत्पाद को ग्राहक की वास्तविक, वास्तविक-जगत् आवश्यकताओं के विरुद्ध जाँचता है, जिन्हें विनिर्देशन स्वयं गलत समझ सकता था।
  2. कोड में उपस्थित दोष (बग) जो निष्पादन के दौरान वस्तुतः कभी ट्रिगर नहीं होता:

    1. कोई विफलता उत्पन्न नहीं करता, क्योंकि विफलता हेतु दोष का वस्तुतः चलना आवश्यक है
    2. बहरहाल सदा विफलता उत्पन्न करता है
    3. मानवीय त्रुटि जैसी ही वस्तु है
    4. किसी भी वास्तविक प्रोग्राम में विद्यमान नहीं हो सकता
    उत्तर देखें

    उत्तर: A — कोई विफलता उत्पन्न नहीं करता, क्योंकि विफलता हेतु दोष का वस्तुतः चलना आवश्यक है

    विफलता निष्पादन के दौरान दोष के ट्रिगर होने का प्रेक्षणीय परिणाम है; कभी न चलने वाले कोड-पथ पर निष्क्रिय दोष कोई दृश्य विफलता उत्पन्न नहीं करता, कोड स्वयं चाहे जितना गलत हो।
  3. मूल-पथ परीक्षण में प्रयुक्त चक्रीय जटिलता, (एकल संयोजित नियंत्रण-प्रवाह ग्राफ हेतु) इस प्रकार गणित की जाती है:

    1. कोर − नोड + 2
    2. कोर + नोड
    3. नोड − कोर
    4. ग्राफ की परवाह किए बिना सदा ठीक 1
    उत्तर देखें

    उत्तर: A — कोर − नोड + 2

    V(G) = E − N + 2 नियंत्रण-प्रवाह ग्राफ से होकर स्वतंत्र रैखिक पथों की संख्या देता है, जो मूल-पथ कवरेज हेतु आवश्यक परीक्षण-स्थितियों की न्यूनतम संख्या है।
  4. सीमा-मान विश्लेषण, एक श्याम-पेटी परीक्षण तकनीक, इस प्रेक्षण से प्रेरित है कि:

    1. दोष प्रायः निवेश की वैध परास की सीमाओं के आसपास सर्वाधिक गुच्छित होते हैं
    2. हर निवेश-मान दोष उजागर करने की समान संभावना रखता है
    3. इसे स्रोत-कोड की आंतरिक संरचना तक पहुँच चाहिए
    4. यह केवल वैध परास के मध्य में गहरे मान परखता है
    उत्तर देखें

    उत्तर: A — दोष प्रायः निवेश की वैध परास की सीमाओं के आसपास सर्वाधिक गुच्छित होते हैं

    ऑफ़-बाई-वन त्रुटियाँ व अन्य सीमा-भूलें सर्वाधिक सामान्य दोषों में से हैं, अतः सीमा पर ठीक, तनिक नीचे व तनिक ऊपर के मान परखना स्वेच्छ आंतरिक मानों को परखने से कहीं अधिक दक्षतापूर्वक समस्याएँ खोजता है।
  5. अल्फ़ा परीक्षण की तुलना में, बीटा परीक्षण संचालित होता है:

    1. अंतिम-उपयोगकर्ताओं द्वारा उनके अपने स्थल पर, बिना किसी विकासकर्ता के उपस्थित हुए
    2. केवल विकासकर्ताओं द्वारा, किसी कोड के लिखे जाने से पहले
    3. विकासकर्ता के अपने स्थल पर, विकासकर्ता के प्रेक्षण में
    4. केवल हार्डवेयर पर, सॉफ़्टवेयर पर कभी नहीं
    उत्तर देखें

    उत्तर: A — अंतिम-उपयोगकर्ताओं द्वारा उनके अपने स्थल पर, बिना किसी विकासकर्ता के उपस्थित हुए

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

    1. यह विद्यमान तंत्र की आंतरिक संरचना सुधारती है, उसका बाह्य व्यवहार बदले बिना
    2. यह सामान्यतः पहले विलोम-अभियांत्रिकी से होकर गुज़रती है, विरासत कोड की उच्चतर-स्तरीय समझ पुनर्प्राप्त करने हेतु
    3. इसका अर्थ सदा तंत्र को पूर्णतः नए सिरे से पुनर्लिखना है
    4. यह विद्यमान विरासत तंत्र पर लागू होती है, बिल्कुल नए प्रोजेक्ट पर नहीं
    उत्तर देखें

    उत्तर: A — यह विद्यमान तंत्र की आंतरिक संरचना सुधारती है, उसका बाह्य व्यवहार बदले बिना; B — यह सामान्यतः पहले विलोम-अभियांत्रिकी से होकर गुज़रती है, विरासत कोड की उच्चतर-स्तरीय समझ पुनर्प्राप्त करने हेतु; D — यह विद्यमान विरासत तंत्र पर लागू होती है, बिल्कुल नए प्रोजेक्ट पर नहीं

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

    संख्यात्मक उत्तर — मान टाइप करें।

    उत्तर देखें

    उत्तर: regression testing

    प्रतिगमन परीक्षण ठीक इसी से रक्षा हेतु विद्यमान है कि कोई परिवर्तन चुपचाप उस प्रकार्यता को न तोड़ दे जो पहले काम कर रही थी, इसीलिए इसे एक बार करने के बजाय हर परिवर्तन पर पुनः चलाया जाता है।
  8. सॉफ़्टवेयर विन्यास प्रबंधन में आधार-रेखा को उसके बाद केवल इससे बदला जा सकता है:

    1. औपचारिक परिवर्तन-नियंत्रण प्रक्रिया (अनुरोध, प्रभाव-विश्लेषण, अनुमोदन, कार्यान्वयन, पुनः-आधार-रेखीकरण)
    2. किसी भी विकासकर्ता द्वारा बिना किसी समीक्षा के सीधे संपादित करना
    3. इसे किसी भी परिस्थिति में कभी नहीं बदला जा सकता
    4. पूरा प्रोजेक्ट मिटाकर नए सिरे से आरंभ करना
    उत्तर देखें

    उत्तर: A — औपचारिक परिवर्तन-नियंत्रण प्रक्रिया (अनुरोध, प्रभाव-विश्लेषण, अनुमोदन, कार्यान्वयन, पुनः-आधार-रेखीकरण)

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