पूर्ण कवरेज प्राप्त करने के लिए टीम को टीडीडी में बदलने के बाद सभी संभावित परीक्षण मामलों को लिखना एक अच्छा विचार है?


17

मान लें कि हमारे पास किसी भी इकाई / कार्यात्मक परीक्षणों के बिना एक बड़ा उद्यम-स्तर का आवेदन है। बहुत तंग समय सीमा के कारण विकास के दौरान कोई परीक्षण-संचालित विकास प्रक्रिया नहीं थी (मुझे पता है कि हमें कभी भी किसी निश्चित समय सीमा का वादा नहीं करना चाहिए जब हम निश्चित नहीं होते हैं, लेकिन जो किया जाता है!)

अब जब सभी समय सीमाएं बीत गईं और चीजें शांत हो गईं, तो हर कोई हमें एक उत्पादक टीडीडी / बीडीडी आधारित टीम में बदलने के लिए सहमत हो गया ... याय!

अब प्रश्न उस कोड के बारे में है जो हमारे पास पहले से है: (1) क्या अभी भी विकास के अधिकांश मामलों को रोकना या शुरुआत से ही पूरे संभव परीक्षण मामलों को लिखना ठीक है या अच्छा विचार है, भले ही सब कुछ पूरी तरह से ठीक हो रहा हो (फिर भी!) ? या (2) कुछ बुरा होने की प्रतीक्षा करना बेहतर है और फिर फिक्स के दौरान नई इकाई परीक्षण लिखें, या (3) यहां तक ​​कि पिछले कोड के बारे में भूल जाएं और केवल नए कोड के लिए इकाई परीक्षण लिखें और अगले प्रमुख रिफ्लेक्टर के लिए सब कुछ स्थगित करें।

कुछ अच्छे और जैसे संबंधित लेख हैं इस एक । मुझे अभी भी यकीन नहीं है कि अगर हम इस पर विचार करने के लायक हैं तो हमारे पास बहुत सीमित समय है और कई अन्य परियोजनाएं / कार्य हमारी प्रतीक्षा कर रहे हैं।

नोट : यह प्रश्न एक विकास टीम में पूरी तरह से अजीब स्थिति की व्याख्या / कल्पना कर रहा है। यह मेरे या मेरे किसी भी सहयोगी के बारे में नहीं है; यह सिर्फ एक काल्पनिक स्थिति है। आपको लगता है कि ऐसा कभी नहीं होना चाहिए या विकास प्रबंधक इस तरह की गड़बड़ी के लिए जिम्मेदार है! लेकिन वैसे भी, क्या किया जाता है। यदि संभव हो, तो कृपया नीचे न झुकें क्योंकि आपको लगता है कि ऐसा कभी नहीं होना चाहिए।



6
आपको शायद अगली बार समय सीमा आने की तैयारी करनी चाहिए और आपको टीडीडी करने की अनुमति नहीं है। संभवत: यह बताकर कि जिसने भी तकनीकी ऋण-मुक्ति का अंतिम दौर चलाया, वह महान विचार क्यों नहीं था।
जोंशरशेप

1
@ मुझे लगता है कि यह कोई दोहरा प्रश्न नहीं है। उल्लिखित टीम के पास किसी भी प्रकार के परीक्षण नहीं हैं (एकीकरण परीक्षण भी नहीं हैं)
मिशेल गोकन

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

1
सभी संभावित परीक्षण मामलों को लिखना संभव नहीं है। यह केवल उन सभी परीक्षण-मामलों को लिखने के लिए उपयोगी है जिनकी आप परवाह करते हैं। उदाहरण के लिए, यदि आपको किसी ऐसे फ़ंक्शन की आवश्यकता है जो किसी intमान को स्वीकार करेगा और कुछ विशिष्ट लौटाएगा, तो हर संभव intमूल्य के लिए एक इकाई-परीक्षण लिखना संभव नहीं है , लेकिन यह संभवतः कुछ उपयोगी मूल्यों का परीक्षण करने के लिए समझ में आता है जो यात्रा-अप कर सकते हैं कोड, जैसे कि नकारात्मक संख्या ( minintशून्य) maxint, आदि, यह सुनिश्चित करने के लिए कि कुछ किनारे-मामले कवर किए गए हैं।
क्रिस्टोफर

जवाबों:


36

