36

का परीक्षण कैसे करते हैं आप अपने टी-एसक्यूएल का परीक्षण कैसे करते हैं? आप किस पुस्तकालय/उपकरण का उपयोग करते हैं?आप अपने टी-एसक्यूएल

यूनिट परीक्षणों द्वारा आपके कोड का प्रतिशत कितना कवर किया गया है और आप इसे कैसे मापते हैं? आप कैसे तय करते हैं कि पहले यूनिट परीक्षण के लिए कौन से मॉड्यूल?

क्या आपको लगता है कि आपने अपने यूनिट परीक्षण दोहन में निवेश किए गए समय और प्रयास का भुगतान किया है या नहीं?

यदि आप यूनिट परीक्षण का उपयोग नहीं करते हैं, तो क्या आप समझा सकते हैं क्यों नहीं?

उत्तर

19

आप अपने टी-एसक्यूएल का परीक्षण कैसे करते हैं? आप किस पुस्तकालय/उपकरण का उपयोग करते हैं?

इस TSQLUnit और यह tSQLt पर एक नज़र डालें।

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

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

आपके कोड का प्रतिशत प्रतिशत यूनिट परीक्षणों द्वारा कवर किया गया है और आप इसे कैसे मापते हैं?

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

क्या आपको लगता है कि आपने अपने यूनिट परीक्षण दोहन में निवेश किए गए समय और प्रयास का भुगतान किया है या नहीं?

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

यदि आप यूनिट परीक्षण का उपयोग नहीं करते हैं, तो क्या आप समझा सकते हैं क्यों नहीं?

मुझे यह देखना अच्छा लगेगा कि कोई इसके लिए उत्तर के साथ आता है जो बेतुका नहीं है। किंडा की तरह आप सड़क पर गाड़ी चलाते समय अपने बच्चे को कार सीट में क्यों नहीं डालते ... "उन्हें बहुत अधिक खर्च होता है" ... "इसमें बच्चे को रखने के लिए बहुत अधिक समय लगता है" .. "वह इसके बिना सुरक्षित है ".." इसे उचित ठहराने में क्या गलत हो सकता है ".." बस पर्याप्त समय नहीं है "ये सभी बीएस हैं।

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

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

+0

स्टारशिप 3000, क्या आप TSQLUnit का उपयोग कर रहे हैं? क्या आप अपेक्षित मूल्यों के मुकाबले पूरे परिणाम सेट की तुलना करते हैं, या आप व्यक्तिगत मूल्यों को अलग से मेल खाते हैं? –

+1

वर्तमान में नहीं, मैं अतीत में TSQLUnit का उपयोग नहीं कर रहा हूं। अब मैं रुबी से एक यूनिट परीक्षण ढांचे का उपयोग करता हूं और रुबी ने मेरी एसक्यूएल स्क्रिप्ट निष्पादित की है जिसमें एसक्यूएलसीएमडी के लिए कॉल के माध्यम से 1 टेस्ट होता है। यह कॉल तब रूबी को पास असफल मान और स्ट्रिंग विवरण देता है। जब मेरे पास कुछ समय होगा तो मैं सरल उदाहरण खोदूंगा। – Kuberchaun

5

एक इकाई परीक्षण उपकरण के लिए, मुझे DBFit के साथ सबसे अधिक सफलता मिली है।

मुझे कभी भी टीएसक्यूएल परीक्षण कवरेज को मापने के लिए कोई उपकरण नहीं मिला है।

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

+0

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

+0

@AlexKuznetsov - कुछ डिग्री के लिए, यह डीबी इकाई परीक्षण की प्रकृति है - यह मैंने कोशिश की सभी उपकरणों के साथ समस्या है। मैंने पाया कि परीक्षण के अंदर अन्य परीक्षण/पृष्ठों को शामिल करने की क्षमता का एक बार लेने के बाद डीबीएफआईटी समस्या को कम करने के लिए सबसे दूर चला जाता है। कुछ योजनाओं के साथ, रिफैक्टरिंग के दर्द को कम करने के लिए परीक्षणों को संरचित किया जा सकता है। मुझे पता चला कि अन्य सकारात्मक यह है कि परीक्षण कम तकनीकी उपयोगकर्ताओं को इस तरह से समझने योग्य हैं कि, TSQLUnit/NUnit परीक्षण नहीं हैं। –

