यदि आप TDD (Test-Driven Development) नहीं करते हैं तो क्या अपने आप को (या अपनी टीम को) "फुर्तीली" कहना सही है?
यदि आप TDD (Test-Driven Development) नहीं करते हैं तो क्या अपने आप को (या अपनी टीम को) "फुर्तीली" कहना सही है?
जवाबों:
हां, हां, हां, लाख बार हां।
चंचलता एक दर्शन है, टीडीडी एक विशिष्ट पद्धति है।
अगर मैं वास्तव में योग्य होना चाहता था, तो मैं केवल यह बता सकता हूं कि xDD की काफी भिन्नताएँ हैं - जो कि उनके अधिवक्ता गहराई से समझाएंगे, TDD नहीं हैं - लेकिन वे अभी भी पहले परीक्षण के लिए पर्याप्त रूप से बंधे हुए हैं ताकि धोखा हो।
तो यह कहता है - आप "परीक्षण पहले" विकास किए बिना चुस्त हो सकते हैं (जिस तरह से घोटाले काम करता है - वहां कहीं भी नहीं है कि आप कोड कैसे लिखते हैं, इसके बारे में कुछ निर्दिष्ट नहीं हैं)। एक कंबन बोर्ड को देखें, सभी प्रकार की चुस्त कार्यप्रणाली को देखें।
क्या आपको यूनिट टेस्ट चाहिए? बेशक, आप सभी प्रकार के कारणों से करते हैं - और आप अच्छी तरह से एक तर्क दे सकते हैं कि आप इकाई परीक्षणों के बिना चुस्त नहीं हो सकते (हालांकि मुझे संदेह है कि आप हो सकते हैं) - लेकिन आपको उन्हें पहले लिखने की ज़रूरत नहीं है चुस्त।
और अंत में, यह भी उतना ही सच है कि आप अपने समग्र देव दर्शन की परवाह किए बिना पहले परीक्षण करने के लिए फुर्तीले और मजबूत तर्क के बिना टेस्ट फर्स्ट कर सकते हैं ।
ऐसा लगता है कि अन्य (अधिक ठोस प्रतिनिधि के साथ) एक समान राय है ...
http://www.twitter.com/unclebobmartin/status/208621409663070208
@unclebobmartin: http://t.co/huxAP5cS हालांकि TDD और OOD के बिना एजाइल करना असंभव नहीं है, लेकिन यह मुश्किल है। TDD के बिना पुनरावृत्ति दर ...
(ट्वीट में लिंक लिंक्डइन पर पूरा जवाब है)
"फुर्तीली होना" का अर्थ बस फुर्तीले घोषणापत्र के मूल्यों और सिद्धांतों का पालन करना है । उस दस्तावेज़ में कुछ भी उस मामले के लिए टीडीडी, या यहां तक कि इकाई परीक्षण का उल्लेख नहीं है।
तो हाँ, आप TDD या इकाई परीक्षण किए बिना चुस्त हो सकते हैं।
मैं हालांकि यह सिफारिश नहीं होगा ...
हाँ ,
चुस्त मूल्यों में से एक को देखो:
व्यक्तियों और प्रक्रियाओं और उपकरणों पर बातचीत
इसका जवाब उसे पहले ही दे देना चाहिए। टीडीडी एक निश्चित पद्धति है, एक प्रक्रिया है। वास्तव में एक प्रक्रिया जो संभवतः चुस्त विकास प्रक्रियाओं में इस्तेमाल की जा सकती है, लेकिन इससे ज्यादा कुछ नहीं। मुझे लगता है कि फुर्तीले होने पर शायद टीडीडी कला की स्थिति है। लेकिन मुझे लगता है कि चुस्त की अवधारणा अभी भी चल पाएगी, भले ही टीडीडी को अन्य प्रथाओं द्वारा प्रतिस्थापित किया गया हो।
मैं इसे इस तरह सम्मिलित करूंगा:
आज TDD फुर्तीले होने के लिए डिफैक्टो-स्टैंडर्ड है
टीडीडी के बिना चुस्त होने के तरीके हो सकते हैं
मैं कहता हूँ
यदि आप मूल स्रोत पर वापस जाते हैं तो http://en.wikipedia.org/wiki/Extreme_Programming TDD प्रक्रिया के लिए मौलिक है; परीक्षण आवश्यकताओं के विनिर्देशों और झरने के उपयोग के मामलों की जगह लेते हैं, जीवित दस्तावेज और कामकाजी उदाहरणों के रूप में कार्य करते हैं, आदि वे अपरिहार्य हैं।
हालाँकि, अब चारों ओर तैरने वाले 'फुर्तीले' के इतने अलग-अलग स्वाद हैं कि यह पूरी तरह से संभव है कि उनमें से एक टीडीडी बच जाए
संपादित करें: @ प्रश्न की मर्फ़ व्याख्या सबसे पसंदीदा है। बिल्ली मैंने भी इसे उखाड़ फेंका, यह एक अच्छा जवाब है। हालांकि , मैं अपनी स्थिति को बनाए रखता हूं कि एजाइल मेनिफेस्टो सिद्धांतों का एक समूह है, न कि एक विकास पद्धति। मैं वास्तव में प्रथाओं को लागू करने वाले लाभों को लागू किए बिना "ओह हाँ मैं चुस्त हूँ" कहने में कोई फायदा नहीं देखता। विशेष रूप से:
कार्य सॉफ्टवेयर प्रगति का प्राथमिक माप है।
तथा
चंचल प्रक्रियाएं सतत विकास को बढ़ावा देती हैं। प्रायोजकों, डेवलपर्स और उपयोगकर्ताओं को अनिश्चित काल तक निरंतर गति बनाए रखने में सक्षम होना चाहिए।
मेरे लिए, इन दो सिद्धांतों का मतलब है अगर टीडीडी की आवश्यकता नहीं है - कम से कम मुझे इसके बिना उन्हें प्राप्त करने का कोई अन्य तरीका नहीं पता है!
संपादित 2: हाँ, तकनीकी रूप से आप बाद में परीक्षण लिख सकते हैं; लेकिन मैं अभी भी परीक्षण-प्रथम / टीडीडी को मौलिक मानता हूं। इसलिए नहीं कि आप इसके बिना "फुर्तीले" नहीं हो सकते, बल्कि इसलिए कि आप इसके साथ अधिक चुस्त होंगे । परीक्षण-पहले / परीक्षण-संचालित परीक्षण-बाद / परीक्षण-बाद की तुलना में कहीं अधिक कुशल दृष्टिकोण है। परीक्षण वर्णन कर रहे हैं आवश्यकताओं । बाद में उन्हें बंद मत करो ;-)
संपादित 3: मैं अंत में यह पता लगा लिया कि मुझे मर्फ़ के बहुत ही लिखित उत्तर के बारे में क्या परेशान करता है। यह धारणा है कि कोई वास्तव में ऐसा किए बिना "एजाइल" हो सकता है । और "कर रहा है" (जैसा कि ऊपर दिखाया गया है) को बहुत ज्यादा TDD की आवश्यकता होती है।
सख्ती से, आप चुस्त घोषणापत्र का पालन करके चुस्त हैं । व्यवहार में, एक कोड-आधार तब तक चुस्त नहीं होता जब तक कि उसके पास अच्छा परीक्षण कवरेज न हो। आप TDD कर सकते हैं और कार्यक्षमता के विकास के पहले / दौरान परीक्षण लिख सकते हैं या इसके विकसित होने के बाद कार्यक्षमता के लिए परीक्षण लिख सकते हैं। यह आमतौर पर आसान और अधिक प्रभावी है, हालांकि इसे टीडीडी तरीका है।
आप चुस्त हो सकते हैं, लेकिन सुधार के लिए शायद जगह है।
चुस्त में सिद्धांतों में से एक यह है कि आपको परिवर्तन का जवाब देने में सक्षम होना चाहिए। इसका मतलब है कि अग्रिम में पता नहीं है कि आपको क्या बनाना है। यदि आप एक झरने की प्रक्रिया का पालन कर रहे थे, तो आपको अग्रिम में x महीने पहले ही पता चल जाएगा कि आपको क्या बनाने की आवश्यकता है, और आप अलग-अलग सॉफ़्टवेयर घटकों को डिज़ाइन कर सकते हैं ताकि वे प्रत्येक किसी बड़ी योजना में भाग लें, अंतिम उत्पाद तक पहुंच सकें (कम से कम आपको लगता है कि होगा) यह था तो)। लेकिन जब से चुस्त हुक्म चलता है कि आप नहीं जानते कि अंतिम उत्पाद क्या है, तो आप कभी नहीं जानते कि आप किस कोड का उपयोग करेंगे, और इससे भी महत्वपूर्ण बात यह है कि इसे कब बदला जाएगा।
इसलिए आपको यह सुनिश्चित करने के लिए एक संपूर्ण परीक्षण सूट की आवश्यकता है कि आपके द्वारा पहले से निर्मित सुविधाओं को काम करना जारी रखें क्योंकि कोड आधार संशोधित है।
लेकिन वह खुद टीडीडी नहीं है। यदि आप कोड लिखने के बाद परीक्षण लिखते हैं, तो यह टीडीडी नहीं है। लेकिन टीडीडी एक अन्य पहलू के साथ मदद करता है, यह अतिप्राप्ति को रोकता है।
अपनी खुद की फुर्तीली टीम में, मैं डेवलपर्स राइटिंग कोड के साथ संघर्ष कर रहा हूं, उनका मानना है कि परियोजना में बाद में उपयोगी हो जाएगा। अगर यह झरना विकास होता तो शायद ठीक होता, क्योंकि वे अगले एक्स महीनों के लिए प्रोजेक्ट प्लान में किसी चीज के लिए समर्थन जोड़ रहे थे।
लेकिन अगर आप चुस्त सिद्धांतों का पालन कर रहे हैं, तो आपको यह कोड नहीं लिखना चाहिए, क्योंकि आपको पता नहीं है कि क्या यह आवश्यक होगा। अगले सप्ताह के लिए योजना बनाई गई सुविधा को अचानक अनिश्चित काल के लिए स्थगित किया जा सकता है।
यदि आप TDD सिद्धांत का सही ढंग से पालन करते हैं, तो कोड की एक पंक्ति के परीक्षण से पहले एक भी लाइन मौजूद नहीं हो सकती है (व्यक्तिगत रूप से मैं परीक्षण के बिना कुछ तुच्छ कोड लिख सकता हूं), और यदि आप स्वीकृति परीक्षण लिखकर शुरू करते हैं, तो आप केवल लागू करते हैं आवश्यक सुविधाओं को देने के लिए वास्तव में क्या आवश्यक है।
इसलिए टीडीडी ओवरप्रोडक्शन से बचने में मदद करता है, जिससे टीम यथासंभव प्रभावी हो सकती है, जो एक मुख्य चुस्त सिद्धांत भी है।
कार्य सॉफ्टवेयर प्रगति का प्राथमिक माप है
क्या आप TDD (परीक्षण संचालित विकास) किए बिना चुस्त हो सकते हैं?
संक्षिप्त उत्तर: हां।
दीर्घ उत्तर: इस प्रश्न के बहुत अच्छे उत्तर हैं और बहुत अच्छे संदर्भ हैं। मैं उन बिंदुओं पर बहस करने की कोशिश नहीं करूंगा।
मेरे अनुभव में, Agile हाथ में परियोजना के लिए लीन-नेस के सही स्तर को चुनने के बारे में है। लीन-नेस से मेरा क्या मतलब है? और, मैं इसे इस उत्तर में क्यों लाऊं?
झुक का मतलब यह नहीं है कि आपकी विधि से हर चीज को काट दिया जाए। जैसा कि हमारे सहयोगियों में से एक ने उल्लेख किया है, आपको अपने व्यवहार में टीडीडी या यूनिट टेस्ट शामिल करने की आवश्यकता नहीं है। हालांकि, परियोजना के संदर्भ में आप खुद को पाते हैं, यह फायदेमंद हो सकता है या नहीं।
आइए एके में स्थित एक बड़े अनाम रिटेलर के लिए आपूर्ति श्रृंखला के बारे में सोचें। उपभोक्ता है। वे दुकान में जाते हैं। दुकान ट्रक के माध्यम से विभिन्न उत्पादों को प्राप्त करता है। ट्रक, संभवतः, उन उत्पादों को एक गोदाम से प्राप्त करते हैं। गोदाम विभिन्न निर्माताओं से शिपमेंट द्वारा भरा गया है। बदले में निर्माताओं को आपूर्ति की पूरी श्रृंखला होती है।
क्या होता है जब उपरोक्त आपूर्ति श्रृंखला में शिपिंग के लिए महाप्रबंधक को बताया जाता है कि उसे हर साल $ 1 मिलियन वार्षिक बोनस मिलेगा कि उसके पास बेड़े में 10 से कम ट्रक हैं? वह तत्काल बेड़े को 9 ट्रकों को काट देगा। इस "भयानक" परिदृश्य में, यह वेयरहाउस में संग्रहीत माल की मात्रा को बढ़ाएगा (उस नोड में लागत को बढ़ाकर)। और, यह स्टोर मोर्चों को "भूखा" रखेगा।
तो, समग्र आपूर्ति श्रृंखला ग्रस्त है अगर स्थानीय अनुकूलन पूरे के विचार के बिना अनुमति है।
वापस TDD और UT के लिए। टीडीडी एक आवश्यकता अभिव्यक्ति तंत्र है। सिस्टम उन बाधाओं को अवश्य पूरा करता है। काफी उचित। TDD उपयोग केस ड्राइव डेवलपमेंट की आवश्यकताओं के व्यवहार या उपयोगकर्ता स्टोरी संचालित विकास की आवश्यकताओं के व्यवहार को बदल सकता है। यूनिट टेस्ट और रिक्वायरमेंट वर्क लोड को मिलाने का "झुकाव" लाभ है। समग्र कार्य भार कम हो तो यह लाभ है। यह नहीं है, अगर समग्र आपूर्ति श्रृंखला का कार्य भार बढ़ा हुआ है (चलो गुणवत्ता को ठीक करें)।
और इसलिए, आपने पूछा: क्या आप TDD (परीक्षण संचालित विकास) किए बिना चुस्त हो सकते हैं?
जरूर आप कर सकते हो। एक अलग, और शायद बेहतर, सवाल यह है: - अगर मैं इस परियोजना में टीडीडी लागू करता हूं, तो क्या इससे सॉफ्टवेयर की समग्र रूप से अधिक कुशल डिलीवरी या कम कुशल परिणाम होगा?
एक पसंदीदा लेखक को उद्धृत करने के लिए ... जेआरआर टोल्किन
अंगूठियों का मालिक। रिंगों की फैलोशिप। पीजी 94 'और यह भी कहा जाता है', फ्रोडो ने जवाब दिया, 'काउंसिल के लिए कल्पित बौने के लिए नहीं, क्योंकि वे दोनों नहीं और हाँ करेंगे।'
तो, अंत में, ... यह निर्भर करता है। आपको प्रश्न का उत्तर देना चाहिए। कौन सा पथ सबसे अधिक कुशलता से आपको आपके इच्छित लक्ष्य तक ले जाएगा।
टीडीडी को या टीडीडी को नहीं। यह सवाल बना हुआ है। :-)
पुनश्च - मैं एक अन्य साइट पर भी इस जवाब को दोहरा रहा हूं। https://www.ibm.com/developerworks/mydeveloperworks/blogs/c914709e-8097-4537-92ef-8982fc416138/?maxresults=15&sortby=4&lang=en
एक महल की तुलना में इंजीनियरिंग।
यदि आप एजिले का उपयोग कर एक महल के इंजीनियर थे। आप उन भागों को लिखेंगे जिनके विशिष्ट कार्य हैं और उपयोगकर्ता को कार्यात्मक भागों का उपयोग करने के लिए प्रोत्साहित करते हैं, भविष्य की डिज़ाइन को उपयोगकर्ता की प्रतिक्रियाओं के साथ समायोजित करते हैं। तो, आप कालकोठरी का निर्माण करते हैं, और कालकोठरी के साथ संवाद करते हैं, आप भूमि और कालकोठरी द्वारा प्रदान की गई नींव का परीक्षण करेंगे। आप पैरापेट का निर्माण करेंगे और नाइटवॉचमेन से पूछेंगे कि क्या यह अच्छा है। आप दीवारों का निर्माण करेंगे और सैनिकों के रक्षात्मक मूल्य का परीक्षण करेंगे। आप रसोई का निर्माण करेंगे और रसोइयों को यह देखना होगा। और इस प्रक्रिया के दौरान, वर्तमान संरचना के अलावा हर भाग आज तक कार्य करेगा। इसलिए जब आप कालकोठरी समाप्त कर लेते हैं, तो आप कैदियों को अंदर ले जा सकते हैं। लेकिन जब आप अंत में महल खत्म कर लेते हैं, तो आपको पता चलता है कि कैदी भाग निकले।
टीडीडी के साथ, आप कैदियों के साथ दिखते हैं, और देखें कि क्या वे बच जाते हैं। तब आप जेल की कोठरी लिखते हैं जब तक कि वे बच नहीं सकते। फिर आप कोड को साफ-सफाई से अनावश्यक कोशिकाओं को हटाने, और गलत स्थान पर लगी पट्टियों को हटाने और फिर से परीक्षण करने के लिए फिर से तैयार करेंगे। कैदी नहीं भागे। आपको जेलर के साथ संवाद करने की आवश्यकता नहीं है। और यह पूरा करने के बाद आप पूरे महल को वितरित कर सकते हैं। उस बिंदु पर जेलर कहता है कि कालकोठरी को अधिक कोशिकाओं की आवश्यकता है, और अब आपको नींव की अधिक खुदाई करनी होगी।
यदि आप एजाइल और टीडीडी को मिलाते हैं। आप देखेंगे कि यदि कैदी भाग निकले, तो जेलर से पूछें कि क्या जरूरत है। वह कहता है कि आपको अधिक कोशिकाओं की आवश्यकता है। आप कैदियों के होने का नाटक करने के लिए कुछ यादृच्छिक लोगों को पकड़ लेंगे और देखेंगे कि क्या वे बच जाते हैं। यदि वे नहीं करते हैं, तो आप इसे जेलर को दिखाते हैं, और वह इससे खुश है। फिर आप पैरापेट बनाना शुरू करते हैं।
इसलिए दोनों अलग-अलग समस्याओं का समाधान करते हैं। Agile उपयोगकर्ताओं की ज़रूरतों के आधार पर बदलती आवश्यकताओं के साथ मदद करता है क्योंकि वे उस प्रक्रिया में उत्पाद को विकसित करते हुए देखते हैं जहाँ इसे अनुकूलित करना सबसे आसान है। इसमें समग्र डिज़ाइन से टूटे हुए स्थिर परिवर्धन को जारी करना शामिल है।
TDD पूर्वानुमान विफलता की समस्या को हल करता है। असफलता की खोज करना और उसे ठीक करना क्योंकि यह प्रक्रिया में एक बिंदु पर होता है जहां इसे ठीक करना सबसे आसान है। इसमें समग्र डिजाइन से कोड की स्थिर डी-कपल्ड इकाइयों का परीक्षण शामिल है।
TDD को एजाइल के विस्तार के रूप में देखना आसान है, क्योंकि वे दोनों एक ही पैटर्न, यूनिट संचालित प्रगति और समीक्षा का पालन करते हैं। अंतर यह है कि एजाइल में इकाइयाँ बाहरी रूप से पूर्ण रूप से कार्य करती हैं, जबकि टीडीडी में इकाइयाँ एक हिस्से के रूप में कार्य करती हैं, और बाहरी समीक्षा के लिए कार्य उत्पाद का उत्पादन नहीं कर सकती हैं। और दोनों प्रक्रियाएं अलग-अलग जरूरतों (प्रयोज्यता बनाम शुद्धता) को नियंत्रित करती हैं। चूंकि दोनों इकाइयों में विकसित होने की प्रक्रिया पर काम करते हैं, दोनों समीक्षा प्रक्रियाएं समान बिंदुओं पर हो सकती हैं, जिसमें टीडीडी को अधिक सूक्ष्म रूप से विभाजित किया गया है।
फुर्तीली आपको हर पुनरावृत्ति पर अनुसूची और गुणवत्ता जोखिमों को संबोधित करने और कम करने के लिए मजबूर करती है। यानी TDD को चंचल माना जाना जरूरी नहीं है ।
हालांकि, विशेष रूप से पुनरावृत्तियों या लोगों की एक बड़ी संख्या के साथ एक परियोजना के लिए टीडीडी गुणवत्ता के जोखिम को कम करने के लिए एक जबरदस्त तकनीक है। इस तरह की परियोजना में, टीडीडी शुरुआती पुनरावृत्तियों में कुछ अनुसूची जोखिम जोड़ देगा, क्योंकि आपको परीक्षण मामलों को भी लिखना होगा। हालांकि, टीडीडी बाद में पुनरावृत्तियों में भारी लागत बचत देता है क्योंकि यह लगातार गुणवत्ता जोखिमों को कम करता है। यानी TDD की सिफारिश की जाती है।