बहुत तंग समय सीमा के कारण विकास के दौरान कोई परीक्षण-संचालित विकास प्रक्रिया नहीं थी

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

जब तक आप इसे इस तरह से देखते हैं, आप टीडीडी के लिए तैयार नहीं हैं। TDD कुछ ऐसा नहीं है जिसे आप धीरे-धीरे कम कर सकते हैं। आप या तो जानते हैं कि यह कैसे करना है या आप नहीं करते हैं। यदि आप इसे आधा करने की कोशिश करते हैं तो आप इसे बनाने जा रहे हैं और अपने आप को खराब दिखते हैं।

टीडीडी एक ऐसी चीज है जिसे आपको पहले घर पर अभ्यास करना चाहिए। इसे करना सीखें, क्योंकि यह अब आपको कोड करने में मदद करता है । इसलिए नहीं कि किसी ने आपको ऐसा करने के लिए कहा था। इसलिए नहीं कि जब आप बाद में बदलाव करेंगे तो यह मदद करेगा। जब यह कुछ ऐसा हो जाता है जो आप कर रहे हैं क्योंकि आप जल्दी में हैं तो आप इसे पेशेवर रूप से करने के लिए तैयार हैं।

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

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

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

यदि आप यह नहीं देख सकते हैं कि कैसे, अपने दम पर, आप तेजी से समय सीमा को पूरा करने में मदद कर सकते हैं तो आप काम में TDD के लिए तैयार नहीं हैं। आपको घर पर अभ्यास करने की आवश्यकता है।

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

क्या टीम को TDD में बदलने के बाद सभी संभावित परीक्षण मामलों को लिखना एक अच्छा विचार है?

भले ही टीम जो कर रही है वह हमेशा सभी संभावित परीक्षण मामलों को लिखने के लिए एक अच्छा विचार नहीं है। सबसे उपयोगी परीक्षण मामलों को लिखें। 100% कोड कवरेज लागत पर आता है। निर्णय कम करने के नियम को अनदेखा न करें क्योंकि निर्णय लेना कठिन है।

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

(1) क्या यह अभी भी ठीक है या अधिकांश विकास को रोकने के लिए अच्छा विचार है और शुरू से ही पूरे संभव परीक्षण मामलों को लिखना शुरू कर दिया है, भले ही सब कुछ पूरी तरह से ठीक हो रहा हो (अभी तक!)। या

नहीं। यह "पूरी तरह से फिर से लिखना" सोच है। इससे कठिन जीता हुआ ज्ञान नष्ट हो जाता है। परीक्षण लिखने के लिए प्रबंधन से समय न मांगें। बस टेस्ट लिखो। एक बार जब आप जानते हैं कि आपका क्या करना है, तो परीक्षण आपको धीमा नहीं करेंगे।

(2) कुछ बुरा होने की प्रतीक्षा करना बेहतर है और फिर फिक्स के दौरान नई इकाई परीक्षण लिखें, या

(3) यहां तक ​​कि पिछले कोड के बारे में भूल जाते हैं और केवल नए कोड के लिए यूनिट टेस्ट लिखते हैं और अगले प्रमुख रिफ्लेक्टर के लिए सब कुछ स्थगित करते हैं।

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

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

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


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

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

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

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

3
TDD = कर सकते हैं = प्रदर्शन में वृद्धि अगर परीक्षण और कोड समानांतर में विकसित कर रहे हैं, जबकि कार्यक्षमता डेवलपर के दिमाग में ताजा है। कोड समीक्षाएँ आपको बताएंगे कि क्या कोई अन्य व्यक्ति सोचता है कि कोड सही है। परीक्षण के मामले आपको बताएंगे कि क्या विनिर्देश, जैसा कि एक परीक्षण मामले में सन्निहित है, कार्यान्वित किया जा रहा है। अन्यथा, हाँ, TDD एक ड्रैग हो सकता है खासकर अगर कोई कार्यात्मक कल्पना नहीं है और परीक्षण लेखक रिवर्स इंजीनियरिंग भी कर रहा है।
ऑस्टिन में जूली

22

क्या यह अभी भी ठीक है या अधिकांश विकास को रोकने के लिए अच्छा विचार है और शुरू से ही संभव परीक्षण मामलों को लिखना शुरू कर रहा है [...]?

