(कोई "संबंधित प्रश्न" ऐसा नहीं लगता है, इसलिए यहां जाता है।)
मैं प्रोडक्शन कोड पर काम करता हूं।ऐसी किसी भी चीज़ के लिए बहस करना जो "उपयोगकर्ता को दिखाई नहीं दे रही है, कभी-कभी करना मुश्किल होता है। यदि बिक्री इसे नहीं देख पाती है, तो यह उनके लिए एक बाहरी लागत है, और वे इसके खिलाफ तब तक बहस करेंगे जब तक कि कोई बड़ा कारण न हो" .
कितना यूनिट परीक्षण एक अच्छी बात है?यदि आप प्रत्येक वर्ग, प्रत्येक विधि का परीक्षण करते हैं, तो आपकी वर्तमान रिलीज़ में अधिक समय लगेगा, संभवतः अधिक समय। यदि आप कुछ भी परीक्षण नहीं करते हैं, तो भविष्य में रखरखाव में आपको अधिक समय लगेगा, संभवतः बहुत अधिक समय क्योंकि बग फिक्स और नई कार्यक्षमता उन समस्याओं का कारण बनती है जिनकी आपने कल्पना नहीं की थी, और यह कि यूनिट परीक्षण पकड़े गए होंगे।
आप एक स्वस्थ, न्यायोचित संतुलन कैसे पाते हैं?
संपादित करें: कुछ सवालों के जवाब देने के लिए जो उचित लोगों ने उठाए हैं ...
बिक्री प्रक्रिया नहीं चला रही है, लेकिन उनके पास निश्चित रूप से इनपुट है, और चाहिए किसी भी समूह में सीमित इनपुट है। वे "बिलों का भुगतान करने वाले हैं। यदि वे" पूरी तरह से सब कुछ संचालित कर रहे हैं, तो यह अनुचित होगा, जाहिर है।
मुझे यकीन है कि कोई सबसे अच्छा जवाब नहीं है, लेकिन मैं उत्सुक हूं कि दूसरे लोग क्या उचित समझते हैं। मैं दोनों चरम सीमाओं (सब कुछ! कुछ भी नहीं!), और बीच में बहुत कुछ की उम्मीद कर रहा हूं।
किसी को भी अपना प्रबंधक चुनने का अधिकार नहीं है, और यदि इकाई परीक्षण पर एक खराब नीति किसी कंपनी/परियोजना के साथ रहने वाले किसी व्यक्ति में एक मेक-या-ब्रेक निर्णय है ... आपके पास एक है बहुत हम में से अधिकांश से अधिक करियर विकल्प, दोस्त। :-) </ I>
दूसरा संपादित करें:"न्यायोचित" वहाँ एक महत्वपूर्ण शब्द है। अगर मैं यूनिट परीक्षण के लिए बजट/अनुमति देना चाहता हूं, और "इसे चुपके से नहीं लेना चाहता हूं, तो मुझे इसका औचित्य साबित करने की आवश्यकता होगी"। मेरे लिए अभी शीर्ष उत्तर, "उन चीजों का परीक्षण करें जो पहले टूट चुकी हैं", क्योंकि मैं हमेशा प्रतिक्रियाशील नीतियों को सही ठहरा सकता हूं।
कुछ सक्रिय को उचित ठहराने के बारे में कोई विचार?</ I>
उत्तर:
उत्तर № 1 के लिए 15न्यूनतम इकाई परीक्षण के लिए दो सुझाव जो "हिरन के लिए धमाका" प्रदान करेंगे:
सबसे अधिक उपयोग किए जाने वाले भागों को खोजने के लिए अपने आवेदन को प्रोफाइल करके प्रारंभ करें - सुनिश्चित करें कि वे इकाई परीक्षण किए गए हैं। कम सामान्यतः उपयोग किए जाने वाले कोड की ओर बाहर की ओर बढ़ते रहें।
जब कोई बग ठीक हो जाता है, तो एक इकाई परीक्षण लिखें जो इसका पता लगा लेता।
उत्तर के लिए 14 № 2
यह, मुझे लगता है, एक भ्रम है:
यदि आप हर वर्ग, हर विधि का परीक्षण करते हैं, आपकी वर्तमान रिलीज़ में अधिक समय लगेगा, संभवतः अधिक लंबा।
परीक्षण - विशेष रूप से पहले परीक्षण - हमारे प्रवाह में सुधार करता है, हमें क्षेत्र में रखता है, वास्तव में हमें गति देता है। मुझे काम जल्दी हो जाता है, इसलिये मैं परीक्षण। यह परीक्षण करने में विफल हो रहा है जो हमें धीमा कर देता है।
मैं गेटर्स और सेटर्स का परीक्षण नहीं करता; मुझे लगता है कि यह व्यर्थ है - खासकर जब से वे स्वतः उत्पन्न होते हैं। लेकिन बाकी सब कुछ बहुत अधिक है - यह मेरा अभ्यास और मेरी सलाह है।
जवाब के लिए 5 № 3
अधिकतम के लिए इकाई परीक्षण बनाना प्रारंभ करेंसमस्याग्रस्त क्षेत्र (अर्थात कोड के ऐसे खंड जो अक्सर टूट जाते हैं और बिक्री टीम और डेवलपर्स के बीच बहुत अधिक संचार का कारण बनते हैं)। यह बिक्री टीम और अन्य कर्मियों द्वारा तत्काल और दृश्यमान प्रभाव पैदा करेगा।
फिर एक बार जब आपके पास विश्वसनीयता हो जाती है और वे मूल्य देखते हैं, तब तक कम समस्याग्रस्त क्षेत्रों को जोड़ना शुरू करें जब तक कि आप यह देखना शुरू न करें कि आरओआई अभी नहीं है।
निश्चित रूप से पूर्ण कवरेज सिद्धांत रूप में अच्छा है, लेकिन व्यवहार में यह अक्सर आवश्यक नहीं होता है। बहुत महंगा उल्लेख नहीं है।
जवाब के लिए 5 № 4
मुझे जो सलाह दी गई वह यह है:
- जैसा आप सोचते हैं वैसा ही प्रयास करें; थोड़ी देर बाद, अपना मूल्यांकन करें:
- यदि परीक्षण आपके विचार से अधिक समय व्यतीत करना उचित था, और आपको निवेश पर बहुत कम रिटर्न मिला, तो कम परीक्षण करें।
- यदि आपके उत्पाद का पर्याप्त परीक्षण किया गया था और आपने समय गंवा दिया, तो अधिक परीक्षण करें।
- आवश्यकतानुसार लूप करें।
एक और एल्गोरिदम: :-)
- कुछ परीक्षण वास्तव में हैं आसान, और वास्तव में उपयोगी. इसे हमेशा उच्च प्राथमिकता के साथ करें।
- कुछ परीक्षण वास्तव में हैं स्थापित करना कठिन है, और शायद ही कभी उपयोगी होता है (उदाहरण के लिए, इसे मानव परीक्षण द्वारा दोहराया जा सकता है जो हमेशा आपकी प्रक्रिया में होता है)। ऐसा करना बंद करो, यह आपका समय खो रहा है।
- बीच में संतुलन खोजने की कोशिश करें, जो आपकी परियोजना के चरणों के आधार पर समय बीतने के साथ भिन्न हो सकता है ...
कुछ परीक्षणों की उपयोगिता साबित करने के बारे में टिप्पणी के लिए अद्यतन (जिन पर आप दृढ़ता से विश्वास करते हैं):
मैं अक्सर अपने छोटे सहयोगियों से कह रहा हूं कि हम, तकनीकी लोगों (डेवलपर्स और इसी तरह) में कमी है हमारे प्रबंधन के साथ संचार. जैसा कि आप कहते हैं, प्रबंधन के लिए, लागतें जो नहीं हैंसूचीबद्ध नहीं हैं, इसलिए वे उनसे परहेज करते हुए एक और लागत का औचित्य साबित नहीं कर सकते हैं। मैं इस बात से भी परेशान रहता था। लेकिन इसके बारे में सोचना, यही उनके काम का सार है। यदि वे बिना औचित्य के अनावश्यक लागतों को स्वीकार करेंगे, तो वे गरीब प्रबंधक होंगे!
यह कहना नहीं है कि वे हमें इन गतिविधियों को नकारने के लिए सही हैं, जिन्हें हम जानते हैं कि उपयोगी हैं। लेकिन हम पहले लागत को स्पष्ट करना होगा. इससे भी अधिक, यदि हम लागत की रिपोर्ट a . में करते हैंउचित तरीके से, प्रबंधन को वह निर्णय लेना होगा जो हम चाहते हैं (या वे बुरे प्रबंधक होंगे; ध्यान दें कि निर्णय को अभी भी प्राथमिकता दी जा सकती है ...) इसलिए मैं लागत को ट्रैक करने का सुझाव देता हूं ताकि वे अब और छिपे न हों:
- उस स्थान पर जहाँ आप अपने द्वारा व्यतीत किए गए समय को ट्रैक करते हैं, लागत अलग से नोट करें जो बिना जांचे गए कोड से आते हैं (यदि उपकरण में उपलब्ध नहीं है, तो इसे एक टिप्पणी के रूप में जोड़ें)
- उन लागतों को एकत्रित करें एक समर्पित रिपोर्ट पर यदि उपकरण "टी" करता है, ताकि प्रत्येक सप्ताह, आपका प्रबंधक यह पढ़े कि आपके समय का X% उस पर खर्च किया गया था
- हर बार जब आप लोड का मूल्यांकन करते हैं, तो स्वचालित परीक्षण के साथ या बिना कई विकल्पों का अलग-अलग मूल्यांकन करें, मैन्युअल परीक्षण या स्वचालित परीक्षण पर समय व्यतीत करना दिखा रहा है लगभग उसी के बारे में है (यदि आप खुद को सबसे उपयोगी परीक्षणों तक सीमित रखते हैं, जैसा कि पहले बताया गया है), जबकि बाद वाला प्रतिगमन के खिलाफ एक संपत्ति है।
- बग को मूल कोड से लिंक करें. यदि लिंक आपकी प्रक्रिया में नहीं है, तो उन्हें कनेक्ट करने का एक तरीका खोजें: आपको यह दिखाना होगा कि बग कोई स्वचालित परीक्षण नहीं होने से आता है।
- उन कड़ियों की रिपोर्ट भी जमा करें.
प्रबंधक को वास्तव में प्रभावित करने के लिए, आप उन्हें भेज सकते हैंहर हफ्ते एक स्प्रेडशीट अप टू डेट (लेकिन पूरे इतिहास के साथ, न केवल सप्ताह के लिए)। स्प्रेडशीट ग्राफिक्स देता है जो तत्काल समझ देता है, और अविश्वासी प्रबंधक को कच्चे नंबरों तक पहुंचने देता है ...
जवाब के लिए 3 № 5
विकास के दौरान "लागत" का भुगतान किया जाता है, जब यह बहुत अधिक लागत प्रभावी होता है, और चल रहे रखरखाव के दौरान वापसी का एहसास होता है, जब बग को ठीक करना बहुत कठिन और महंगा होता है।
मैं आम तौर पर हमेशा उन तरीकों पर यूनिट परीक्षण करता हूं जो:
- डेटा स्टोर को पढ़ें/लिखें,
- व्यावसायिक तर्क निष्पादित करें, और
- मान्य इनपुट
फिर, अधिक जटिल विधियों के लिए, मैं उनका परीक्षण करूंगा। गेटटर/सेटर्स, या साधारण गणित सामग्री जैसी साधारण चीजों के लिए, मैं परीक्षण नहीं करता हूं।
रखरखाव के दौरान, अधिकांश वैध बग रिपोर्ट को एक इकाई परीक्षण मिलता है, यह सुनिश्चित करने के लिए कि विशिष्ट बग फिर से नहीं होगा।
जवाब के लिए 3 № 6
मैं हमेशा अतिवादी नहीं होने में विश्वास करता हूं। खासकर जब समय और ऊर्जा सीमित हो। आप बस यह सब परीक्षण नहीं कर सकते।
प्रत्येक विधियों/कार्यों को एक इकाई परीक्षण की आवश्यकता नहीं होती है।निम्नलिखित की आवश्यकता नहीं हो सकती है। (१) वह जो स्पष्ट रूप से जटिल नहीं है जैसे बस प्राप्त / सेट, छोटी स्थिति या लूप। (२) वह जिसे अन्य विधि द्वारा बुलाया जाएगा जिसमें इकाई परीक्षण होंगे।
इन दो मानदंडों के साथ, मुझे लगता है कि आप उनमें से बहुत कुछ काट सकते हैं।
सिर्फ एक विचार।
जवाब के लिए 2 № 7
आईएमओ, अगर किसी को देने के लिए पर्याप्त हैकोड को एक विचार इनहेरिट करता है ताकि वे बदलाव करना शुरू कर सकें, चाहे वह बग्स को ठीक करना हो या एन्हांसमेंट करना, इसे प्राप्त करने के लिए कोड को पढ़ने में दिन बिताने के बिना, यह मेरा सुझाव है।
इस प्रकार, सब कुछ मौत के लिए परीक्षण न करें, लेकिन कुछ सामान्य मामलों और कुछ किनारे के मामलों को केवल यह देखने के लिए कवर करें कि क्या होता है यदि चीजें शुरू में निर्धारित नहीं होती हैं।
जवाब के लिए 2 № 8
पर्याप्त परीक्षण करें ताकि आप सहज महसूस कर सकें किपरीक्षणों द्वारा एक खराब रिफ्लेक्टर पकड़ा जाएगा। आमतौर पर, यह तर्क, और प्लंबिंग/वायरिंग कोड का परीक्षण करने के लिए पर्याप्त है। यदि आपके पास कोड है जो अनिवार्य रूप से गेटर/सेटर्स है, तो उनका परीक्षण क्यों करें?
विक्रेता की राय के बारे में कि परीक्षण की आवश्यकता नहीं है - ठीक है, अगर वे इतना जानते हैं, तो वे खूनी कोडिंग क्यों नहीं करते?
उत्तर के लिए 1 № 9
स्वचालित इकाई परीक्षण तालिका में बहुत कुछ लाता है।हमने इसे कई प्रोजेक्ट्स पर इस्तेमाल किया है। अगर कोई बिल्ड को तोड़ता है, तो हर कोई तुरंत जानता है कि इसे किसने किया और वे इसे ठीक करते हैं। इसे विजुअल स्टूडियो के बाद के संस्करणों में भी बनाया गया है। इस पर गौर करें
परीक्षण संचालित विकास
इससे आपका बहुत समय बचेगा और यह अधिक मात्रा में उपरि का उत्पादन नहीं करेगा। आशा है कि यह मदद करेगा! यदि हां, तो इसे चिह्नित करें।
जवाब के लिए 0 № 10
इकाई परीक्षण के लिए, मेरी कंपनी ने काफी अच्छी रणनीति अपनाई है: हमारे पास एक स्तरीय अनुप्रयोग (डेटा स्तर, सेवा परत/व्यावसायिक वस्तुएं, प्रस्तुति परत) है।
हमारी सेवा परत डेटाबेस के साथ बातचीत करने का एकमात्र तरीका है (डेटा परत में विधियों के माध्यम से)।
हमारा लक्ष्य सेवा परत में प्रत्येक विधि के लिए कम से कम एक बुनियादी इकाई परीक्षण होना है।
यह हमारे लिए अच्छी तरह से काम करता है - हम हमेशा हर कोड पथ (विशेष रूप से जटिल तरीकों में) की पूरी तरह से जांच नहीं करते हैं, लेकिन प्रत्येक विधि में इसका सबसे आम कोड पथ सत्यापित होता है।
हमारी वस्तुएं इकाई परीक्षण नहीं हैं, सिवायसंयोग से सेवा परत परीक्षणों के माध्यम से। वे "गूंगा" ऑब्जेक्ट भी होते हैं - अधिकांश के पास आवश्यक तरीकों को छोड़कर कोई विधि नहीं होती है (जैसे बराबर() और GetHastCode())।
0 उत्तर के लिए № 11
डेवलपर परीक्षण का उद्देश्य गुणवत्ता के स्वीकार्य स्तर के पूर्ण सॉफ़्टवेयर के विकास को गति देना है।
जो दो चेतावनियों की ओर जाता है:
- इसे गलत करना पूरी तरह से संभव है, ताकि यह वास्तव में आपको धीमा कर दे। इसलिए यदि आप पाते हैं कि यह आपको धीमा कर देता है, तो इस बात की बहुत अधिक संभावना है कि आप इसे गलत कर रहे हैं।
- आपकी "स्वीकार्य गुणवत्ता" की परिभाषा मार्केटिंग से भिन्न हो सकती है। अंत में, वे सही हैं, या कम से कम अंतिम कहना है।
सॉफ्टवेयर जो काम करता है वह एक विशेष, आला हैबाजार, विशेषज्ञ महंगी सामग्री से बने उच्च अंत इंजीनियर हार्डवेयर के बराबर। यदि आप उस बाजार से बाहर हैं, तो ग्राहक आपके सॉफ़्टवेयर के मज़बूती से काम करने की अपेक्षा नहीं करेंगे, बल्कि यह अपेक्षा करेंगे कि उनकी शर्ट एक गोली को रोक देगी।
उत्तर के लिए 0 № 12
कितना यूनिट परीक्षण एक अच्छी बात है:
यूनिट परीक्षण स्थिर नहीं है कि एक बार जब आप कर लेते हैं और आपका काम पूरा हो जाता है, तो यह उत्पाद के पूरे जीवन तक चलता रहेगा आप अपने उत्पाद पर आगे के विकास को नहीं रोकते हैं
मूल रूप से यूनिट परीक्षण हर बार किया जाना चाहिए: 1) आप एक फिक्स करते हैं
2) नई रिलीज
3) या आपको कोई नया अंक मिल जाए
मैंने विकास अवधि का उल्लेख नहीं किया है, क्योंकि इस अवधि के दौरान आपकी इकाई स्तर की परीक्षा विकसित हुई है।
यहां मूल बात मात्रा (कितना) नहीं है बल्कि आपके यूनिट परीक्षण का कवरेज है
उदाहरण के लिए: आपके आवेदन के लिए आप किसी विशेष फ़ंक्शन X को किसी समस्या से प्यार करते हैं, आप a
एक्स के लिए फिक्स, यदि कोई अन्य मॉड्यूल छुआ नहीं है तो आप यूनिट परीक्षण कर सकते हैं
मॉड्यूल एक्स के लिए लागू, अब यह बिंदु है कि एक्स के लिए कितना यूनिट परीक्षण है
आवरण
तो आपका यूनिट टेस्ट जांचना चाहिए:
1) प्रत्येक इंटरफ़ेस
2) सभी इनपुट/आउट ऑपरेशन
3) तार्किक जांच
4) आवेदन विशिष्ट परिणाम
उत्तर के लिए 0 № 13
मैं किताब लेने का सुझाव दूंगा यूनिट परीक्षण की कला. अध्याय 8 में इकाई परीक्षण को एकीकृत करना शामिल हैआपकी संगठन। वहाँ एक महान तालिका (पृष्ठ २३२) है जो दो-टीम परीक्षण के परिणाम दिखाती है (एक परीक्षण का उपयोग कर रहा है, एक बिना); परीक्षण टीम ने अपने समग्र रिलीज समय (एकीकरण, परीक्षण और बग फिक्सिंग सहित) से दो दिन का समय निकाला। और उत्पादन में पाए गए 1/6 बग थे। अध्याय 9 विरासत कोड के साथ सबसे अधिक धमाकेदार प्राप्त करने के लिए परीक्षण व्यवहार्यता विश्लेषण पर चर्चा करता है।
उत्तर के लिए 0 № 14
हालांकि परीक्षण से अधिक संभव है (बिंदुकम रिटर्न) ऐसा करना मुश्किल है। परीक्षण (विशेष रूप से प्रक्रिया में जल्दी परीक्षण) समय बचाता है। किसी उत्पाद में दोष जितना अधिक समय तक रहता है, उसे ठीक करने में उतना ही अधिक खर्च होता है।
अक्सर प्रारंभिक परीक्षण का परीक्षण करें और यथासंभव पूरी तरह से परीक्षण करें!
उत्तर के लिए 0 № 15
जबकि इकाई परीक्षण उपयोगी है, आपको चाहिएनिश्चित रूप से प्रत्येक रिलीज के लिए एक सिस्टम परीक्षण योजना है - इसमें आपके आवेदन के सामान्य उपयोग-मामलों का परीक्षण (प्रतिगमन के लिए) और विशिष्ट सुविधा पर अधिक गहराई से काम करना शामिल होना चाहिए।
प्रतिगमन से बचने के लिए स्वचालित सिस्टम परीक्षण बहुत महत्वपूर्ण है - यूनिट परीक्षण सभी पास हो सकते हैं और आपका ऐप अभी भी गोबर का एक टुकड़ा होगा।
लेकिन अगर आप इसके लिए स्वचालित सिस्टम परीक्षण नहीं कर सकते हैंआपके सभी उपयोग-मामले (अधिकांश अनुप्रयोगों में जटिल उपयोग के मामले होते हैं, विशेष रूप से जहां तृतीय पक्ष सिस्टम और उपयोगकर्ता इंटरफ़ेस के साथ सहभागिता करते हैं), फिर आप मैन्युअल सिस्टम परीक्षण चला सकते हैं।
यूजर इंटरफेस मुख्य समस्याएं पैदा करते हैं - अधिकांशअन्य चीजों को अपेक्षाकृत आसानी से स्वचालित किया जा सकता है। यूज़र इंटरफेस को ऑटो-टेस्ट करने के लिए ढेर सारे टूल्स हैं, लेकिन वे कुख्यात हैं, यानी हर रिलीज में ऑटो-टेस्ट को सिर्फ पास करने के लिए ट्वीक करने की जरूरत है (कोई नई बग नहीं मानते हुए)।