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

निष्पादन लक्ष्यों का स्थापन

कई निष्पादन परीक्षण, वास्तविक निष्पादन लक्ष्यों के निर्धारण पर विचार किए बिना ही शुरू किए जाते हैं। व्यापार के नज़रिए से पहला सवाल हमेशा यह होना चाहिए कि "हम निष्पादन परीक्षण क्यों कर रहे हैं?" अनुप्रयोग प्रौद्योगिकी और उद्देश्य के आधार पर निष्पादन लक्ष्य अलग हो सकते हैं, लेकिन उनमें हमेशा निम्न में से कुछ शामिल होना चाहिए:-

संगामिति / प्रवाह क्षमता

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

सर्वर अनुक्रिया काल

यह एक अनुप्रयोग नोड के लिए अन्य के अनुरोध पर अनुक्रिया करने में लगने वाले समय को निर्दिष्ट करता है। एक सामान्य उदाहरण होगा ब्राउज़र क्लाइंट से वेब सर्वर को HTTP 'GET' अनुरोध. अनुक्रिया काल के मामले में यही है जिसे सब लोड परीक्षण उपकरण वास्तव में मापते हैं। यह प्रासंगिक होगा कि अनुप्रयोग परिदृश्य के सभी नोड्स के बीच सर्वर अनुक्रिया काल लक्ष्य निर्धारित किए जाएं.

प्रतिपादन अनुक्रिया काल

लोड परीक्षण उपकरणों द्वारा निपटने के लिए एक कठिन विषय, चूंकि आम तौर पर उनके पास कोई अवधारणा नहीं होती कि एक समयावधि की पहचान के अलावा नोड के भीतर क्या हो रहा है, जहां 'तार पर' कोई गतिविधि नहीं होती है। प्रतिपादन अनुक्रिया काल मापने के लिए आम तौर पर निष्पादन परीक्षण परिदृश्य के अंग के रूप में कार्यात्मक परीक्षण लिपियां सम्मिलत हों, जो एक ऐसी विशेषता है जिसकी पेशकश कई लोड परीक्षण उपकरण नहीं करते हैं।

लोड टेस्टिंग

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

स्ट्रेस टेस्टिंग

सामान्यतः यह परीक्षण अनुप्रयोग परिदृश्य में क्षमता की ऊपरी सीमा को समझने के लिए इस्तेमाल होता है। इस प्रकार का परीक्षण, अत्यधिक भार के समय अनुप्रयोग की मज़बूती के निर्धारण के लिए किया जाता है और अनुप्रयोग प्रशासकों को यह निर्धारित करने में मदद देता है कि क्या अपेक्षित अधिकतम सीमा से वर्तमान भार अधिक होने से अनुप्रयोग समुचित रूप से निष्पादित कर सकेगा.

एन्ड्युरेंस टेस्टिंग (सोक टेस्टिंग)

यह परीक्षण आम तौर पर इस निर्धारण के लिए किया जाता है कि क्या सतत अपेक्षित भार को अनुप्रयोग संभाल पाएगा. क्षमता परीक्षण के दौरान, संभाव्य रिसाव का पता लगाने के लिए मेमोरी उपयोग पर निगरानी रखी जाती है। साथ ही निष्पादन ह्रास महत्वपूर्ण है, लेकिन अक्सर इसे अनदेखा किया जाता है। अर्थात्, यह सुनिश्चित करने के लिए कि निरंतर गतिविधि की कुछ लंबी अवधि के बाद प्रवाह क्षमता और/या अनुक्रिया काल, परीक्षण के शुरूआत की तुलना में अच्छा या बेहतर है।

स्पाइक टेस्टिंग

जैसा कि नाम से स्पष्ट है, उपयोगकर्ताओं की संख्या की मज़बूती के परीक्षण द्वारा अनुप्रयोग के व्यवहार को समझना ही स्पाइक (कील) परीक्षण है; कि क्या निष्पादन प्रभावित होगा, अनुप्रयोग असफल होगा, या वह भार में नाटकीय परिवर्तनों को संभाल सकेगा.

कनफ़िगरेशन टेस्टिंग

विन्यास परीक्षण पारंपरिक निष्पादन परीक्षण का एक और रूपांतरण है। भार के परिप्रेक्ष्य में निष्पादन के परीक्षण की बजाय आप अनुप्रयोग निष्पादन और व्यवहार पर अनुप्रयोग परिदृश्य के विन्यास परिवर्तनों के प्रभाव का परीक्षण कर रहे हैं। एक सामान्य उदाहरण भार-संतुलन के विभिन्न तरीकों के साथ प्रयोग करना होगा.

आइसोलेशन टेस्टिंग

निष्पादन परीक्षण के लिए अनन्य तो नहीं, पर इस शब्द का प्रयोग अनुप्रयोग समस्या में परिणत होने वाले परीक्षण कार्यान्वयन के दोहराव को वर्णित करने के लिए किया जाता है। अक्सर ग़लती के प्रभाव-क्षेत्र को अलग करने और पुष्टि करने के लिए इस्तेमाल होता है।

निष्पादन परीक्षण के लिए पूर्व-अपेक्षाएं

