2009-08-18 12 views
11

मैं एक नया एप्लीकेशन बना रहा हूं और "परीक्षण-प्रथम" विकास का पालन करने की कोशिश कर रहा हूं जैसा कि मैं कर सकता हूं। मैं खुद को ऐसी स्थितियों में ढूंढ रहा हूं जहां मुझे ऐसी सुविधा को लागू/बदलने की आवश्यकता है जिसका मौजूदा यूनिट परीक्षणों को अमान्य करने का असर हो। मुझे इससे कैसे निपटना चाहिए? मैं इसे देखना, वहाँ 3 विकल्प हैं:क्या करें जब कोई नई सुविधा मौजूदा यूनिट परीक्षणों को अमान्य बनने का कारण बनती है?

  • अद्यतन या नई सुविधा की आवश्यकताओं को पूरा करने के लिए (किसी भी अधिक के रूप में आवश्यक जोड़ने) सभी मौजूदा परीक्षण निकालें, तब सुविधा को लागू

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

  • नई सुविधा के लिए नए परीक्षण जोड़ें, सुविधा को लागू, सभी परीक्षणों चलाने पर पुराने को देखने के लिए es, असफल आवश्यक

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

मुझे नहीं लगता कि मेरे पास यहां कोई स्पष्ट रणनीति है। इन परिस्थितियों में आप क्या करते हैं?

+0

यह वही है जो मैं करता हूं जब मैं परीक्षण करता हूं कि आखिरकार कचरे में आया था: http://www.youtube.com/watch?v=tgBI3-q5COM – Will

+2

यह अजीब लगता है कि एक बदलाव (सही ढंग से) कई यूनिट परीक्षण तोड़ सकता है। एक या दो शायद, लेकिन कई? क्या यह संभव है कि आपकी इकाई परीक्षण बहुत अधिक ओवरलैप हो? – Beta

+0

@ बीटा, कहें कि आप एक आवश्यकता जोड़ते हैं कि कार्यान्वयन के लिए अब एक अतिरिक्त आश्रित वर्ग की आवश्यकता है। अब आपके अन्य परीक्षण आश्रित वस्तु का नकली कार्यान्वयन प्रदान नहीं करते हैं, इसलिए जब वे आपको शून्य संदर्भ अपवादों का एक गुच्छा प्राप्त करते हैं। इसके बाद आपको वापस जाने और अपने सेट अप कोड को ठीक करने की आवश्यकता होगी ताकि वे पास हो जाएंगे। – tvanfosson

उत्तर

8

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

4

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

4

सुविधा को कार्यान्वित करने में यूनिट परीक्षण लिखना/अपडेट करना शामिल है; यह परीक्षण संचालित विकास के लिए मौलिक है। तो आपके दूसरे दो विकल्प भी टीडीडी हैं, न केवल आपके पहले। अभ्यास में मुझे लगता है कि आप कुछ mods के साथ अपने तीसरे विकल्प चाहता हूँ: सुविधा के लिए

  1. लिखें परीक्षण
  2. सुविधा लिखें
  3. समीक्षा (के बाद से है कि आप इसके लिए अपने एपीआई/यूआई मान्य मदद करता है) कि सामान्य क्षेत्र में इकाई परीक्षण उन देखने के लिए कि
  4. भागो परीक्षण
  5. फिक्स जो कि तोड़ने का विश्लेषण करना चाहिए, और # 3 से अपनी सूची में किसी भी है कि नहीं तोड़ा, उन्हें ठीक नहीं है अगर (उनके पास होना चाहिए टूटा हुआ)। यदि कोई तोड़ दिया गया है जिसे आपने पहचाना नहीं है, तो यह सुनिश्चित करने के लिए जांच करें कि वास्तव में, सही है - परीक्षण या सुविधा को उचित रूप से ठीक करें।
  6. लाभ ;-)
0

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

टेस्ट ऐसे हैं जो आप पूरा करने की कोशिश कर रहे हैं, और आपके खिलाफ काम नहीं करना चाहिए।

0

मुझे लगता है कि यहां पर दो बातें हैं। और मुझे नहीं पता कि आप केवल एक या दोनों के बारे में सोच रहे हैं या नहीं।

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

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

1

मुझे लगता है कि सभी दृष्टिकोण उचित हैं। आप एक ही परिणाम प्राप्त करेंगे।

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

यदि आपको एक बड़े हिस्से को काटने से कोई फर्क नहीं पड़ता है, तो एक नई नई सामग्री में गोता लगाएँ। मुझे लगता है कि यह अधिक स्वाभाविक है, खासकर जब प्रोग्रामिंग जोड़ी थोड़ी अधिक बोल्ड हो सकती है।

वास्तव में आपके आराम और आत्मविश्वास के स्तर पर निर्भर हो सकता है।

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

संबंधित मुद्दे

 संबंधित मुद्दे