क्या यूनिट परीक्षण वास्तव में प्रलेखन के रूप में उपयोग किए जाते हैं?


22

'यूनिट टेस्ट के तहत कोड के प्रलेखन का एक बहुत ही महत्वपूर्ण स्रोत हैं' के विवरण में मैं जितनी बार पढ़ता हूं उतनी बार गिनती नहीं कर सकता। मैं इनकार नहीं करता कि वे सच हैं।

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

तो सवाल यह है: इकाई परीक्षणों को दस्तावेज के रूप में कब इस्तेमाल किया जाता है? जब टिप्पणियाँ सब कुछ कवर नहीं करती हैं? विकासशील लोगों द्वारा स्रोत का विस्तार? और वे क्या उजागर करते हैं जो उपयोगी और प्रासंगिक हो सकते हैं कि प्रलेखन स्वयं को उजागर नहीं कर सकता है?


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

10
टिप्पणियाँ गलत हो सकती हैं।

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

3
मैंने यूनिट परीक्षणों को देखा है जो "इकाई प्रयोगों" के रूप में बेहतर होंगे। बाहरी कारकों पर उनकी निर्भरता सिर्फ इतनी थी कि उन्हें बेकार बना दिया। वे बहुत अस्पष्ट भी थे। (हां, मेरे पास उन्हें बेहतर बनाने के लिए एक दीर्घकालिक लक्ष्य है, लेकिन मैं अन्य चीजें भी करता हूं ...)
डोनाल्ड फेलो

4
@Ant इकाई परीक्षण वास्तविक कोड का आह्वान करते हैं और अपेक्षित प्रतिक्रिया का दस्तावेजीकरण करते हैं और वास्तविक प्रतिक्रिया से इसकी तुलना करते हैं। कोड को सही किया गया है या नहीं, यह बिंदु नहीं है - परीक्षण दस्तावेजों को यह कैसे लागू करना है।

जवाबों:


17

वे एक ABSOLUTE संदर्भ दस्तावेज नहीं हैं

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

इसलिए अंत में, कोड को समझने का सबसे अच्छा तरीका पठनीय कार्य कोड है

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

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

लेकिन वे अभी भी एक सहायक प्रलेखन लागू कर रहे हैं

हालांकि, जब कोई विशेष वर्ग क्या करता है, इसके बारे में संदेह है, खासकर अगर लंबा, अस्पष्ट और टिप्पणियों की कमी है (आप इस प्रकार को जानते हैं ...), मैं जल्दी से इसकी परीक्षण कक्षा (ईएस) और जांच खोजने की कोशिश करता हूं:

  • क्या वे वास्तव में जांचने की कोशिश करते हैं (सबसे महत्वपूर्ण tidbits के बारे में एक संकेत देता है, सिवाय इसके कि अगर डेवलपर ने केवल "आसान" परीक्षणों को लागू करने के ऊपर उल्लिखित त्रुटि की थी)
  • और अगर कोने के मामले हैं।

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

प्रतिगमन और कीड़े को टेस्ट की भी आवश्यकता है

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

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


क्या मैं पूछ सकता हूं कि मुझे क्यों अपमानित किया गया? वहाँ आप क्या करते हैं या आप किस बात से असहमत हैं?
जाइल

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

@MadKeithV: धन्यवाद। मैंने "पठनीय और काम करने वाले कोड" के लिए अपडेट किया और उस बिट को ऊपर बढ़ा दिया।
जूल

11

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

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


5

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

क्या वे प्रलेखन की जगह ले रहे हैं? नहीं।

क्या वे प्रलेखन के लिए एक उपयोगी परिशिष्ट हैं? हाँ।


4

मैं इकाई परीक्षण देखता हूं:

  • दस्तावेज़ को सही साबित करने का एक तरीका सही है (यह मानते हुए कि दस्तावेज़ एपी कार्यान्वयन से मेल खाता है)।
  • एक डेवलपर को डेमो करने का तरीका एक विशेष सुविधा का उपयोग कैसे करें; यूनिट टेस्ट फिक्स्चर / यूनिट टेस्ट खुद आमतौर पर काफी छोटे होते हैं जो कि कोई भी इससे जल्दी सीख सकता है।
  • और जाहिर है किसी भी प्रतिगमन बग स्पॉट करने के लिए।

कुछ विस्तार के लिए उन्हें मौजूदा दस्तावेज़ के पूरक के रूप में देखा जा सकता है, लेकिन दस्तावेज़ के रूप में नहीं।


3

मैं आपसे एक और प्रश्न पूछकर उत्तर देने जा रहा हूं।

जब आप उपयोग करने की कोशिश कर रहे हैं, तो एक नया उदाहरण / दिनचर्या के साथ काम करते समय आपने कितनी बार कोड उदाहरण देखने में मदद की है? कोड नमूने के ऑनलाइन खोज के लिए Google पर स्विच करने में विफल?

