असफल परीक्षणों की जबरदस्त संख्या से कैसे निपटें? [बन्द है]


22

मैं जावा में लिखित एक पुरानी परियोजना के विकास में काम कर रहा हूं। हमारे पास 10 मिलियन से अधिक एलओसी हैं और इससे भी बदतर, 4000 से अधिक कार्यात्मक परीक्षण हैं।

हडसन द्वारा निर्धारित परीक्षण, हर बड़े कोड परिवर्तन के साथ पागल की तरह विफल हो रहे हैं। परीक्षण की विफलता का सत्यापन - यदि यह उत्पाद में या परीक्षण में समस्या है, तो महीनों लगते हैं। हम पुराने परीक्षणों को हटा नहीं सकते क्योंकि हम नहीं जानते कि वे क्या परीक्षण कर रहे हैं!

हम क्या कर सकते हैं? विरासत परीक्षणों की इतनी मात्रा के साथ कैसे आगे बढ़ें?


6
असली सवालों के जवाब हैं। यह बताने के बजाय कि आपकी स्थिति कितनी भयानक है, या आपके बॉस / सहकर्मी आपको दुखी क्यों करते हैं, यह समझाने के लिए कि आप इसे बेहतर बनाने के लिए क्या करना चाहते हैं। अधिक जानकारी के लिए, यहां क्लिक करें ...
gnat

13
आपने परीक्षणों को पहली बार में विफल क्यों होने दिया? BTW 4000 यह नहीं है कि 10 MLOC के लिए कई परीक्षण
Bћови

6
ड्रॉप गिराएं और रॉल करें।
नवीन

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

6
हम सभी ने एक संकलक को एक ''} '' गायब होने के कारण एक ज़िलिन त्रुटियों को मारते देखा है। यदि ये आश्रितों के बहुतायत के साथ कार्यात्मक परीक्षण हैं , तो शायद उसी तरह की समस्या काम पर है?
Dan Pichelman

जवाबों:


37

उनका परित्याग करें।

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

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

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


9
मैं आपकी बात में तर्क नहीं देख सकता: "एक परीक्षण सूट आपको यह विश्वास दिलाने के लिए है कि सिस्टम वह करता है जो वह करने वाला है। [...] अब आपको जो आवश्यकता है, वह एक नया परीक्षण है जो बिना किसी के साथ चलता है। त्रुटियों। " यदि आपके पास दोषपूर्ण कोड है जो परीक्षण को विफल करता है, तो इसका मतलब यह नहीं है कि आपको परीक्षणों को फिर से लिखना चाहिए ताकि दोषपूर्ण कोड पास हो जाए।
DBedrenko

13
हेक्टर की स्थिति यह है कि वह नहीं जानता कि कोड या परीक्षण गलत हैं । यदि वह करता है, तो वह कोड आधार के साथ काम कर सकता है और कभी-कभी परीक्षण, कभी-कभी व्यवसाय कोड बदल सकता है। जैसा कि यह है, इस तरह के ड्रगवर्क भी भुगतान नहीं करेंगे, क्योंकि आप नहीं जानते कि आप समस्याओं को ठीक कर रहे हैं या उन्हें नष्ट कर रहे हैं।
किलियन फोथ

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

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

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

29

जाओ और परीक्षणों को ठीक करो।

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


परीक्षण की विफलता का सत्यापन - यदि यह उत्पाद या परीक्षण में समस्या है, तो महीनों लगते हैं। हम पुराने परीक्षणों को हटा नहीं सकते क्योंकि हमें नहीं पता था कि वे क्या परीक्षण कर रहे हैं!

ऐसा लगता है कि आपके संगठन में और भी बड़ी समस्या है, क्योंकि आप स्पष्ट आवश्यकताओं के साथ काम नहीं कर रहे हैं। मैं यह नहीं समझ सकता कि आप (या कोई और) सही व्यवहार की पुष्टि नहीं कर सकते।


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

