टी एल; डॉ
अच्छा, उपयोगी परीक्षण लिखना कठिन है, और C ++ में इसकी उच्च लागत है। क्या आप अनुभव कर सकते हैं कि डेवलपर्स आपके औचित्य को क्या और कब परीक्षण करना चाहते हैं?
लम्बी कहानी
मैं परीक्षण-संचालित विकास करता था, वास्तव में मेरी पूरी टीम, लेकिन यह हमारे लिए अच्छा काम नहीं करता था। हमारे पास कई परीक्षण हैं, लेकिन वे कभी उन मामलों को कवर नहीं करते हैं जहां हमारे पास वास्तविक कीड़े और regressions हैं - जो आमतौर पर तब होते हैं जब इकाइयां बातचीत कर रही होती हैं, न कि उनके पृथक व्यवहार से।
यह अक्सर यूनिट स्तर पर परीक्षण करने के लिए इतना कठिन होता है कि हमने टीडीडी (घटकों को छोड़कर जहां यह वास्तव में विकास को गति देता है) को करना बंद कर दिया, और इसके बजाय एकीकरण परीक्षण कवरेज को बढ़ाने में अधिक समय लगाया। हालांकि छोटी इकाई परीक्षणों ने कभी कोई वास्तविक बग नहीं पकड़ा और मूल रूप से केवल रखरखाव ओवरहेड थे, एकीकरण परीक्षण वास्तव में प्रयास के लायक हैं।
अब मुझे एक नई परियोजना विरासत में मिली है, और मैं सोच रहा हूं कि इसे कैसे परीक्षण किया जाए। यह एक मूल C ++ / OpenGL एप्लिकेशन है, इसलिए एकीकरण परीक्षण वास्तव में एक विकल्प नहीं हैं। लेकिन C ++ में यूनिट परीक्षण जावा की तुलना में थोड़ा कठिन है (आपको सामान बनाने के लिए विस्फोटक होना चाहिए virtual
), और कार्यक्रम भारी वस्तु उन्मुख नहीं है, इसलिए मैं कुछ सामान को मॉक / स्टब नहीं कर सकता।
मैं अलग नहीं करना चाहता और OO-ize को पूरी तरह से लिखने की खातिर कुछ परीक्षण लिखने के लिए। तो मैं आपसे पूछ रहा हूं: यह क्या है जिसके लिए मुझे परीक्षण लिखना चाहिए? उदाहरण के लिए:
- कार्य / कक्षाएं जिन्हें मैं अक्सर बदलने की उम्मीद करता हूं?
- कार्य / कक्षाएं जो मैन्युअल रूप से परीक्षण करने के लिए अधिक कठिन हैं?
- कार्य / कक्षाएं जो पहले से ही परीक्षण करना आसान है?
मैंने कुछ सम्मानजनक C ++ कोड आधारों की जांच करना शुरू किया कि वे परीक्षण के बारे में कैसे देखते हैं। अभी मैं क्रोमियम स्रोत कोड देख रहा हूं, लेकिन मुझे कोड से उनके परीक्षण तर्क निकालने में मुश्किल हो रही है। यदि किसी के पास एक अच्छा उदाहरण या पोस्ट है कि कैसे लोकप्रिय C ++ उपयोगकर्ता (समिति के लोग, पुस्तक लेखक, Google, फेसबुक, Microsoft, ...) से संपर्क करें, तो यह अतिरिक्त सहायक होगा।
अपडेट करें
मैंने यह लिखने के बाद से इस साइट और वेब पर अपना रास्ता खोज लिया है। कुछ अच्छा सामान मिला:
- इकाई परीक्षण न करना कब उचित है?
- /programming/109432/what-not-to-test-when-it-comes-to-unit-testing
- http://junit.sourceforge.net/doc/faq/faq.htm#best
अफसोस की बात है कि ये सभी जावा / सी # केंद्रित हैं। जावा / सी # में बहुत सारे परीक्षण लिखना एक बड़ी समस्या नहीं है, इसलिए लाभ आमतौर पर लागतों को प्रभावित करता है।
लेकिन जैसा कि मैंने ऊपर लिखा है, यह C ++ में अधिक कठिन है। खासकर यदि आपका कोड आधार-ओ-ओ-ओ नहीं है, तो आपको एक अच्छी इकाई परीक्षण कवरेज प्राप्त करने के लिए चीजों को गंभीर रूप से गड़बड़ करना होगा। उदाहरण के लिए: मुझे जो आवेदन विरासत में मिला है Graphics
उसमें एक नाम स्थान है जो ओपनगेल के ऊपर एक पतली परत है। किसी भी संस्था का परीक्षण करने के लिए - जो सभी सीधे अपने कार्यों का उपयोग करते हैं - मुझे इसे एक इंटरफ़ेस और एक वर्ग में बदलना होगा और इसे सभी संस्थाओं में इंजेक्ट करना होगा। वह सिर्फ एक उदाहरण है।
इसलिए इस प्रश्न का उत्तर देते समय, कृपया ध्यान रखें कि मुझे परीक्षण लिखने के लिए एक बड़ा निवेश करना होगा।