अनुप्रयोग की एक स्थिर रचना, जहां तक संभव हो जो उत्पादन परिवेश को प्रतिबिंबित करे.
निष्पादन परीक्षण परिवेश को UAT या विकास परिवेश के साथ जोड़ना नहीं चाहिए. यह संकटपूर्ण है क्योंकि यदि उसी परिवेश में एक UAT या समाकलन परीक्षण या अन्य परीक्षण किया जा रहा हो, तो निष्पादन परीक्षण से प्राप्त परिणाम विश्वसनीय नहीं हो सकते. एक उत्तम अभ्यास के रूप में हमेशा ही यह उपयुक्त होगा कि जितना संभव हो निष्पादन परीक्षण के लिए उत्पादन परिवेश जैसा एक अलग माहौल उपलब्ध हो.

निष्पादन परीक्षण के मिथक

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

प्रौद्योगिकी

निष्पादन परीक्षण प्रौद्योगिकी एक या अधिक PC या यूनिक्स सर्वर को इनजेक्टरों के रूप में कार्य करने के लिए तैनात करता है - जिनमें प्रत्येक असंख्य प्रयोक्ताओं की उपस्थिति का अनुकरण करते हैं और प्रत्येक ऐसे होस्ट के साथ अन्योन्य क्रिया के स्वचालित अनुक्रम को चलाते हैं, जिसके निष्पादन का परीक्षण किया जा रहा है (स्क्रिप्ट या स्क्रिप्टों की श्रृंखला के रूप में अभिलिखित, ताकि विभिन्न प्रकार के प्रयोक्ता अन्योन्य क्रियाओं का अनुकरण कर सकें). आम तौर पर, एक अलग PC परीक्षण संचालक के रूप में कार्य करता है, जो प्रत्येक इनजेक्टर से मैट्रिक्स का समन्वयन और संग्रहण करता है तथा रिपोर्टिंग के प्रयोजन से निष्पादन डाटा का मिलान करता है। सामान्य अनुक्रम है भार को बढ़ाना - आभासी प्रयोक्ताओं की एक छोटी संख्या के साथ शुरू करते हुए और कुछ अधिकतम अवधि तक संख्या को बढ़ाना. परीक्षण परिणाम दर्शाते हैं कि भार के साथ निष्पादन किस तरह बदलता रहता है, जो प्रयोक्ताओं की संख्या बनाम अनुक्रिया काल के रूप में दिया जाता है। इस तरह के परीक्षणों को निष्पादित करने के लिए विभिन्न उपकरण उपलब्ध हैं। इस श्रेणी में आम तौर पर उपकरण परीक्षणों की एक ऐसी व्यवस्था को अंजाम देते हैं, जो प्रणाली के प्रति असली उपयोगकर्ताओं का अनुकरण करता है। कभी-कभी परिणामों से कुछ विषमताएं प्रकट होती हैं, उदाहरण के लिए, जबकि औसत अनुक्रिया काल स्वीकार्य हो सकता है, वहीं ऐसे कुछ प्रमुख सर्वथा भिन्न आदान-प्रदान रहते हैं जिनको पूरा करने में काफ़ी समय लगता है - जो संभवतः अक्षम डाटाबेस प्रश्नों, चित्रों आदि की वजह से हो.
निष्पादन परीक्षण को तनाव परीक्षण के साथ संयुक्त किया जा सकता है, ताकि देख सकें कि जब एक स्वीकार्य भार अधिक हो जाता है - तो क्या सिस्टम क्रैश होता है? अगर भारी बोझ को कम किया जाए, तो ठीक होने में कितना समय लगता है? क्या यह इस तरह विफल होता है कि संपार्श्विक क्षति पहुंचती है?
विश्लेषणात्मक निष्पादन मॉडलिंग एक स्प्रेडशीट में अनुप्रयोग के व्यवहार मॉडल करने की एक पद्धति है। मॉडल को आदान-प्रदान संसाधन अपेक्षाओं का माप पहुंचाया जाता है (CPU, डिस्क I/O, LAN, WAN), जिसे आदान-प्रदान मिश्रण (व्यापार लेन-देन प्रति घंटा) द्वारा मापा जाता है। मापे गए आदान-प्रदान संसाधन मांग को घंटेवार संसाधन मांग का पता लगाने के लिए जोड़ा जाता है और संसाधन भार के प्राप्त करने के लिए घंटेवार संसाधन क्षमता से विभाजित किया जाता है। अनुक्रिया काल सूत्र (R=S/(1-U), R=अनुक्रिया काल, S=सेवा काल, U=भार) का उपयोग करते हुए अनुक्रिया समय की गणना की जा सकती है और निष्पादन परीक्षणों के परिणामों के साथ अंशशोधित किया जा सकता है। विश्लेषणात्मक निष्पादन मॉडलिंग, वास्तविक या प्रत्याशित कारोबारी उपयोग के आधार पर डिज़ाइन विकल्पों के मूल्यांकन और प्रणाली का आकार घटाने की अनुमति देता है। इसलिए यह निष्पादन परीक्षण से ज़्यादा तेज़ और सस्ता है, हालांकि इसके लिए हार्डवेयर प्लेटफॉर्म को पूरी तरह से समझने की आवश्यकता है।