विरासत 1 कोड को देखते हुए , इन स्थितियों में इकाई परीक्षण लिखें:

  • जब कीड़े को ठीक करना
  • जब refactoring
  • मौजूदा कोड में नई कार्यक्षमता जोड़ने पर

इकाई परीक्षणों के रूप में उपयोगी, मौजूदा 1 कोडबेस के लिए एक पूर्ण इकाई परीक्षण सूट बनाना शायद एक यथार्थवादी विचार नहीं है। जो शक्तियां आपको एक तंग समय सीमा पर पहुंचाने के लिए प्रेरित करती हैं। जैसा कि आप विकसित कर रहे थे, उन्होंने आपको पर्याप्त इकाई परीक्षण बनाने का समय नहीं दिया। क्या आपको लगता है कि वे आपको "कार्यक्रम जो काम करता है" के लिए परीक्षण बनाने के लिए पर्याप्त समय देगा?

1 विरासत कोड इकाई परीक्षणों के बिना कोड है। यह विरासत कोड की TDD परिभाषा है। यह तब भी लागू होता है, जब विरासत कोड को ताजा रूप से वितरित किया जाता है [भले ही स्याही अभी तक सूख न गई हो]।


लेकिन तब नई सुविधाओं के लिए हमारी नई इकाई परीक्षण अधूरा लग सकता है, या लापता इकाई परीक्षणों के बिना भी बेकार हो सकता है। है ना?
मिशेल गोकन

7
(१) व्यर्थ? हरगिज नहीं। बहुत कम से कम, वे नई सुविधा का परीक्षण करते हैं। अगली बार जब कोई इस सुविधा को संशोधित करना चाहता है, तो वे मौजूदा परीक्षणों का अधिक उपयोग करेंगे। (२) अधूरा? शायद शायद नहीं। यदि आप इकाई परीक्षण भी बनाते हैं जो विरासत की कार्यक्षमता का परीक्षण करता है जो नई सुविधा पर निर्भर करती है, तो परीक्षण व्यावहारिक उद्देश्यों के लिए पर्याप्त हो सकते हैं। दूसरे शब्दों में, अतिरिक्त इकाई परीक्षण बनाएं जो विरासत की कार्यक्षमता को भेदते हैं। किस गहराई तक प्रवेश करें? यह कार्यक्रम की वास्तुकला, उपलब्ध संसाधनों, संस्थागत समर्थन पर निर्भर करता है।
निक एलेक्सी

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

4
@ फ़्लैटर की एकरूपता झूठी सुविधा प्रदान करती है। मुझे ऐसे परीक्षण चाहिए जो उत्पादन कोड को पढ़ने में आसान बनाते हैं। परीक्षण नहीं कि सभी समान दिखते हैं। मैं पूरी तरह से अलग-अलग परीक्षण ढाँचों को मिलाने को क्षमा कर दूंगा अगर यह समझने में आसानी हो कि उत्पादन कोड क्या करता है।
कैंडिड_ऑरेंज

2
@ फ़्लैटर मैं बदसूरत उत्पादन कोड के लिए जोर नहीं दिया। मैं दावा करता हूं कि परीक्षण का उद्देश्य उत्पादन कोड को पठनीय बनाना है। मैं खुशी से परीक्षणों की एक उदार भीड़ को स्वीकार करूंगा जो उत्पादन कोड को पढ़ना आसान बनाता है। एकरूपता अपने आप में एक लक्ष्य बनाने के बारे में सावधान रहें। पठनीयता राजा है।
कैंडिड_ओरेंज

12

