2009-06-21 9 views
5

मैं एक ओपन सोर्स पायथन ओआरएम के लिए बैकएंड पर काम कर रहा हूं। पुस्तकालय में प्रत्येक बैकएंड के लिए 450 परीक्षण मामलों का एक सेट शामिल है, सभी एक विशाल टेस्ट क्लास में फंस गए हैं।क्या एक टेस्ट क्लास "ईश्वर वस्तु" बन सकती है?

मेरे लिए, यह है कि एक वर्ग के लिए एक बहुत की तरह लगता है, लेकिन मैं एक परियोजना 450 परीक्षण मामलों है कि (मेरा मानना ​​है कि इस पुस्तकालय ~ 2000 परीक्षण मामलों है प्रत्येक बैकएंड के लिए परीक्षण मामलों सहित नहीं पर काम किया कभी नहीं किया है)। क्या मुझे लगता है कि यह उच्च अंत में थोड़ा सा है (यह देखते हुए कि वास्तव में कोई जादू संख्या नहीं है जिसके ऊपर आपको कुछ तोड़ना चाहिए), या क्या यह टेस्ट क्लास के इतने सारे परीक्षणों के लिए इतना बड़ा सौदा नहीं है?

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

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

उत्तर

4

450 परीक्षण एक बहुत की तरह लगता है, लेकिन कितना बुरा यह है कि वे किस तरह संगठित किया गया है पर निर्भर करता है।यदि वे सभी एक-दूसरे और टेस्ट क्लास के सदस्यों से वास्तव में स्वतंत्र हैं, तो यह एक बड़ा सौदा नहीं हो सकता है - इसके अलावा एक विशिष्ट परीक्षण का पता लगाना मुश्किल होगा।

दूसरी ओर, यदि परीक्षण वर्ग के सदस्यों है कि केवल द्वारा उपयोग किया जाता परीक्षण के कुछ और दूसरों के द्वारा नजरअंदाज कर दिया है, यह के रूप में जनरल स्थिरता और अप्रासंगिक टेस्ट गंध ऐसे रूट कारणों युक्त अस्पष्ट टेस्ट कहा जाता है सूचना (कृपया शब्दकोष नोट करें - मैं इसे वापस ले जाऊंगा)।

कक्षाओं में परीक्षण आयोजित करने के कई तरीके हैं। सबसे आम पैटर्न टेस्टकेस क्लास प्रति कक्षा, टेस्टकेस कक्षा प्रति फ़ीचर और टेस्टकेस कक्षा प्रति स्थिरता है।

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

इस विषय के बारे में एक पूरी किताब है, जिसे xUnit Test Patterns: Refactoring Test Code कहा जाता है जिसे मैं पर्याप्त सिफारिश नहीं कर सकता। इसमें एक पूर्ण पैटर्न भाषा है जो इकाई परीक्षण और टीडीडी से संबंधित है, और यहां उपयोग किए गए सभी पैटर्न नामों से इसका उत्पत्ति होता है।

+0

"... एक विशिष्ट परीक्षण का पता लगाना मुश्किल होना चाहिए।" बिंगो। यही वह समस्या है जिसका सामना कर रहा हूं। –

2

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

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

2

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

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

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

एक वर्ग में 450 परीक्षण बहुत ज्यादा लगता है। परीक्षण परीक्षण क्या करते हैं, उनके नाम क्या हैं? क्या वे सिस्टम के व्यवहार (एक अच्छी बात) के आसपास केंद्रित हैं, या उनके बीच कार्यान्वयन और कार्यान्वयन के बीच 1: 1 संबंध है? यह वे कई असंबंधित चीजों का परीक्षण, तो यह कई परीक्षण वर्गों के लिए जिम्मेदारियों को विभाजित करने के अच्छा होगा।

0

हाँ, पर एक परीक्षण वर्ग एक "भगवान वस्तु" है कि मेरे लिए एक समस्या की तरह ध्वनि नहीं करता है।

एक कक्षा में
+0

क्या आपको लगता है कि आप थोड़ा और विस्तार से समझा सकते हैं कि ऐसा क्यों है? मेरा मतलब है, एक गैर-परीक्षण वर्ग जो एक ईश्वर वस्तु है निश्चित रूप से एक समस्या है। एक टेस्ट क्लास कैसे अलग होगा? –

+0

यदि आप एकीकरण परीक्षण कर रहे हैं, तो उन्हें यह जानना होगा कि पूरी प्रणाली कैसे काम करती है। इसके अलावा, मैं शर्त लगाऊंगा कि अधिकांश विधियां एक दूसरे से बात नहीं करती हैं। – Joshua

2

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

उस ने कहा, परीक्षण कार्यक्षमता द्वारा समूहीकृत किया जाना चाहिए। प्रकार एक्स, यूनियनों, जॉइन, डीडीएल/स्कीमा पुनर्प्राप्ति, कैचिंग कैचिंग, स्टेटमेंट इत्यादि, क्वेरी ...

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