@Shautieh डब्ल्यूटीएफ परीक्षण डब्ल्यूटीएफ कोड के बिना नहीं चलते हैं, इसलिए परीक्षण को ठीक करने का मतलब आमतौर पर कोड को फिर से भरना है। और बेतरतीब ढंग से विफल परीक्षण अक्षमता का संकेत हैं। और आपके सहयोगी के पर्यवेक्षक को अपना काम नहीं करने के लिए दोषी ठहराया जाता है।
B37овиЈ

2
कभी-कभी जीवन कठोर होता है: डब्ल्यूटीएफ परीक्षणों (और कोड) के लिए जिम्मेदार व्यक्ति ने टीम में सबसे अधिक वेतन प्राप्त किया (मेरे से 20 +% अधिक), और जब उसने परियोजना के बीच में छोड़ दिया (क्योंकि उसे एक उच्च भुगतान वाली नौकरी मिली थी ) मुझे उनके कुछ
देवों के बारे में बताना

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

@ बटा काफी हद तक टीडीडी में इस्तेमाल की जाने वाली परिभाषा के समान है: "एक बग एक परीक्षण है जिसे आपने अभी तक नहीं लिखा है।"
मोनिका

22

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

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

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

यह निर्धारित करने के लिए कि कौन-कौन से परीक्षण विफल हो रहे हैं, उनसे क्या मूल्य वसूला जा सकता है, यह निर्धारित करने के लिए आवश्यक पुरातत्व का प्रदर्शन करते हुए अपनी पवित्रता बनाए रखने के लिए, मैं निम्नलिखित चरणों का सुझाव दूंगा:

असफल परीक्षणों को अस्थायी रूप से अक्षम करें।

आपके पर्यावरण के आधार पर, आप कई तरीके से ऐसा कर सकते हैं, जिसका आप स्पष्ट रूप से वर्णन नहीं करते हैं, इसलिए मैं वास्तव में किसी विशेष की सिफारिश नहीं कर सकता।

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

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

कुछ चौखटे आपको इग्नोर करने के लिए एनोटेट या अन्यथा एकल परीक्षणों को चिह्नित करने की अनुमति देते हैं। इस मामले में उन्हें एक समूह के रूप में चलाना कठिन है, लेकिन यह उन्हें आपको विचलित करने से रोकता है।

आप परीक्षणों को एक स्रोत वृक्ष पर ले जा सकते हैं जो सामान्य रूप से निर्माण में शामिल नहीं है।

एक्सटिस में, आप संस्करण नियंत्रण प्रणाली के HEAD से कोड को हटा सकते हैं, लेकिन इसके बाद तीसरे चरण के पूरा होने पर इसे पहचानना कठिन हो जाएगा।

लक्ष्य जल्द से जल्द ग्रीन जाने के लिए जेनकिंस प्राप्त करना है, इसलिए आप जल्द से जल्द सही दिशा में आगे बढ़ना शुरू कर सकते हैं।

परीक्षण प्रासंगिक रखें।

नए परीक्षण जोड़ने के लिए संकल्प लें जैसे आप कोड जोड़ते हैं या संशोधित करते हैं, और पास होने वाले सभी परीक्षणों को पास रखने के लिए प्रतिबद्ध हैं।

परीक्षण कई कारणों से विफल हो सकते हैं, इस तथ्य के साथ कि वे शुरू करने के लिए अच्छी तरह से लिखित परीक्षा नहीं थे। लेकिन एक बार जब आपको जेनकिंस हरा हो जाता है, तो इसे इस तरह से रखना वास्तव में महत्वपूर्ण है।

अच्छे टेस्ट लिखने की आदत डालें और अगर टेस्ट फेल होने लगे तो इसे बड़ी बात बना लें।

प्रत्येक परीक्षण के इरादे को निर्धारित करें।

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

  • क्या यह एक विशेषता का परीक्षण करता है जिसे उद्देश्य के आधार पर कोड आधार से हटा दिया गया था? तब आप शायद इसे हटा सकते हैं।

  • क्या यह एक ऐसे बग को पकड़ रहा है जिस पर अभी तक किसी का ध्यान नहीं गया है? परीक्षण बहाल करें और बग को ठीक करें।

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

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

  • क्या ऐप की वास्तुकला पहचान से परे बदल गई है, इसलिए परीक्षण अब उपयोगी कुछ भी नहीं करता है? इसे मिटाओ।

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

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


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