मेरे अनुभव में, परीक्षणों को सहायक होने के लिए कुल कवरेज की आवश्यकता नहीं है। इसके बजाय, आप कवरेज बढ़ने पर विभिन्न प्रकार के लाभ प्राप्त करना शुरू करते हैं:

  • 30% से अधिक कवरेज (उर्फ एकीकरण परीक्षणों के एक जोड़े): यदि आपके परीक्षण विफल होते हैं, तो कुछ बहुत टूट गया है (या आपके परीक्षण परतदार हैं)। शुक्र है कि परीक्षणों ने आपको जल्दी से सतर्क कर दिया! लेकिन रिलीज के लिए अभी भी व्यापक मैनुअल परीक्षण की आवश्यकता होगी।
  • 90% से अधिक कवरेज (उर्फ अधिकांश घटकों में सतही इकाई परीक्षण होते हैं): यदि आपके परीक्षण पास होते हैं, तो सॉफ्टवेयर ज्यादातर ठीक है। अप्रयुक्त भाग किनारे के मामले हैं, जो गैर-महत्वपूर्ण सॉफ़्टवेयर के लिए ठीक है। लेकिन रिलीज अभी भी कुछ मैनुअल परीक्षण की आवश्यकता होगी।
  • फ़ंक्शंस / स्टेटमेंट्स / ब्रांच / रिक्वायरमेंट्स की बहुत अधिक कवरेज: आप TDD / BDD सपने जी रहे हैं , और आपके परीक्षण आपके सॉफ़्टवेयर की कार्यक्षमता का सटीक प्रतिबिंब हैं। आप बड़े पैमाने पर वास्तु परिवर्तन सहित उच्च आत्मविश्वास के साथ रिफ्लेक्टर कर सकते हैं। यदि परीक्षण पास हो जाते हैं, तो आपका सॉफ़्टवेयर लगभग जारी है; केवल कुछ मैनुअल धूम्रपान परीक्षण की आवश्यकता है।

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

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

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

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

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


"90% से अधिक कवरेज (उर्फ अधिकांश घटकों में सतही इकाई परीक्षण होते हैं): यदि आपके परीक्षण पास हो जाते हैं, तो सॉफ्टवेयर अधिकतर ठीक रहता है। अप्रयुक्त भाग किनारे के मामले होते हैं, जो गैर-महत्वपूर्ण सॉफ़्टवेयर के लिए ठीक है ।" यह मेरे लिए थोड़ा सा लग रहा है, एफडब्ल्यूआईडब्ल्यू, मैं 90% कवरेज की तुलना में ज्यादातर किनारे के मामलों से मिलकर 30% कवरेज रखना पसंद करूंगा, जिसमें पूरी तरह से अपेक्षित पथ व्यवहार शामिल है (जो मैन्युअल परीक्षकों के लिए करना आसान है); जब भी संभव हो, परीक्षण लिखने और उन्हें (असामान्य) परीक्षण मामलों को बंद करने के आधार पर "बॉक्स के बाहर" सोचने की सलाह देता हूं।
jrh

5

मौजूदा कोड के लिए परीक्षण न लिखें। यह इसके लायक नहीं है।

आपने जो कुछ बनाया है वह पहले से ही पूरी तरह से अनौपचारिक तरीके से परीक्षण किया गया है - आपने इसे लगातार हाथ से आज़माया है, लोगों ने कुछ अनधिकृत परीक्षण किए, अब इसका उपयोग किया जा रहा है। इसका मतलब है कि आपको कई बग नहीं मिलेंगे

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

इसके अलावा, TDD का एक कारण आपको यह सोचना है कि इसे लिखने से पहले एक बिट कोड की सही आवश्यकताएं क्या हैं। जो कुछ भी अलग तरीके से, आपने पहले से ही ऐसा किया है।

इस बीच, यह अभी भी इन परीक्षणों को लिखने के लिए उतना ही काम है जितना कि उन्हें पहले से लिखना होगा। थोड़े से लाभ के लिए, इसमें बहुत समय लगेगा।

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

संक्षेप में, देवता इससे नफरत करेंगे और प्रबंधक इसे महंगे रूप में देखेंगे, जबकि बहुत से कीड़े नहीं पाए जाते हैं। आपको वास्तविक TDD भाग कभी नहीं मिलेगा।

इसे उन चीजों पर उपयोग करें जिन्हें आप बदलना चाहते हैं, प्रक्रिया के सामान्य भाग के रूप में।


1
मैं दृढ़ता से असहमत हूं "मौजूदा कोड के लिए परीक्षण न लिखें। यह इसके लायक नहीं है।" यदि कोड यथोचित कार्य कर रहा है तो परीक्षण अस्तित्व में एकमात्र विनिर्देश हो सकते हैं। और यदि कोड रखरखाव में है, तो परीक्षण जोड़ना केवल उन कार्यों को सुनिश्चित करने का एकमात्र तरीका है, जो काम नहीं करते हैं, यह प्रतीत होता है कि असंबंधित परिवर्तन से टूटा नहीं है।
ऑस्टिन में जूली

