क्या कम स्तर के घटकों पर टीडीडी करना एक अच्छा विचार है?


10

मैं एक निम्न स्तर का ड्राइवर या OS घटक / गुठली लिखने पर विचार कर रहा हूँ।

Osdev.org लोगों को लगता है कि महत्वपूर्ण बिट्स सार्थक इस तरह से परीक्षण योग्य नहीं कर रहे हैं लगता है, लेकिन मैं कुछ विचार विमर्श जहां लोगों को अलग ढंग से सोचा पढ़ा है। मैंने चारों ओर देखा है, लेकिन निम्न-स्तरीय घटकों पर TDD के किसी भी वास्तविक जीवन के उदाहरणों को खोजने में विफल रहा है।

क्या यह कुछ लोग वास्तव में करते हैं, या सिर्फ कुछ ऐसा है जो लोग सिद्धांत के बारे में बात करते हैं क्योंकि व्यवहार में इसे करने का एक अच्छा तरीका नहीं है?


यदि सिर्फ एमएस ने कर्नेल डेवलपर्स को उपयुक्त "कर्नेल मोक्स" (या जो कुछ भी हो सकता है) प्रदान किया है, तो प्रश्न में अभ्यास "कल्पनाशील" नहीं होगा, मुझे लगता है।
mlvljr

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

मेरे दृष्टिकोण से एक ही बात कहते हैं - कोई चिंता नहीं
बिल

जवाबों:


3

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


1
और एमुलेटर का परीक्षण क्यों नहीं किया गया? ;)
१०:२२ बजे mlvljr

@mlvljr: क्योंकि एमुलेटर असली चीज नहीं हैं। असली हार्डवेयर का कोई विकल्प नहीं है।
पॉल नाथन

@mlvljr आपको असली हार्डवेयर के खिलाफ एमुलेटर का भी परीक्षण करना होगा, मूल परीक्षणों का परीक्षण करने के लिए बनाए गए टेस्ट सूट का उपयोग करना ... प्रतीक्षा करें, मैं फिर से कहां हूं?
स्वयं पर ध्यान दें -

तो, vmware और alikes तो परीक्षण नहीं किया जा सकता है?
mlvljr

1
@mlvljr: यह एक मान्य बिंदु है, लेकिन मुझे लगता है कि यह "TDD" के दायरे से बाहर है। बहुत से डेवलपर्स के पास एक स्क्रिप्ट योग्य, इंस्ट्रूमेंटेड सिस्टम-स्तरीय एमुलेटर तक पहुंच नहीं है। मैं चार-चैनल दायरे के लिए भाग्यशाली महसूस कर रहा था!
TMN

3

मैं व्यक्तिगत रूप से विश्वास करता हूं कि कोई भी TDD के कई लाभ प्राप्त कर सकता है (वास्तव में TDD का पालन किए बिना), द्वारा:

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

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

संपादित:

पृष्ठ को अधिक ध्यान से पढ़ने के बाद,

हालांकि "टेस्टेड" टेस्ट ड्राइवर में अधिकांश कर्नेल फ़ंक्शन का परीक्षण करना संभव है, वास्तव में "रसदार" सामान जैसे रुकावट से निपटने, प्रक्रिया प्रेषण या स्मृति प्रबंधन शायद इकाई-परीक्षण योग्य नहीं हैं। --- http://wiki.osdev.org/Unit_Testing से

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


यह भी माना जा रहा है कि महत्वपूर्ण भाग ऐसे भाग हैं जिन्हें अलग-अलग परीक्षण की आवश्यकता होती है।
बिल

क्या कमाल का जवाब है! कुछ स्तरों में चीयर्स!
मैनुअलबेटनचर्ट

1

मैं नही। अपने मास्टर के एम्बेडेड कोड में, मैं सिर्फ कोड लिखता हूं और अपना समय तर्क देता हूं कि यह क्या करता है (और क्या नहीं)। मुझे यकीन नहीं है कि यह मेरे मामले में वैसे भी हो सकता है, मैं परीक्षण कोड को इंजेक्ट किए बिना स्मृति की शारीरिक सीमा के करीब अशांति पा रहा हूं।

मुझे लगता है कि ऐसे सिस्टम के लिए जो काफी बड़े हैं (यानी MB की मेमोरी है, KB नहीं), यह कुछ घटकों के लिए किया जा सकता है यदि आपके पास पर्याप्त समय और प्रयास है। पिन-कोडिंग का परीक्षण पिन को ऊपर उठाकर नकल करना ... एर ... बहुत सार्थक नहीं है। यदि आपने अपने तर्क को पर्याप्त रूप से अलग कर दिया है, तो आप तर्क का कहीं और परीक्षण कर सकते हैं।

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

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