c# मौजूदा कोड को टेस्ट ड्रायव डेवलपमेंट में ले जाना




tdd nunit (4)

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

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


साथ-साथ परीक्षणों द्वारा - परीक्षण योग्य कोड को खोजना आसान है। यदि कुछ हैं, तो यह जांच योग्य होना चाहिए। यदि कोई नहीं है - विपरीत मान लें ;)

उस ने कहा: टेस्ट ड्राइविंग डेवलपमेंट (टीडीडी) एक परीक्षण रणनीति नहीं है क्योंकि यह एक डिजाइन रणनीति है जिन टेस्ट की आप पहली बार अपनी कक्षाओं के इंटरफेस को डिजाइन करने में मदद करते हैं, साथ ही साथ अपनी कक्षाओं (या उस मामले के लिए सबसिस्टम्स) का दायरा प्राप्त करने में भी सही हैं

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

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


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

मुझे उदाहरण और व्यावहारिक यूनिट परीक्षण द्वारा परीक्षण संचालित विकास भी मिला : एनयूनेट के साथ सी # में उस वातावरण में इकाई परीक्षण के लिए एक सभ्य परिचय होना चाहिए

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


माइकल पंख द्वारा लिगसी कोड के साथ प्रभावी ढंग से कार्य पुस्तक देखें।

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

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

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

नीचे से परीक्षण जोड़ें: शुद्धता के लिए थोड़ा, स्वतंत्र कक्षाएं और फ़ंक्शन का परीक्षण करें।

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

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

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

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

इसके अलावा, Rhinomocks या Moq जैसे स्वचालित मचान चौखटे यहाँ नकली मौजूदा वर्गों में मदद कर सकता है। मैंने वास्तव में testability के लिए डिज़ाइन कोड में उनके लिए आवश्यकता नहीं पाई है।


मैं इसे "परीक्षण प्रेरित रिवर्स इंजीनियरिंग" कहते हैं

"नीचे" प्रारंभ करें - प्रत्येक कक्षा को अलग से जांच की जा सकती है और उसके लिए एक परीक्षा लिखी जा सकती है। जब संदेह में, अनुमान लगाओ।

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

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

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

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

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







nunit