ठीक वैसा ही है जब आप इकाई परीक्षणों को प्रलेखन के रूप में उपयोग करेंगे।

  • वास्तव में इकाई परीक्षण सामान्य कोड उदाहरणों की तुलना में थोड़ा अधिक कठोर हो सकते हैं, क्योंकि आपके पास कई परीक्षण (उदाहरण) होने चाहिए
  • उम्मीद है कि आपके यूनिट परीक्षण उचित उपयोग को दर्शाते हैं । उदाहरण के लिए, वे स्पष्ट रूप से सामान्य वस्तुओं या नकली वस्तुओं के माध्यम से सभी आवश्यक निर्भरता दिखाते हैं। (अन्यथा वे विशेष रूप से अच्छी इकाई परीक्षण नहीं हैं।)
  • नोट: यदि आपकी टिप्पणी या "सामान्य प्रलेखन" कोड उदाहरण प्रदान करता है, तो आप वास्तव में DRY सिद्धांतों का उल्लंघन कर रहे हैं। और वे कोड उदाहरण आसानी से गलत हो सकते हैं समय के साथ हो सकते हैं, जबकि नियमित रूप से निष्पादित इकाई परीक्षणों के साथ इसकी काफी कम संभावना है।
  • यदि यूनिट परीक्षण पूरी तरह से (आमतौर पर एक बड़ा है ), तो उन्हें अतिरिक्त जानकारी प्रदान करनी चाहिए:
    • सभी ज्ञात किनारे के मामलों को स्पष्ट रूप से चित्रित किया गया है।
    • सभी अपेक्षित अपवाद जिन्हें फेंका जा सकता है।
    • पहले पाए गए सभी बग (यह संभवतः इकाई के लिए एक नया ग्राहक लिखते समय परीक्षण के तहत इकाई का विस्तार करते समय अधिक उपयोगी है)।
    • यूनिट से जुड़े सभी अंतर्निहित व्यावसायिक नियम। (यदि कोई)

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

  • मैं यह सुझाव देने के लिए उद्यम करूंगा कि अक्सर परीक्षण स्वयं उद्देश्य के लिए पर्याप्त रूप से लिखे नहीं गए हैं। अन्य उत्तर पहले से ही परीक्षण के लिए तैयार हैं:
    • अधूरा।
    • भ्रामक। (मैंने परीक्षण मामलों को देखा है जो सीधे परीक्षण के तहत विधि को नहीं बुलाते हैं - आप कॉल करने से पहले कॉल स्टैक में 3/4 स्तर तक जाते हैं और विधि को कॉल करने के लिए पूर्व शर्त एक जटिल वर्ग पदानुक्रम में अलग-अलग स्थानों पर बिखरे हुए हैं। )
    • रगड़ा हुआ। (आमतौर पर परीक्षण करना चाहिए असफल जब वे पुराना हो जाते हैं, लेकिन हमेशा ऐसा नहीं है)।
  • जब भी किसी उदाहरण की आवश्यकता उत्पन्न होती है, तो उत्पादन कोड में पहले से ही उपलब्ध उपयोग के बहुत से उदाहरण हैं।
  • परीक्षण के तहत इकाई इतनी अच्छी तरह से लिखी गई है (स्वयं दस्तावेजीकरण) कि विधियों को उदाहरणों की आवश्यकता नहीं है। मैं चाहता हूँ!
  • एक प्रोग्रामर के रूप में मेरे अनुभव में, हम अगले मंगलवार को गहन अंत और आरटीएफएम में कूदने के लिए काफी उत्सुक हैं ...
  • प्रलेखन और टिप्पणियां जो DRY सिद्धांत का उल्लंघन करती हैं।

2

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

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

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

एक उदाहरण: आपके पास एक विधि m है (a, b)जो एक निश्चित गणना करता है। पश्चगामी संगतता आवश्यकताओं के कारण, इसे विशेष-केस इनपुट चाहिए a=0और a=-1, लेकिन केवल तभी जब bNULL। यह कहते हुए कि एक टिप्पणी जटिल है, क्रिया, और अगर आवश्यकता बाद में हटा दी जाती है तो बासी होने की संभावना है।

यदि आप कुछ इकाई परीक्षण करते हैं जो व्यवहार की जाँच करता है m(0, NULL), m(-1, x)तो आपको कई लाभ मिलते हैं:

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

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

@stijn: सच है। उस मामले में सबसे अच्छा तरीका संभवतः डॉक्स में विशेष मामले का एक संक्षिप्त उल्लेख होगा, साथ ही गड़बड़ विवरण के लिए इकाई परीक्षण।
सालेके
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.