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