+0

एड, आपके अपेक्षित आउटपुट में बदलाव होने पर आप क्या करते हैं? क्या आप अपने परीक्षण मैन्युअल रूप से ठीक करते हैं या आप नए अपेक्षित आउटपुट उत्पन्न करते हैं? –

2

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

हमारी विशेष प्रणाली लगभग पूरी तरह से टी-एसक्यूएल में कोडित है।

आप अपने टी-एसक्यूएल का परीक्षण कैसे करते हैं? आप किस पुस्तकालय/उपकरण का उपयोग करते हैं?

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

आपके कोड का प्रतिशत प्रतिशत यूनिट परीक्षणों द्वारा कवर किया गया है और आप इसे कैसे मापते हैं?

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

आप समय और प्रयास है जो आप दोहन का लाभ मिला है या नहीं, अपने इकाई परीक्षण में निवेश लगता है?

हाँ

आप इकाई परीक्षण का उपयोग नहीं करते हैं, तो आप क्यों नहीं समझा सकता है?

हमारी इकाई परीक्षण हमारे "प्रक्रिया" स्तरों में से प्रत्येक पर है। प्रत्येक प्रक्रिया आमतौर पर एक संग्रहीत प्रक्रिया से मेल खाती है - इसलिए वह इकाई है जिसे हम परीक्षण करते हैं। अंतिम आउटपुट की तुलना सिस्टम परीक्षण से मेल खाती है।

+0

कैड रूक्स, क्या आप विस्तार से बता सकते हैं कि आपने अपने परीक्षणों को कोड करने के लिए टी-एसक्यूएल क्यों चुना? –

+0

@AlexKuznetsov क्योंकि हमारी प्रणाली पूरी तरह से टी-एसक्यूएल में है (एक नियंत्रण कक्ष के अलावा), यह टी-एसक्यूएल में सभी परीक्षण करने के लिए समझ में आया। –

+0

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

1

हमने हाल ही में दृश्य स्टूडियो 2010 इकाई परीक्षण ढांचे के लिए T-SQL यूनिट इसे अपनाया है। सबसे बड़ी शिकायत यह है कि हम आदेश अगले परीक्षण (रों) के लिए "स्वच्छ" डेटाबेस छोड़ने के लिए परीक्षण के भीतर हमारे अपने लेन-देन दायरे को प्रबंधित करने की जरूरत है। यह ऐसा कुछ है जो टी-एसक्यूएल इकाई शुरुआत में सही प्रदान करता है।

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

हमने परीक्षण दोहन पर आरओआई नहीं मापा है, लेकिन अनुभव ने हमें दिखाया है कि उत्पादन डेटाबेस में परिवर्तन बहुत महंगा रहे हैं।

+0

सुमितिम, क्या आपने अपने सभी परीक्षणों के लिए एक और एक ही डेटा स्थापित करने पर विचार किया है, ताकि आपको लेनदेन की आवश्यकता न हो? –

+0

@AlexKuznetsov हमने "यूनिट टेस्ट" के अर्थ के आसपास बहुत बहस की थी। परिभाषा का एक हिस्सा जिसे हमने कोशिश करने और संरक्षित करने का निर्णय लिया है, यह है कि यूनिट परीक्षणों को सिस्टम की समग्र स्थिति को प्रभावित नहीं करना चाहिए।दुर्भाग्यवश डेटाबेस स्वाभाविक रूप से राज्य हैं ताकि कुछ चुनौतियों का सामना किया जा सके। यह संभव है कि हमारा मॉडल समय के साथ बदल जाएगा, इसलिए टेस्ट निष्पादन से पहले किसी भी आवश्यक डेटा को पूर्व शर्त के रूप में पेश करने और उस सब को वापस रोल करने के लिए बेहतर महसूस किया गया ताकि हम किसी अन्य परीक्षण को अमान्य नहीं कर सकें। वे (यूनिट परीक्षण) एक दूसरे से स्वतंत्र रूप से चलाने में सक्षम होना चाहिए। – Suirtimed

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