जोड़ी progamming प्रभावी जब एक नया अभ्यास विशेष रूप से TDD
तो सीखने है, तो आप एक समझौता के साथ दोनों हो सकता है। वृद्धिशील रूप से एक चुस्त फैशन में यह करो। पहले जोड़ी प्रोग्रामिंग पर ले लो। यह दोनों का आसान है। जोड़ी प्रोग्रामिंग के बाद सभी अभ्यास सीखने के लिए बहुत आसान हो जाएंगे और टीम द्वारा अधिक तेज़ी से और अधिक सुसंगतता के साथ अपनाया जाएगा। जोड़ी प्रोग्रामिंग पहली बार में से एक है यदि पहले इंजीनियर अभ्यास नहीं किया जाना चाहिए। सुनिश्चित करें कि यह प्रभावी ढंग से किया जाता है। नीचे जोड़ी प्रोग्रामिंग करने का विवरण है।
जोड़ा गया प्रोग्रामिंग सबसे शक्तिशाली प्रथाओं में से एक है जो एक विकास टीम सॉफ्टवेयर विकसित करते समय उपयोग कर सकती है। दो डेवलपर के साथ जोड़ना एक कंप्यूटर और कीबोर्ड का उपयोग कर एक कहानी कार्ड को सक्रिय रूप से विकसित करता है। प्रबंधकों को चिंता है कि युग्मित प्रोग्रामिंग का उपयोग करके उनकी प्रोग्रामिंग लागतों को दोगुना कर दिया जाएगा। पहली नज़र में, यह समझ में आता है कि वे क्यों सोच सकते हैं - सब के बाद - दो डेवलपर्स को एक ही काम पर एक साथ काम करने के लिए कहा जा रहा है। अभ्यास में, हालांकि, इस विकास तकनीक का उपयोग करते हुए एग्इल टीमों ने पाया है कि शुरुआती विकास (यूटा अध्ययन के अनुसार 15%) के लिए लागत में मामूली वृद्धि दोषों में कमी से ऑफसेट से अधिक है, एक छोटा और कम महंगा परीक्षण चक्र समर्थन और उत्पादन समर्थन के लिए कम आवश्यकता है।
हालांकि यह समझा जा सकता है कि प्रोग्रामर जोड़ी और काम करते हैं, उत्पादकता में सुधार करते हैं, इस तकनीक वास्तव में काम क्यों करती है (पुरानी कहानियों के बारे में सोचें, "दो सिर एक से बेहतर हैं।") यही कारण है कि :
- बेहतर गुणवत्ता - जोड़ी कोड समीक्षा को प्रोत्साहित करती है। टाइप किए जाने के बाद कई गलतियां पकड़ी जाती हैं। जोड़ा प्रोग्रामिंग का अर्थ है कोड की गुणवत्ता के प्रति प्रतिबद्ध हैं जो दो लोगों द्वारा निरंतर कोड समीक्षा की जाती है और हर समय बग को पहचानने और ठीक करने के लिए मिलकर काम कर रही हैं। यूटा विश्वविद्यालय द्वारा किए गए एक अध्ययन में पाया गया कि जोड़ों द्वारा लिखे गए कोड के लिए कोड में पाए गए दोषों की अंतिम संख्या औसतन 15% कम हो गई थी।
- कम समय खर्च "अटक" - प्रोग्रामिंग कठिन है। अक्सर डेवलपर्स एक समाधान खोजने के लिए संघर्ष करते हैं और उन्हें "अटक" से ज्यादा समय बिताते हैं। यदि आवश्यक हो तो मदद लेने के लिए विचारों को समझने और सहमत होने के लिए साझेदार होने के कारण समाधान खोजने की कोशिश में फंसने वाले अनुत्पादक समय की मात्रा कम हो जाती है।
- विचलन पर कम समय व्यय - एक डेवलपर व्यक्तिगत फोन कॉल या वेब सर्फिंग पर समय व्यतीत करने की संभावना कम करता है, या जब वह एक साथी के साथ काम कर रहा है तो छुट्टियों को ईमेल करता है।
- दो दृष्टिकोणों को समस्या के लिए लागू किया जाता है - अनुभव के अलग-अलग स्तर, विभिन्न समस्या निवारण शैलियों, विभिन्न सहायक कौशल सभी एक समस्या को तेजी से हल करने की संभावनाओं को बढ़ाते हैं। यूटा विश्वविद्यालय द्वारा किए गए अध्ययन में जोड़े द्वारा लिखे गए सॉफ़्टवेयर के लिए बेहतर समग्र डिज़ाइन और छोटी कोड लंबाई भी पहचानी गई।
- अज्ञात के कम डर - जब एक और डेवलपर के साथ युग्मित यह एक समस्या से निपटने या है की तुलना में यह जब अकेले काम नई तकनीक पर एक संभाल पाने के लिए प्रयास करने के लिए आसान है। वे पूरे आवेदन की एक बेहतर समझ के साथ, समय के साथ भी लाभ प्राप्त करते हैं। अंत में, परियोजना युग्मन के परिणामस्वरूप सिस्टम के प्रत्येक टुकड़े को समझने वाले कई लोगों के साथ समाप्त होती है।
- स्कोप में निर्माण करने की संभावना कम है - अक्सर डेवलपर्स स्वेच्छा से कार्यक्षमता को जोड़ते हैं जो आवश्यकताओं में संबोधित नहीं होते हैं। एक जोड़ी के साथ काम करते समय, दूसरा डेवलपर अपने साथी को कार्य पर रखने की अधिक संभावना रखता है।
- बेहतर टीम गतिशीलता - जोड़े गए दृष्टिकोण के कारण, लोग एक साथ काम करना सीखते हैं। वे अधिक बार बात करते हैं और जानकारी के बेहतर प्रवाह का अनुभव करते हैं। नतीजतन टीम गतिशीलता में सुधार। असल में, हमने पाया है कि आसपास के सर्वश्रेष्ठ टीम बिल्डिंग अनुभव एक ऐसे सॉफ्टवेयर का उत्पादन करने के लिए मिलकर काम कर रहे हैं जिसके बारे में आपका ग्राहक उत्साहित है। हर कोई एक सफल टीम का हिस्सा बनना पसंद करता है।
- ज्ञान के सिलो का उन्मूलन - डोमेन ज्ञान, कोड या प्रथाओं का ज्ञान टीम और डेवलपर जोड़ी के माध्यम से एक दूसरे के साथ घूर्णन आधार पर प्रचारित किया जाता है।
एक बार जब टीम युग्मन के साथ confortable है, तो टीडीडी ले लो। एक प्रतिशोध निम्नानुसार है:
टेस्ट-संचालित विकास (टीडीडी) एक सॉफ्टवेयर विकास इंजीनियरिंग अभ्यास है जिसमें विकास के छोटे विस्फोट शामिल हैं, जहां वांछित सुधार या नई कार्यक्षमता को कवर करने वाला एक नया परीक्षण केस पहले लिखा जाता है, फिर उत्पादन कोड को पास करने के लिए आवश्यक होता है परीक्षण लागू किया गया है, और अंततः सॉफ़्टवेयर को परिवर्तनों को समायोजित करने के लिए दोबारा प्रतिक्रिया दी जाती है। वास्तविक विकास से पहले परीक्षणों की उपलब्धता किसी भी बदलाव के बाद तेजी से प्रतिक्रिया सुनिश्चित करती है। प्रैक्टिशनर्स जोर देते हैं कि परीक्षण संचालित विकास सॉफ्टवेयर डिजाइन करने की एक विधि है, न केवल परीक्षण की विधि है। परीक्षण संचालित विकास एक शक्तिशाली अभ्यास है और जीवन चक्र में बाद में पाए गए दोषों में कमी के लिए एक प्रमुख योगदानकर्ता है। एक नई टीम को टीडीडी प्रैक्टिशनर के अनुभव के साथ दृढ़ता से प्रोत्साहित किया जाता है या अन्यथा टीडीडी कोचिंग प्राप्त होता है।
टेस्ट-संचालित विकास के लिए आवश्यक है कि स्वचालित इकाई परीक्षण, कोड की परिभाषा आवश्यकताओं को कोड के प्रत्येक पहलू से पहले लिखा गया हो ।इन परीक्षणों में ऐसे दावे होते हैं जो या तो सत्य या गलत होते हैं। परीक्षण चलाना सही व्यवहार की तीव्र पुष्टि देता है क्योंकि कोड विकसित होता है और फिर से प्रतिक्रिया की जाती है। XUnit अवधारणा के आधार पर परीक्षण ढांचे स्वचालित परीक्षण मामलों के सेट बनाने और चलाने के लिए एक तंत्र प्रदान करते हैं। टेस्ट-संचालित विकास चक्र: निम्नलिखित अनुक्रम उदाहरण द्वारा टेस्ट-प्रेरित विकास पुस्तक पर आधारित है, जो कई लोग अपने आधुनिक रूप में अवधारणा पर कैनोलिक स्रोत टेक्स्ट मानते हैं।
- एक परीक्षण लिखें। परीक्षण संचालित विकास में, प्रत्येक नया कहानी कार्ड एक परीक्षा लिखने से शुरू होता है। यह परीक्षण विफल हो जाएगा क्योंकि यह सुविधा लागू होने से पहले लिखा गया है। एक परीक्षण लिखने के लिए, डेवलपर को स्पष्टता और सुविधा की आवश्यकताओं को स्पष्ट रूप से समझना चाहिए। यह स्टोरी कार्ड के माध्यम से स्वीकृति मानदंडों के साथ पूरा किया जा सकता है जब आवश्यकताओं को पूरा किया गया हो। यह एक मौजूदा परीक्षण का एक आविष्कार, या संशोधन भी इंगित कर सकता है। कोड लिखे जाने के बाद यह परीक्षण-आधारित विकास बनाम यूनिट परीक्षणों की एक विभेदक विशेषता है: यह कोड लिखने से पहले डेवलपर को आवश्यकताओं पर ध्यान केंद्रित करता है, एक सूक्ष्म लेकिन महत्वपूर्ण अंतर।
- सभी परीक्षण चलाएं और देखें कि नया कोई विफल रहता है या नहीं। यह मान्य करता है कि परीक्षण दोहन सही ढंग से काम कर रहा है और नया परीक्षण गलती से बिना किसी नए कोड की आवश्यकता के गुजरता है। अपेक्षित कारण के लिए नया परीक्षण भी असफल होना चाहिए। यह चरण परीक्षण में स्वयं परीक्षण का परीक्षण करता है: यह संभावना है कि नया परीक्षण हमेशा पास होगा, और इसलिए बेकार होगा।
- कुछ कोड लिखें। अगला कदम कुछ कोड लिखना है जो परीक्षण को पास करने का कारण बनेंगे। इस चरण में लिखा गया नया कोड सही नहीं होगा और उदाहरण के लिए, परीक्षण को एक सुरुचिपूर्ण तरीके से पास कर सकता है। यह स्वीकार्य है क्योंकि बाद के चरणों में सुधार होगा और इसे बढ़ाया जाएगा। यह महत्वपूर्ण है कि लिखित कोड केवल परीक्षण पास करने के लिए डिज़ाइन किया गया हो; आगे नहीं (और इसलिए अवांछित) कार्यक्षमता की भविष्यवाणी की जानी चाहिए और किसी भी स्तर पर 'अनुमति' दी जानी चाहिए।
- स्वचालित परीक्षण चलाएं और उन्हें सफल देखें। यदि सभी टेस्ट केस अब पास हो जाते हैं, तो प्रोग्रामर आश्वस्त हो सकता है कि कोड सभी परीक्षण आवश्यकताओं को पूरा करता है। यह एक अच्छा बिंदु है जिससे चक्र के अंतिम चरण को शुरू किया जा सकता है।
- रिएक्टर कोड। अब कोड आवश्यकतानुसार साफ किया जा सकता है। परीक्षण के मामलों को फिर से चलाकर, डेवलपर आश्वस्त हो सकता है कि रिफैक्टरिंग किसी भी मौजूदा कार्यक्षमता को नुकसान नहीं पहुंचा रही है। डुप्लिकेशन को हटाने की अवधारणा किसी भी सॉफ्टवेयर डिजाइन का एक महत्वपूर्ण पहलू है। इस मामले में, हालांकि, यह परीक्षण कोड और उत्पादन कोड के बीच किसी भी डुप्लिकेशंस को हटाने के लिए भी लागू होता है - उदाहरण के लिए चरण 3 में परीक्षण पास करने के लिए, दोनों में जादू संख्या या स्ट्रिंग जो दोहराई गई थीं।
दोहराएं
एक और नए परीक्षण के साथ, चक्र को फिर कार्यक्षमता को आगे बढ़ाने के लिए दोहराया जाता है। चरणों का आकार जितना छोटा हो सकता है उतना छोटा हो सकता है, या अगर वह अधिक आत्मविश्वास महसूस करता है तो बड़ा हो जाता है। यदि परीक्षण को संतुष्ट करने के लिए लिखा गया कोड काफी तेज़ी से ऐसा नहीं करता है, तो चरण-आकार बहुत बड़ा हो सकता है, और शायद इसके बजाय छोटे टेस्टेबल चरणों का उपयोग किया जाना चाहिए। बाहरी पुस्तकालयों का उपयोग करते समय यह महत्वपूर्ण है कि वे इतनी छोटी न हों कि प्रभावी रूप से केवल पुस्तकालय का परीक्षण न करें, जब तक कि यह मानने का कोई कारण न हो कि लाइब्रेरी छोटी है या पर्याप्त रूप से सुविधा की सभी आवश्यकताओं को पूरा करने के लिए पर्याप्त सुविधा नहीं है मुख्य कार्यक्रम लिखा जा रहा है।
विकास शैली परीक्षण संचालित विकास का उपयोग करने के लिए कई पहलू हैं, उदाहरण के लिए "इसे सरल रखें, बेवकूफ" (केआईएसएस) और "आपको इसकी आवश्यकता नहीं है" (यागनी) के सिद्धांत। परीक्षणों को पारित करने के लिए केवल आवश्यक कोड लिखने पर ध्यान केंद्रित करके, डिजाइन अन्य तरीकों से अक्सर प्राप्त किए जाने से अधिक स्वच्छ और स्पष्ट हो सकते हैं। टेस्ट-संचालित विकास के लिए प्रोग्रामर को पहले परीक्षण मामलों में विफल होने की आवश्यकता होती है। विचार यह सुनिश्चित करना है कि परीक्षण वास्तव में काम करता है और एक त्रुटि पकड़ सकता है। एक बार यह दिखाए जाने के बाद, सामान्य चक्र शुरू होगा।इसे "टेस्ट-संचालित विकास मंत्र" बनाया गया है, जिसे लाल/हरा/रिफैक्टर कहा जाता है जहां लाल साधन विफल रहता है और हरा पास होता है। टेस्ट-संचालित विकास लगातार उन परीक्षण मामलों को जोड़ने के चरणों को दोहराता है जो असफल होते हैं, उन्हें गुजरते हैं, और रिफैक्टरिंग करते हैं। प्रत्येक चरण में अपेक्षित परीक्षण परिणामों को प्राप्त करने से प्रोग्रामर के कोड के मानसिक मॉडल को मजबूत किया जाता है, आत्मविश्वास बढ़ता है और उत्पादकता बढ़ जाती है
जोड़ी प्रोग्रामिंग = निरंतर कोड समीक्षा। इसके अलावा जोड़ी प्रोग्रामिंग उस गोद लेने के लिए महंगी नहीं है - लेकिन मैं 2 नौसिखियों/शुरुआती लोगों को जोड़ने के खिलाफ सलाह दूंगा। एक जोड़ी में हमेशा एक मध्यवर्ती-विशेषज्ञ व्यक्ति होना चाहिए जो जानता है कि क्षेत्र को अच्छी तरह से संशोधित किया जा रहा है। दूसरी ओर, टीडीडी मास्टर करना बहुत मुश्किल है .. अपना समय लें .. विस्फोट न करें। खराब परीक्षण कोई परीक्षण से भी बदतर हैं। – Gishu