यह समस्या के पैमाने पर निर्भर करता है। लेकिन मैं मानता हूं, मैंने वास्तव में यह स्पष्ट नहीं किया है।
बिल माइकेल

"हम हरे हैं लेकिन हर परिवर्तन सामान को लाल बनाता है" और "हम इतने लंबे समय से लाल हैं, हम भूल गए हैं कि हरे रंग की तरह दिखता है" के बीच अंतर करने के लिए एक पैराग्राफ जोड़ा गया
बिल माइकेल

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

11

4000 परीक्षण एक अचूक समस्या है। 40 परीक्षण अधिक ट्रैक्टेबल हैं। बेतरतीब ढंग से चलाने और विश्लेषण करने के लिए परीक्षणों की एक प्रबंधनीय संख्या का चयन करें। परिणामों को वर्गीकृत करें:

  1. बेकार परीक्षा
  2. उपयोगी परीक्षण जो स्वच्छ चलता है
  3. उपयोगी परीक्षण जो विफल रहता है

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

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


2
+ (int) (पीआई / 3) परीक्षण सूट का परीक्षण करने का एक वास्तविक और सरल तरीका प्रदान करने के लिए - जबकि मैं सहमत हूं कि, अंगूठे के नियम के रूप में, ओपी द्वारा वर्णित परीक्षण एक दोषपूर्ण डिजाइन का संकेत है - लेकिन परीक्षण के बिना क्या गलत है, खुद परीक्षण सूट पर कोई सलाह ("उन्हें त्याग दें", "परीक्षणों को ठीक करें", "नए परीक्षण लिखें") सिर्फ सादा बेकार है। बिल्कुल जैसा कि आप कहते हैं: अगर मेरे पास 4k परीक्षण होंगे और 40 के लिए पूरी तरह से उन 3/4 के यादृच्छिक रूप से भद्दा और बेकार है - मैं पूरे सूट को डंप करने के लिए hestitate नहीं करूंगा। यदि उनमें से 3/4 वास्तव में उपयोगी होते - तो मैं कोड को सुधारने पर ध्यान केंद्रित करता।
vaxquis

7

यदि यह कथन सत्य है,

परीक्षण ... हर बड़े कोड परिवर्तन के साथ पागल की तरह विफल हो रहे हैं।

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

तब तक दोहराएं जब तक आपके पास नवीनतम कोड आधार न हो।

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

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

3

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

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

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


1
यही कारण है कि मुझे JUnit का @Ignoreएनोटेशन पसंद है - आप अपने परीक्षण रख सकते हैं, लेकिन उन्हें निष्पादित नहीं कर सकते। तब यह बस उन्हें फिर से सक्षम करने और एक बार में उन्हें ठीक करने की बात है। यह आपको हजारों असफलताओं से अभिभूत होने के बजाय एक समय में केवल एक मुट्ठी भर परीक्षणों पर अपना ध्यान केंद्रित करने की अनुमति देता है।
TMN

1
यह बुरी सलाह है। आपको उस परीक्षा को हटाना या अक्षम नहीं करना चाहिए जिसे आप नहीं समझते हैं। सिर्फ अगर तुम ऐसा परीक्षण समझते हैं, और यदि आपको विश्वास है कि यह एक अप्रचलित सुविधा का परीक्षण करती हैं, यह अक्षम या हटा दिया जाना चाहिए।
जैक्सबी

2

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

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

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

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


-3

हम पुराने परीक्षणों को हटा नहीं सकते क्योंकि हमें नहीं पता था कि वे क्या परीक्षण कर रहे हैं!

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


2
यह केवल पहले से ही दोहराए गए बिंदु और शीर्ष उत्तर
gnat

4
विफलता "अर्थहीन" नहीं है, इसका मतलब है कि आपने सिस्टम को समझा नहीं है जैसा आपने सोचा था कि आपने किया था।
बेन वोइगट

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