टीडीडी परीक्षण कैसे दानेदार होना चाहिए?


18

टीडीडी प्रशिक्षण के दौरान चिकित्सा सॉफ्टवेयर के मामले में हम निम्नलिखित कहानी को लागू कर रहे हैं: "जब उपयोगकर्ता सेव बटन दबाता है, तो सिस्टम को रोगी को जोड़ना चाहिए, डिवाइस को जोड़ना चाहिए और डिवाइस डेटा रिकॉर्ड जोड़ना चाहिए"।

अंतिम कार्यान्वयन कुछ इस तरह दिखाई देगा:

if (_importDialog.Show() == ImportDialogResult.SaveButtonIsPressed)
{
   AddPatient();
   AddDevice();
   AddDeviceDataRecords();
}

हमारे पास इसे लागू करने के दो तरीके हैं:

  1. तीन परीक्षण जहां प्रत्येक एक विधि की पुष्टि करता है (AddPatient, AddDevice, AddDeviceDataRecords) कहा जाता था
  2. एक परीक्षण जो तीनों विधियों को सत्यापित करता है, कहा जाता था

पहले मामले में अगर क्लॉज की स्थिति में कुछ गलत है, तो यह तीनों परीक्षण विफल हो जाएंगे। लेकिन दूसरे मामले में यदि परीक्षण विफल हो जाता है, तो हमें यकीन नहीं है कि क्या गलत है। आप किस तरह से पसंद करेंगे?

जवाबों:


8

लेकिन दूसरे मामले में यदि परीक्षण विफल हो जाता है, तो हमें यकीन नहीं है कि क्या गलत है।

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

व्यवहार में, विकल्प 1 और 2 के बीच का चुनाव भी स्थिति पर निर्भर करता है। यदि मैं एक विरासत परियोजना में आपके द्वारा ऊपर दिखाए गए कोड को देखता हूं, तो मैं यह सत्यापित करने के लिए केस # 2 के व्यावहारिक दृष्टिकोण को चुनता हूं कि शर्त पूरी होने पर प्रत्येक 3 विधियों को ठीक से कहा जाता है। यदि मैं अभी इस कोड के टुकड़े को विकसित कर रहा हूं, तो 3 विधि कॉलों को समय-समय पर अलग-अलग बिंदुओं पर (एक-दूसरे से संभवतः दिन या महीने दूर) एक-एक करके जोड़ा जाएगा, इसलिए मैं एक नया, अलग इकाई परीक्षण जोड़ूंगा प्रत्येक कॉल को सत्यापित करने के लिए।

ध्यान दें, कि किसी भी तरह से, आपके पास यह सत्यापित करने के लिए अलग-अलग इकाई परीक्षण भी होना चाहिए कि प्रत्येक व्यक्तिगत तरीके वही करते हैं जो यह करना चाहिए था।


क्या आपको अंततः उन तीन परीक्षणों को एक में मिलाना उचित नहीं लगेगा?
साइबेरियाईगू

@ मंदा, एक उचित निर्णय हो सकता है, हालांकि व्यवहार में मैं शायद ही कभी इस तरह के रिफैक्टिंग से परेशान हूं। फिर, मैं विरासत कोड के साथ काम कर रहा हूं, जहां प्राथमिकताएं अलग हैं: हम मौजूदा कोड के परीक्षण कवरेज को बढ़ाने और इकाई परीक्षणों की बढ़ती मात्रा को बनाए रखने पर ध्यान केंद्रित करते हैं।
Péter Török

30

आपके उदाहरण में ग्रैन्युलैरिटी इकाई और स्वीकृति परीक्षणों के बीच अंतर प्रतीत होता है।

एक यूनिटेस्ट कार्यक्षमता की एक एकल इकाई का परीक्षण करता है, जिसमें संभव के रूप में कुछ निर्भरताएं होती हैं। आपके मामले में, 4 इकाइयां हो सकती हैं

  • AddPatient एक मरीज को जोड़ता है (यानी संबंधित डेटाबेस फ़ंक्शन को कॉल करता है)?
  • AddDevice डिवाइस जोड़ता है?
  • AddDeviceDataRecords रिकॉर्ड जोड़ता है?
  • आपके उदाहरण में मुख्य कार्य को अनमैन्ड करता है AddPatient, AddDevice और AddDeviceFunctions

डिवेलपर्स डेवलपर्स के लिए हैं , इसलिए उन्हें विश्वास है, कि उनका कोड तकनीकी रूप से सही है

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

जब उपयोगकर्ता डेटा में प्रवेश करता है, तो ठीक क्लिक करता है और ...

  • ... रोगी की सूची में जाता है, उसे दिए गए नाम के साथ एक नया रोगी देखना चाहिए
  • ... डिवाइस सूची में जाता है, उसे एक नया डिवाइस देखना चाहिए
  • ... नए डिवाइस के विवरण पर जाता है, उसे नए डेटाकार्ड्स को देखना चाहिए

ग्राहकों के लिए स्वीकृति परीक्षण हैं , या, उनके साथ बेहतर संचार के निर्माण के लिए।

आपके प्रश्न का उत्तर देने के लिए "आप क्या पसंद करेंगे": अभी आपके लिए एक बड़ी समस्या क्या है, बग और प्रतिगमन (=> अधिक unittests) या बड़ी तस्वीर को समझना और औपचारिक करना (=> अधिक स्वीकृति परीक्षण)


13

हमारे पास इसे लागू करने के दो तरीके हैं:

वह झूठा है।

तीन परीक्षण जहां प्रत्येक एक विधि की पुष्टि करता है (AddPatient, AddDevice, AddDeviceDataRecords) कहा जाता था

आप चाहिए यकीन है कि यह काम करता है होना करने के लिए यह करते हैं।

एक परीक्षण जो तीनों विधियों को सत्यापित करता है, कहा जाता था

एपीआई कार्य सुनिश्चित करने के लिए आपको यह भी करना चाहिए ।

वर्ग - एक इकाई के रूप में - पूरी तरह से परीक्षण किया जाना चाहिए। प्रत्येक विधि।

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

यदि परीक्षण विफल रहता है, तो हमें यकीन नहीं है कि क्या गलत है।

सही बात। इसलिए आप सभी तरीकों का परीक्षण करें ।

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


2

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

उदाहरण के लिए, कल्पना करें कि आपके सिस्टम में एक मरीज को जोड़ने के लिए कुछ सबरूटीन्स (बाल कार्यों) की आवश्यकता होती है:

  1. VerifyPatientQualification
  2. EnsureDoctorExistence
  3. CheckInsuranceHistory
  4. EnsureEmptyBed

हम इनमें से प्रत्येक फ़ंक्शन के लिए यूनिट टेस्ट भी लिख सकते हैं।


2

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

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