यूनिट परीक्षण नौसिखिया एक इकाई परीक्षण के लिए सर्वोत्तम प्रथाओं


29

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

मैं बस एक बड़े पैमाने पर परियोजना शुरू करने वाला हूं, जिसे पूरा करने में कुछ महीने लग सकते हैं और जब तक मैं उन्हें (हमेशा की तरह) लिखता हूं, मैं तत्वों का परीक्षण करने की कोशिश करूंगा, अगर यूनिट परीक्षण मुझे समय बचा सकता है तो मैं सोच रहा हूं।

मैं सोच रहा था कि क्या कोई अच्छी सलाह दे सकता है:

  1. क्या मुझे परियोजना की शुरुआत में इकाई परीक्षण को देखना चाहिए और संभवतः एक टीडीडी दृष्टिकोण अपनाना चाहिए।
  2. क्या मुझे प्रत्येक परीक्षण पूरा होने के बाद परीक्षण करना चाहिए।
  3. क्या मुझे प्रोजेक्ट पूरा करना चाहिए और फिर अंत में यूनिट टेस्ट लिखना चाहिए।



जवाबों:


29

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

सबसे पहले कुछ यूनिट टेस्ट लिखना है। वे पहली बार में सही नहीं है। बस अपने आप को सिखाएं कि कोड की छोटी इकाइयों का परीक्षण कैसे करें और घटकों को अलग करने के लिए मॉकिंग का उपयोग कैसे करें।

यह सबसे बड़ा समय लेने वाला है लेकिन अब तक का सबसे बड़ा भुगतान है। एक बार जब आप नोटिस करते हैं कि अब आपको 14 वेब पेजों के माध्यम से पेज नहीं करना है, तो जिस पर आप परीक्षण करना चाहते हैं, आपको पता चल जाएगा कि मैं किस बारे में बात कर रहा हूं।

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

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

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

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


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

@ क्या आपके पास कुछ संदर्भ हैं जो मैं "लेखन इकाई परीक्षणों को अच्छी तरह से" पर अध्ययन कर सकता हूं?
गैस्टन

9

मैं दूसरों से सहमत हूं (निश्चित रूप से अंत में अपने परीक्षण नहीं लिखते हैं, टीडीडी को सीखने में समय लगता है, परीक्षण के साथ शुरू करें हालांकि आप अंततः पूर्ण टीडीडी के लिए लक्ष्य कर सकते हैं)। लेकिन मैं आपकी टिप्पणी के जवाब में एक बात जोड़ना चाहता था: "मैं सोच रहा था कि क्या यूनिट परीक्षण मुझे समय बचा सकता है।"

मेरा जवाब एक असमान है हाँ। मैंने 10 साल पहले TDD अप्रोच सरका सीखा था, बिना परीक्षण के समान समय कोडिंग के बाद। इन दिनों, अगर मैं कुछ कम कर रहा हूं (<250 लोकेशन) और सरल है, या कुछ फेक है, तो मैं इसे TDD नहीं करूंगा। अन्यथा, मैं करता हूं, और ठीक है क्योंकि यह समय बचाता है।

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

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


1
कम डर के लिए +1। और मैं इस हफ्ते एक टेस्टलेस कोडबेस को रिफैक्ट कर रहा हूं। । ।
व्याट बार्नेट

2
महान उद्धरण: "आप अपने डर को परीक्षणों में बदल देते हैं, और फिर कंप्यूटर चिंता को स्वचालित करता है"!
रिचवेल

5
  1. क्या मुझे शुरू में इकाई को देखना चाहिए और एक टीडीडी दृष्टिकोण अपनाना चाहिए।

  2. क्या मुझे परीक्षण लिखना चाहिए क्योंकि मैं प्रत्येक अनुभाग पूरा होने के बाद साथ जाता हूं।

इनमें से कोई भी, लेकिन तीसरा विकल्प नहीं

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

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

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


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

2

मुझे लगता है कि एक नौसिखिया के लिए सबसे अच्छी बात यह है कि कुछ कोड कट्स से निपटना है जो खुद को इकाई परीक्षण के लिए उधार देते हैं। उदाहरण के लिए; ई-मेल पते को मान्य करना। जब आप इनमें से कुछ कोड कट्स से निपटेंगे तो TDD प्राकृतिक प्रवाह बन जाएगा। ई-मेल पता सत्यापनकर्ता के लिए निम्नलिखित कोड काटा देखें जो मैंने उल्लेख किया है: ई-मेल सत्यापनकर्ता

कोड कटास आप में से उन लोगों के लिए क्या है, जो नहीं जानते हैं, की व्याख्या के लिए, निम्नलिखित लिंक देखें: कोड कटास

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