मूल्यांकन करना कि इकाई परीक्षण या एकीकरण परीक्षण पहले नीले-आकाश / प्रोटोटाइप परियोजनाओं पर लिखना है या नहीं


11

जब मैंने हाल ही में देखा है कि मैं निम्नलिखित प्रकार की परियोजनाएँ कर रहा हूँ:

  • जब एक परियोजना की शुरुआत
  • एमवीपी / प्रोटोटाइप पर काम करना
  • ऐसी सुविधाएँ जोड़ना जो पूरी तरह से परिभाषित नहीं हैं
  • छोटे पैमाने पर परियोजना पर काम करना

संदर्भ के लिए, मैं अब पायथन परियोजना पर काम कर रहा हूं जिसमें वर्तमान में ~ 1k लाइनों के कोड हैं, जिसमें कुछ टिप्पणियां और सभी व्हाट्सएप शामिल हैं।

मुझे पहले एकीकरण परीक्षण लिखना, कोड पर काम करना बहुत आसान लगता है, और फिर एक बार एपीआई कुछ हद तक कठोर हो जाता है वास्तव में इकाई परीक्षण जोड़ने पर काम करते हैं। परीक्षण के प्रकार जो मैं अपने mainकार्य पर चला सकता हूं , इसलिए बोलने के लिए, और किसी भी चीज़ की तुलना में अधिक "अंत से अंत" है।

ऐसा इसलिए है क्योंकि एक एपीआई तेजी से बदल रहा है जब यूनिट परीक्षण वास्तव में परेशान कर रहे हैं, जो अक्सर ऐसा होता है जब किसी परियोजना पर काम करते हुए ऊपर या अधिकांश मानदंडों का मिलान होता है।

क्या यह दृष्टिकोण एक अच्छा दृष्टिकोण है और इस प्रकार की परियोजनाओं के लिए पहले इकाई या एकीकरण परीक्षणों के साथ शुरू करना है या नहीं, यह निर्णय लेते समय किन मानदंडों पर विचार किया जाना चाहिए? क्या मुझे एपीआई के अधिक ठोस होने से पहले इन प्रकार की परियोजनाओं के परीक्षण के यूनिट का मूल्य याद नहीं है?


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

@FrankHileman वास्तव में, यह मेरा दृष्टिकोण है। लेकिन जब से मैं उत्सुक हूं मैं यह सुनिश्चित करना चाहता हूं कि मैं कुछ याद कर रहा हूं, तो मैं सही दृष्टिकोण कर रहा हूं।
एंडरलैंड

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

1
प्रोटोटाइप पर काम करने के मामले में परीक्षण बिल्कुल नहीं लिखना ठीक है। प्रोटोटाइप का लक्ष्य कामकाजी विचार की जांच करना है। प्रोटोटाइप के कार्यान्वयन से आवेदन की अपेक्षित डिजाइन को पहचानने में मदद मिलेगी।
Fabio

इसे बाहर का विकास कहा जाता है। आप निम्नलिखित पुस्तक की जांच कर सकते हैं, जो ठीक यही करती है: amazon.com/dp/0321503627
Eternal21

जवाबों:


7

क्या मुझे एपीआई के अधिक ठोस होने से पहले इन प्रकार की परियोजनाओं के परीक्षण के यूनिट का मूल्य याद नहीं है?

नहीं, तुम ठीक कर रहे हो

TDD के दो बड़े उद्देश्य हैं:

  • आंतरिक कार्यान्वयन 1 के बजाय वास्तविक उपयोग द्वारा इंटरफेस को परिभाषित करना
  • परीक्षण कवरेज को अधिकतम करना

जिस तरह से आप जाते हैं, टेस्ट कवरेज बहुत अच्छी तरह से अधिकतम हो सकता है। यही है, चाहे आप पहली बार छोटी , पृथक इकाइयों या बड़ी , "एकीकृत" इकाइयों का परीक्षण करें, आपके पास अपने कार्यान्वयन से पहले अपने परीक्षण लिखने का विकल्प है।

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

एक ही प्रभाव काफी हद तक कुछ अच्छे "आर्किटेक्चरिंग" और आरेख के साथ प्राप्त किया जा सकता है । लेकिन, वे उच्च स्तरीय परीक्षण अक्सर आपके आरेखों में आपके द्वारा याद की गई चीजों को प्रकट कर सकते हैं - या यह कि आप अपने "आर्किटेक्चर" कार्य में गलत हो गए हैं


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

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


1. यह एक भी लागू होता है, भले ही आप पूर्ण-पर TDD नहीं कर रहे हों। यहां तक ​​कि अगर आप अपने कार्यान्वयन से पहले सिर्फ 1 या 2 परीक्षण लिख रहे हैं , तो 1 या 2 परीक्षण आपको बहुत देर होने से पहले अपने इंटरफेस को परिभाषित या परिष्कृत करने में मदद कर सकते हैं!


1

मैंने आपके काम करने के तरीके पर काम किया है। और मैं आपको बताने वाला नहीं हूं कि आप नहीं कर सकते। मैं आपको कुछ ऐसी चीज़ों के बारे में चेतावनी दूँगा, जिन्हें आप चला सकते हैं।

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

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

ने कहा कि

मुझे पहले एकीकरण परीक्षण लिखना, कोड पर काम करना, और फिर एक बार एपीआई कुछ हद तक कठोर हो जाना वास्तव में इकाई परीक्षण जोड़ने पर काम करना आसान लगता है। परीक्षण के प्रकार जो मैं अपने मुख्य कार्य पर चला सकता हूं, इसलिए बोलने के लिए, और किसी भी चीज़ की तुलना में अधिक "अंत से अंत" है।

यह समझें कि एक इकाई परीक्षण केवल एक परीक्षण नहीं है जो एक वर्ग पर कार्य करता है। जब तक आप जिस एपीआई पर काम कर रहे हैं, उसका परीक्षण बिना निम्नलिखित में से किए बिना किया जा सकता है।

  • यह डेटाबेस से बात करता है
  • यह पूरे नेटवर्क में संचार करता है
  • यह फाइल सिस्टम को छूता है
  • यह आपके किसी अन्य इकाई परीक्षण के समान समय पर नहीं चल सकता है
  • इसे चलाने के लिए आपको अपने वातावरण (जैसे कि कॉन्फिग फाइल को एडिट करना) के लिए विशेष चीजें करनी होंगी।

माइकल फेदर्स: ए सेट ऑफ़ यूनिट टेस्टिंग रूल्स

इसलिए यदि आपके एंड-टू-एंड टेस्ट में एक से अधिक ऑब्जेक्ट शामिल हैं जो ठीक है। यह यूनिट टेस्टिंग है न कि ऑब्जेक्ट टेस्टिंग।

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

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