प्रोग्रामिंग में स्टबिंग का क्या मतलब है?


26

मैं अक्सर "स्टब", "स्टब समथिंग आउट", "स्टब्स", और इसके आगे का शब्द सुनता हूं।

प्रोग्रामिंग में स्टबिंग का क्या अर्थ है, और शब्द कहां से आता है? इसे किन संदर्भों में इस्तेमाल किया जा सकता है?


जिन्हें प्लेसहोल्डर भी कहा जाता है:
पीटर बी

जवाबों:


30

स्टब विधि एक ऐसी विधि है जो सिर्फ एक साधारण लेकिन वैध (हालांकि जरूरी नहीं कि सही) परिणाम लौटाए।

वे आमतौर पर बुनियादी ढांचे का निर्माण करते समय बनाए जाते हैं और आप अभी आवश्यक हर विधि पर समय नहीं बिताना चाहते हैं। इसके बजाय आप स्टब्स बनाते हैं, इसलिए सब कुछ संकलित करता है और आपके आईडीई का ऑटो-पूरा उन तरीकों के बारे में जानता है जिन्हें आप उपयोग करने की योजना बना रहे हैं।

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


3
नाइटपिक: स्टबिंग करते समय स्टब्स का इस्तेमाल किया जाता है, न कि मॉकिंग करते समय। मॉकिंग करते समय, आप मोक्स का उपयोग करते हैं। martinfowler.com/articles/mocksArentStubs.html
Jörg W Mittag

उपरोक्त के लिए +1, लेकिन मैं इसे जोड़ना चाहूंगा, यदि आप अभी तक उपयोग किए जाने वाले स्टब किए गए तरीकों की उम्मीद नहीं कर रहे हैं, तो स्टब्स को एक अपवाद या अन्यथा एक त्रुटि के परिणामस्वरूप फेंकने में मददगार हो सकता है। उदाहरण "NotImplementedException": msdn.microsoft.com/en-us/library/... commons.apache.org/proper/commons-lang/javadocs/api-release/org/...
दान आर्मस्ट्रांग

6

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

आपका मुख्य कोड कुछ इस तरह दिखाई देगा (यह उदाहरण अजगर में है):

class ExampleApp():
    def __init__(self):
        self.createMenubar()
        self.createToolbar()
        self.createMain()

जब तक आपके पास सब कुछ काम नहीं करता, तब तक आपका मुख्य कार्य विफल हो जाएगा, इसलिए आप विकास के दौरान अपने ऐप का परीक्षण कैसे कर सकते हैं? उदाहरण के लिए, यदि आपने काम करना शुरू कर दिया है createMenubar, तो मेन्यूबार बनाने के बाद आरंभीकरण विफल हो जाएगा क्योंकि आपने जीयूआई के टूलबार या मुख्य क्षेत्र को लागू नहीं किया है।

यह वह जगह है जहाँ स्टब्स आते हैं। आप नाम से एक फंक्शन बना सकते हैं createToolbarऔर createMainयह ऐप कंस्ट्रक्टर की आवश्यकता को पूरा करता है (अर्थात, ये फ़ंक्शन मौजूद हैं), वास्तव में उन्हें लागू किए बिना। ये कार्य स्टब्स हैं:

def createToolbar():
    pass

def createMain():
    pass

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

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


2

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.