मैं वेब विकास में यूनिट परीक्षण का उपयोग करने के बारे में पूछना चाहता हूं। यूनिट परीक्षण का विचार बहुत अच्छा है, लेकिन क्या यह वास्तव में वेब एप्लिकेशन के संदर्भ में मूल्य लाता है? मेरे प्रश्न का दूसरा हिस्सा टीडीडी के बारे में है। यदि कोई वास्तविक कोड से पहले एक इंटीग्रेशन टेस्ट बनाता है तो इस दृष्टिकोण को "टेस्ट ड्राइव डेवलपमेंट" कहा जा सकता है?वेब विकास में यूनिट टेस्ट बनाम एकीकरण परीक्षण
1. अनुमान
परिभाषा यूनिट टेस्ट केवल एक सेवा परत पर कोड का परीक्षण करना चाहिए द्वारा। यदि एक परीक्षण परीक्षण कई परतों में कोड परीक्षण करता है तो हमारे पास एकीकरण परीक्षण होता है।
2. तर्क
2,1 कोई एल्गोरिदम
एक वेब अनुप्रयोग में कई नहीं एल्गोरिदम रहे हैं। यह एक 3 डी भौतिकी इंजन बनाने की तरह नहीं है जहां हर विधि कुछ चुनौतीपूर्ण और डीबग करने में मुश्किल होती है। वेब एप्लिकेशन ज्यादातर एकीकरण और HTML उत्पन्न करने के बारे में है।
एक वेब अनुप्रयोग के लिए सबसे बड़ी चुनौतियों में कर रहे हैं: - स्वच्छ कोड (किसी भी सॉफ्टवेयर लेकिन परीक्षण योग्य नहीं के लिए सार्वभौमिक समस्या) - डेटा स्थिरता - एकीकरण (प्रोग्रामिंग भाषा, फाइल सिस्टम, विन्यास फ़ाइलें, वेब सर्वर, कैशिंग प्रणाली, डाटाबेस, सर्च इंजन, बाहरी एपीआई - उन सभी प्रणालियों को अनुरोध पर एक साथ काम करना पड़ता है)
यदि आप किसी वेब ऐप में प्रत्येक कक्षा के लिए यूनिट टेस्ट बनाना चाहते हैं तो आप परीक्षण करेंगे (ज्यादातर मामलों में): सरणी भरना , स्ट्रिंग concatenations और भाषाओं के मूल कार्यों।
2,2 लागत
सिर्फ इसलिए कि एक वेब सभी एकीकरण के बारे में अनुप्रयोग है वहाँ हमेशा एक से अधिक निर्भरता है। आपको कई अलग-अलग वर्गों का मज़ाक उड़ाना है और यहां तक कि एक छोटा परीक्षण भी लिखना वास्तव में एक बड़ी नौकरी हो सकती है। इससे भी बदतर यह न केवल परीक्षण के बारे में है। सॉफ्टवेयर को टेस्ट करने योग्य होना चाहिए। इसका मतलब है कि किसी को लगभग हर वर्ग में निर्भरताओं को इंजेक्ट करने में सक्षम होना चाहिए। दो वर्गों (या सिस्टम) के बीच अतिरिक्त परत बनाने के बिना निर्भरताओं को इंजेक्ट करना हमेशा संभव नहीं होता है। यह कोड को जटिल बनाता है और इसे काम करने के लिए और अधिक महंगा बनाता है।
3. एकता टेस्ट
तो वेब विकास सभी एकीकरण के बारे में यह क्यों परीक्षण करने के लिए नहीं है? कुछ काउंटर तर्क हैं।
3.1 एकता परीक्षण कहते हैं, "कुछ टूट गया है" लेकिन कहना नहीं है जहां
यह वास्तव में करने के लिए नीचे आता है: कितना समय यह जब एक एकीकरण परीक्षण समय की तुलना में विफल रहता है एक बग मिल के लिए ले करता कोड "यूनिटटेस्टेबल" बनाने के लिए आवश्यक है और अधिक जटिल (मुझे लगता है कि यह व्यक्तिपरक है)? मेरे अनुभव में किसी समस्या का स्रोत खोजने में कभी भी समय नहीं लगा।
3.2 आप किसी भी पर्यावरण पर इकाई परीक्षण चला सकते हैं, यह एक एकीकरण परीक्षण
हाँ के साथ क्या करना मुश्किल है अगर आप एक डेटाबेस के बिना एकीकरण परीक्षण चलाना चाहते हैं। आमतौर पर एक डेटाबेस है। जब तक आप प्रत्येक टेस्ट के बाद फिक्स डेटा पर काम करते हैं और साफ करते हैं तो यह ठीक होना चाहिए।लेनदेन संबंधी डेटाबेस इस कार्य के लिए बिल्कुल सही हैं। खुला लेनदेन, डेटा, परीक्षण, रोलबैक डालें।
3.3 एकता बनाए रखने के लिए टेस्ट
मैं सभी क्योंकि अपने परीक्षण काम अच्छी तरह से उस पर टिप्पणी नहीं कर सकता मुश्किल कर रहे हैं और मैं कभी नहीं कि साथ समस्या थी।
4. अच्छा यूनिट टेस्ट बनाएं!
पूरे तर्क पर हमला किया जा सकता है "यदि आप अपना यूनिट टेस्ट सही बनाते हैं, तो आपको कोई समस्या नहीं है।" क्या यह एकीकरण परीक्षण के साथ समान नहीं हो सकता है? यदि एकीकरण परीक्षण बनाना आसान है, तो इसके साथ क्यों न रहें और इसे सही बनाएं?
मुझे गलत मत समझो मैं यूनिट टेस्ट के खिलाफ नहीं हूं। यह एक आदर्श विचार है और मैं सभी को सलाह देता हूं। मैं समझने की कोशिश कर रहा हूं: क्या यह वास्तव में वेब विकास में फिट है? मैं आपको राय और अनुभव सुनना चाहता हूं।
*** "2.1 कोई अल्गोरिदम" *** - यह अब ऐप पर निर्भर करता है, है ना? सिर्फ इसलिए कि यह वेब पर रहता है, इसका स्वचालित अर्थ यह नहीं है कि यह जटिल नहीं है या इसमें कोई जटिल एल्गोरिदम नहीं है। – deceze
@deceze बिल्कुल! लेकिन आम तौर पर एक वेब ऐप बोलने में उनमें से कई नहीं होते हैं। –
शायद आपको [एटीडीडी] (http://janetgregory.blogspot.com/2010/08/atdd-vs-bdd-vs- स्पेसिफिकेशन-by-example.html) पर एक नज़र डालना चाहिए जो मूल रूप से आपकी समस्या हल करता है। [बढ़ते ऑब्जेक्ट-ओरिएंटेड सॉफ्टवेयर, टेस्ट द्वारा निर्देशित] (http://www.amazon.com/Growing-Object-Oriented-Software-Guided-Tests/dp/0321503627) एक लिखने से पहले किसी सुविधा पर काम करने का विचार प्रस्तुत नहीं करता है इसके लिए स्वीकृति परीक्षण विफल रहा है। Pluralsight.com टेस्ट फर्स्ट डेवलपमेंट के बारे में एक कोर्स है। एटीडीडी के बारे में पाठ्यक्रम के [भाग 2] (http://pluralsight.com/training/Courses/TableOfContents/test-first-development-2) देखें। – Songo