यूनिट परीक्षणों में कोड की गुणवत्ता?


23

इकाई परीक्षण लिखते समय, क्या कोड को अच्छी गुणवत्ता और पठनीयता बनाने के लिए अतिरिक्त समय खर्च करना उचित है?

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


5
पठनीयता और स्थिरता को इकाई परीक्षण का प्राथमिक ध्यान केंद्रित करने की आवश्यकता है।
ईएल यूसुबोव

2
टेस्ट भी कोड हैं!
ग्रान्ट पॉलिन

यह अभी भी आपकी परियोजना का हिस्सा है, भले ही यह ग्राहकों को भेजा न जाए। उसके अनुसार उपचार करें।

जवाबों:


11

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

Demeter के कानून का उल्लंघन निश्चित रूप से आपके यूनिट परीक्षणों में एक समस्या है और साथ ही 2 अन्य लोग जो मेरे दिमाग से बाहर आते हैं:

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

  • यदि आपके परीक्षण उनके Assert वर्गों में Demeter के कानून को तोड़ते हैं (यानी आप किसी चीज के मूल्य को सत्यापित करते हैं जो कि परीक्षण के तहत ऑब्जेक्ट की निर्भरता ग्राफ में गहराई से नेस्टेड है), तो यह हो सकता है कि वे यूनिट परीक्षणों के बजाय वास्तव में एकीकरण परीक्षण हैं। दूसरे शब्दों में, अगर टेस्टा में आप यह मानते हैं कि एबीसीडी कुछ समान है, तो हो सकता है कि आप वास्तव में केवल ए के बजाय डी और ए का परीक्षण करने का प्रयास कर रहे हों ।

वैसे, जब आप कहेंगे

मैं तेज गति से लिखने और इतने सारे वैरिएबल का उपयोग न करने के लिए लॉ ऑफ डेमेटर को अक्सर तोड़ता हूं।

आपको पता होना चाहिए कि लेखन

var grab = myDependency.Grab;
var something = grab.Something;
var very = something.Very;

very.Deep();

वास्तव में इससे बेहतर कोई डिमेटर नहीं है

myDependency.Grab.Something.Very.Deep();

अगर आपका यही मतलब है।


47

यह यूनिट परीक्षणों के लिए अच्छी गुणवत्ता वाले कोड लिखने में खर्च करने लायक है:

  • उन्हें किसी अन्य कोड की तरह रखरखाव की आवश्यकता होगी।
  • इकाई परीक्षण आपके सिस्टम के लिए प्रलेखन के सर्वश्रेष्ठ स्रोतों में से एक हैं, और यकीनन सबसे विश्वसनीय रूप हैं। उन्हें वास्तव में दिखाना चाहिए:
    • आशय: "अपेक्षित व्यवहार क्या है?"।
    • उपयोग: "मैं इस एपीआई का उपयोग कैसे करूं?"
  • उन्हें किसी अन्य कोड की तरह डिबगिंग की आवश्यकता होगी।

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


22

हाँ, यह मायने रखता है। कई कारण हैं कि यूनिट परीक्षणों को अन्य कोड के समान तुलनीय मानक के लिए क्यों रखा जाना चाहिए:

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

  • इकाई परीक्षण छोटी गाड़ी भी हो सकते हैं। और जब कोड अच्छी तरह से लिखा जाता है तो त्रुटियां अधिक दिखाई देती हैं।

  • यदि, किसी कारण से, आपको बाद में एक मॉड्यूल को विभाजित करने की आवश्यकता है, तो आपको संभवतः इसकी इकाई परीक्षणों को भी विभाजित करना होगा। यह आसान है अगर परीक्षण ऐसे लिखे जाते हैं कि उनके पास आसानी से समझ में आने वाली निर्भरता हो।

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


12

यदि आप एक unittest नहीं पढ़ सकते हैं और यह पता लगा सकते हैं कि यह अगली बार परीक्षण कर रहा है तो यह विफल हो जाता है कि आप डिबगिंग समय को दोगुना कर देंगे (एक बार पता लगाने के लिए कि परीक्षण क्या है और एक बार कोड को ठीक करने के लिए यह परीक्षण कर रहा है)

ईमानदारी से unittests एक अपेक्षित परिणाम होना चाहिए; प्रक्रिया करो; वास्तविक परिणाम प्राप्त करें; वास्तविक प्रकार की संरचना के खिलाफ अपेक्षित परीक्षण जो लिखना और समझना आसान है


1

परीक्षण कोड को आपके उत्पादन कोड जितना ही प्यार मिलना चाहिए। पठनीयता के लिए, शायद और भी। अगर आपके अलावा किसी और को (कोड छोड़ने के दो हफ्ते बाद सहित) यह समझना चाहिए कि क्या चल रहा है, तो आपको अपने कोड को अच्छा बनाना चाहिए।

इसका मतलब है की:

  • बिल्डर कक्षाओं में परीक्षण डेटा का निर्माण निकालें।
  • अलग-अलग मुखर तरीकों में बहुउद्देशीय अभिकथन करें।
  • अपने नामकरण में बहुत सटीक रहें। Assert.That(x4, Is.EqualTo(y16*2*SOME_VALUE), ASS_ERR_TXT_56)अधिकांश पाठकों के लिए बहुत कम साज़ बनाता है।

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


1

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

अपने परीक्षण में इन चीजों में से एक करें:

  • डुप्लिकेट कोड
  • कम पठनीयता
  • कसा हुआ संयोजन
  • टेम्पोरल कपलिंग
  • उच्च चक्रवाती जटिलता (बहुत सारी निर्भरताएँ)

और जब आप एक बदलाव की जरूरत होती है तो आप बहुत सारे काम के लिए होते हैं।

आपके द्वारा सुझाए गए परीक्षणों की तरह व्यवहार करें, और आप इसे पछतावा करेंगे। आप शायद झूठे निष्कर्ष पर भी पहुँचेंगे कि "TDD काम नहीं करता है"।


0

यह इस बात पर निर्भर करता है कि ये यूनिट परीक्षण "अस्थायी" हैं या नहीं। अगर

  1. परीक्षण अक्सर इस्तेमाल किया जाएगा;

  2. डेवलपर्स को अन्य डेवलपर्स द्वारा लिखित इकाई परीक्षणों के साथ काम करना होगा;

  3. अधिकांश परीक्षण इकाई परीक्षणों द्वारा किया जाता है

फिर परीक्षणों को ठीक से लिखा जाना चाहिए। यदि परीक्षण में कोई बग है, तो बग को ढूंढना और उसे ठीक करना मुश्किल होगा, खासकर यदि परीक्षण लिखे जाने के बाद कुछ समय बीत चुका हो।

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


(1) इकाई परीक्षण कभी भी अस्थायी नहीं होते हैं (2) भले ही वे आपके स्वयं के लिए हों, एक महीने (या अधिक) में, आपको सभी विवरण याद नहीं होंगे, इसलिए इसे ठीक से करना महत्वपूर्ण है - यहां तक ​​कि खुद के लिए भी
BЈовић
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.