3
@ जूलीनएस्टिन: दूसरी ओर, बिना किसी युक्ति के, आपको ठीक से पता नहीं है कि कोड क्या करना चाहिए। और यदि आप पहले से ही नहीं जानते हैं कि कोड क्या करना है, तो आप अच्छी तरह से बेकार परीक्षण लिख सकते हैं - या इससे भी बदतर, भ्रामक वाले जो तेजी से कल्पना को बदलते हैं - और अब आकस्मिक और / या गलत व्यवहार की आवश्यकता होती है।
cHao

2

एक परीक्षण समझ को संप्रेषित करने का एक साधन है।

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

आप केवल यह समझ सकते हैं कि जब आप इसके साथ काम करते हैं तो क्या सच होना चाहिए।

इसलिए केवल उस कोड के लिए परीक्षण लिखें, जिसके साथ आप काम कर रहे हैं।

जब आप कोड के साथ काम करेंगे तो आप सीखेंगे।

इसलिए जो आपने सीखा है उसे पकड़ने के लिए परीक्षण लिखें और फिर से लिखें।

धोये और दोहराएं।

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

यदि आपने थोड़ी देर में कोड के साथ काम नहीं किया है, तो एक व्यावसायिक निर्णय लेने की आवश्यकता है। यह अब संभवतः इतनी विरासत है कि आपकी टीम का कोई भी व्यक्ति इसके साथ काम करना नहीं जानता है। यह संभवत: आउट-ऑफ-डेट लाइब्रेरी / कंपाइलर / प्रलेखन है, जो हर तरह से एक बड़े पैमाने पर देयता है।

दो विकल्प:

  1. इसे पढ़ने के लिए समय निकालें, इससे सीखें, इसके लिए परीक्षण लिखें, और इसे रिफैक्ट करें। लगातार रिलीज के साथ परिवर्तन के छोटे सेट।
  2. उस सॉफ़्टवेयर को खोदने का एक तरीका खोजें। वैसे भी पूछे जाने पर आप संभवतः इसमें कोई संशोधन नहीं कर सकते थे।

0

(1) क्या यह अभी भी ठीक है या अधिकांश विकास को रोकने के लिए अच्छा विचार है और शुरू से ही पूरे संभव परीक्षण मामलों को लिखना शुरू कर दिया है, भले ही सब कुछ पूरी तरह से ठीक हो रहा हो (अभी तक!)।
(२) कुछ बुरा होने की प्रतीक्षा करना बेहतर है और फिर फिक्स के दौरान नई इकाई परीक्षण लिखें

परीक्षणों के मुख्य उद्देश्यों में से एक यह सुनिश्चित करना है कि कोई भी बदलाव नहीं हुआ। यह तीन चरण की प्रक्रिया है:

  1. पुष्टि करें कि परीक्षण सफल
  2. आप परिवर्तन करें
  3. पुष्टि करें कि परीक्षण अभी भी सफल हैं

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

इसलिए मैं डेवलपर्स के लिए एक की गुणवत्ता का त्याग करने से बचने के लिए परीक्षण-लेखन और परिवर्तन करने वाले कार्यों को विभाजित करने का सुझाव देता हूं।

भले ही सब कुछ पूरी तरह से ठीक है (फिर भी!) काम कर रहा है।

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

(3) यहां तक ​​कि पिछले कोड के बारे में भूल जाओ और केवल नए कोड के लिए यूनिट टेस्ट लिखें और अगले प्रमुख रिफ्लेक्टर के लिए सब कुछ स्थगित करें

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

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

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

और अगले प्रमुख रिफ्लेक्टर के लिए सब कुछ स्थगित करें

यदि अगला प्रमुख रिफ्लेक्टर दिया गया है, तो आपको वास्तव में परीक्षण लिखने की आवश्यकता है।

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


0

मेरे दो सेंट:

सिस्टम में एक प्रमुख तकनीकी उन्नयन के लिए प्रतीक्षा करें और फिर परीक्षण लिखें ... आधिकारिक तौर पर व्यवसाय के समर्थन के साथ।

वैकल्पिक रूप से, मान लें कि आप एक SCRUM की दुकान हैं, आपके कार्यभार को क्षमता द्वारा दर्शाया गया है और आप इसका एक% यूनिट के लिए आवंटित कर सकते हैं, लेकिन ...

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

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

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