क्या आप अच्छे कवरेज चाहते हैं? बस एक परीक्षण है जो कोड के एक टुकड़े में हर शाखा को चलाता है, वास्तव में यह सही नहीं है कि यह सही है - अक्सर यह कोने के मामलों के बारे में अधिक है और आप डेवलपर को यह जानने के लिए सबसे अच्छा रखा जाता है कि इन कोने के मामले क्या हैं। ऐसा लगता है कि यह 'यहां एक दिलचस्प इनपुट संयोजन' कहकर काम करता है, जबकि आप जो चाहते हैं उससे अधिक संभावना है कि आप जिस सिस्टम को देखना चाहते हैं उसके व्यवहार को निर्दिष्ट करना है - यदि आपने पहले स्थान पर गलत कोड लिखा है तो दिलचस्प इनपुट सही कोड के लिए पूरी तरह से अप्रासंगिक हो सकता है।
शायद यह वह उत्तर नहीं है जिसे आप ढूंढ रहे हैं लेकिन मैं कहूंगा कि ऐसा करने का सबसे अच्छा तरीका हाथ से है! कोडिंग शुरू करने से पहले एक स्पेक लिखें और इसे परीक्षण के मामलों में लोड करें जब आप जानते हैं/क्योंकि आप अपनी कक्षा/उपप्रणाली के लिए एपीआई लिख रहे हैं।
एपीआई भरने/कोड लिखने के रूप में आपको अतिरिक्त बिट्स और टुकड़े लेने की संभावना है जिन्हें आप करना चाहते हैं + पता लगाएं कि मुश्किल बिट्स क्या हैं - यदि आपके पास सशर्त आदि हैं जो कुछ ऐसा महसूस करते हैं आपके कोड को दोबारा करने वाले किसी व्यक्ति को गलत हो सकता है, फिर एक टेस्ट केस लिखें जो उन्हें कवर करता है। मैं कभी-कभी जानबूझकर इन बिंदुओं पर कोड गलत लिखता हूं, उसमें एक परीक्षा प्राप्त होती है और फिर यह सुनिश्चित करने के लिए कि यह जांच कोड के माध्यम से सही पथ की जांच कर रही है, इसे सही करें।
फिर किसी भी विषम मूल्यों को आज़माएं और सोचें जो आपने कवर नहीं किया हो - नकारात्मक इनपुट, नल इत्यादि। अक्सर ये ऐसे मामले होंगे जो अमान्य हैं और आप इस बारे में सोचना नहीं चाहते हैं - इन मामलों में मैं आम तौर पर यह कहने के लिए कुछ परीक्षण लिखते हैं कि उन्हें अपवाद फेंकना चाहिए - जो मूल रूप से उन मामलों में कोड का दुरुपयोग करने वाले लोगों को रोकता है जिनके बारे में आपने सही तरीके से/अमान्य डेटा के बारे में नहीं बताया है।
आपको लगता है कि ऊपर उल्लेख किया है आप संख्यानुसार गहन कोड के साथ काम कर रहे हैं - यह मानते हुए कि कोड नहीं है - यह एक स्तर के परीक्षण के लायक ऊपर ताकि आप प्रणाली में व्यवहार तुम सिर्फ संख्या के बजाय क्रंचिंग लिए देख रहे हैं परीक्षण कर सकते हैं हो सकता है पूरी तरह से संख्यात्मक यह आपको निष्पादन की कुछ वास्तविक स्थितियों को स्थापित करने में मदद करेगा और यह भी सुनिश्चित करेगा कि जिस भी संख्या में क्रंचिंग बिट वास्तव में बाकी प्रोग्राम के साथ बातचीत कर रहा है, जिस तरह से आपको इसकी आवश्यकता हो - यदि यह कुछ एल्गोरिदमिक है तो आप शायद बेहतर हो जाएंगे वांछित आउटपुट अलग-अलग परिस्थितियों में क्या है, इसकी विशेषता बनाने के लिए एक स्वीकृति परीक्षण भाषा लिखना - यह आपको जो हासिल करने की कोशिश कर रहा है उसकी एक स्पष्ट तस्वीर देता है, यह आपको एक प्रणाली के माध्यम से बड़ी मात्रा में (वास्तविक) डेटा फेंकने की अनुमति देता है जो शायद बेहतर है कंप्यूटर उत्पन्न इनपुट से। इसका दूसरा लाभ यह है कि अगर आपको एल्गोरिदम को कुछ नई आवश्यकता को पूरा करने के लिए एक कठोर पुनर्लेख की आवश्यकता होती है तो आपको केवल नया टेस्ट केस जोड़ना होगा और फिर पुनः लिखना/रिफैक्टर करना होगा; यदि आपके परीक्षण केवल एल्गोरिदम के विवरण देख रहे थे और बाहरी दुनिया पर प्रभावों को मानते थे तो आपके पास यह पता लगाने की कोशिश कर रहा था कि एल्गोरिदम वर्तमान में व्यवहार को कैसे प्रभावित करता है, कौन से हिस्से सही थे और जो नहीं थे और फिर कोशिश कर रहे थे एक नए एपीआई/एल्गोरिदम पर यूनिट परीक्षणों का भार माइग्रेट करें।
स्रोत
2012-07-17 08:48:57
'फ्लोट' के लिए '==' से संबंधित सशर्त से बचें। इसके बजाय '<' or '> 'का उपयोग करें। यदि आपको '==' का उपयोग करना है तो उस ईपीएसलॉन की जो भी सहनशीलता है, उसके लिए 'Math.Abs (मान - लक्ष्य)
@ जेसे चिश्ल्म मैं स्थिर विश्लेषण उपकरण से अवगत हूं जो आपको ऐसी कोडिंग त्रुटियों को खोजने की अनुमति देता है। मुझे यकीन नहीं है कि यह सवाल के साथ कैसे मदद करता है। – GregC
@ ग्रेगसी, मुझे यकीन नहीं है कि मैं समझ रहा हूं कि आप क्या पूछ रहे हैं। आप जानना चाहते हैं (ए) क्या सशर्त बयान जिसमें फ्लोटिंग पॉइंट नंबर शामिल हैं, एक ईपीएसलॉन सहिष्णुता का उपयोग करते हैं या (बी) आपके एल्गोरिदम संख्यात्मक रूप से स्थिर हैं या (सी) कोड कोड कवरेज के लिए बस एक सिफारिश है? या कुछ और? –