अपने स्वयं के कोड का परीक्षण करने के लिए कैसे बेहतर हो


45

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

मेरे संगठन में, हम न तो परीक्षण-संचालित विकास और न ही इकाई परीक्षण करते हैं। यह मुझे बहुत मदद करेगा लेकिन यह संभावना नहीं है कि यह बदल जाएगा।

आप लोगों को क्या लगता है कि मैं इसे दूर करने के लिए क्या कर सकता था? अपने स्वयं के कोड का परीक्षण करते समय आप किस दृष्टिकोण का उपयोग करते हैं?


28
सिर्फ इसलिए कि आपका संगठन TDD या यूनिट परीक्षण का उपयोग नहीं करता है, इसका मतलब यह नहीं है कि आप तब तक नहीं कर सकते, जब तक आप अपने समय सीमा को पूरा करते हैं और गुणवत्ता कोड का उत्पादन करते हैं।
थॉमस ओवेन्स

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

6
@ ब्रायन, मुझे लगता है कि आपको उन्हें इस बात की परवाह करना चाहिए कि क्या वर्तमान में अन्य उनका उपयोग करते हैं। शायद अच्छी प्रैक्टिस दिखाने से दूसरों को फॉलो करने को मिलेगा।
कैफीक

जवाबों:


20

कोडर का काम चीजों का निर्माण करना है।

परीक्षक का काम चीजों को तोड़ना है।

सबसे मुश्किल है आपके द्वारा बनाई गई चीजों को तोड़ना। आप इस मनोवैज्ञानिक बाधा को पार करके ही सफल होंगे।


27
-1 कोडर का काम उन चीजों का निर्माण करना है जो काम करती हैं । इसमें हमेशा कुछ मात्रा में परीक्षण शामिल होता है। मैं मानता हूं कि एक अलग परीक्षक भूमिका की आवश्यकता है, लेकिन यह रक्षा की एकमात्र रेखा नहीं है।
मैथ्यू रोडटस

8
@ मैथ्यू रोडेटस - कोडर साइड पर शामिल परीक्षण की मात्रा केवल यह सत्यापित करने के उद्देश्य से है कि वास्तव में क्या काम करना चाहिए। परीक्षक की ओर, उद्देश्य बग को खोजने के लिए है, यह देखने के लिए नहीं कि कोड काम करता है।
मौविइल

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

2
@ माउविसील - गलत द्विभाजन। एक कोडर का काम उन चीजों का निर्माण करना है जो काम करते हैं, और वह ऐसा करता है कि उसके कोड को काम करने के लिए माना जाता है। और यह सत्यापित किया जाता है, कम से कम, विनाशकारी परीक्षण + कुछ तदर्थ सीमा विश्लेषण (फिर से, कम से कम ।) बनाकर, विनिर्देशों के खिलाफ एक अच्छा कोडर काम करता है, और विनिर्देशों (जब मान्य) हमेशा परीक्षण योग्य होते हैं। तो एक अच्छा कोडर परीक्षण विकसित करता है जो इन आवश्यकताओं को सत्यापित करता है कोड में मिलते हैं (और आप आम तौर पर ऐसा करते हैं कि पुनः लिखकर। परीक्षण शुरू में विफल हो जाते हैं जब तक कि आपके पास कोड नहीं हैं जो परीक्षण पास करते हैं।)
luis.espinal

2
@ डेव लेस्ली - यह बिल्कुल मेरी बात है: आर्किटेक्ट अपने घर को खटखटाने के लिए सबसे अच्छा व्यक्ति नहीं है: वह इस बात पर बहुत गर्व करता है कि यह अपने दोषों को देखने में सक्षम होने के लिए कितना मजबूत है। केवल एक अन्य वास्तुकार (सड़क से बाहर का आदमी नहीं) घर पर एक वस्तुनिष्ठ आंख ला सकता है और यह पता लगाने के लिए कि घर कुछ विशिष्ट परिस्थितियों में टूट सकता है जिसकी कल्पना करने के लिए पूर्व वास्तुकार बहुत अंधा था।
मौविसील

14

फ्रांसिसो, मैं यहाँ कुछ धारणाएँ बनाने जा रहा हूँ, जो आपने कही हैं, उसके आधार पर:

"हम न तो टीडीडी और न ही यूनिट परीक्षण करते हैं। यह मुझे बहुत मदद करेगा लेकिन यह संभावना नहीं है कि यह बदल जाएगा।"

इससे मुझे संदेह है कि आपकी टीम परीक्षण पर बहुत अधिक मूल्य नहीं लगाती है या प्रबंधन मौजूदा कोड को आज़माने और तकनीकी ऋण को न्यूनतम रखने के लिए टीम के लिए बजट का समय नहीं देगा ।

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

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

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


11

यदि आप सी, ऑब्जेक्टिव-सी या सी ++ में कोड रखते हैं, तो आप अपने स्रोत की आलोचना करने के लिए क्लैंग स्टेटिक एनालाइजर का उपयोग कर सकते हैं ।

कुछ मेमोरी डिबगिंग टूल उपलब्ध हैं: ValGrind, Mac OS X पर गार्ड मलोक, * NIX पर इलेक्ट्रिक फेंस।

कुछ विकास वातावरण डिबगिंग मेमोरी एलोकेटर का उपयोग करने का विकल्प प्रदान करते हैं, जो सामान को नव आबंटित पृष्ठों और नए मुक्त पृष्ठों को कचरे से भर देता है, असंबद्ध बिंदुओं को मुक्त करने का पता लगाता है, और प्रत्येक ढेर ब्लॉक के पहले और बाद में कुछ डेटा लिखता है, डीबगर के साथ। कहा जाता है कि उस डेटा का ज्ञात पैटर्न कभी बदलता है।

Slashdot पर कुछ आदमी ने कहा कि वह एक डिबगर में स्रोत की एकल-नई कदम से बहुत अधिक मूल्य प्राप्त करता है। "यह बात है" उन्होंने कहा। मैं हमेशा उनकी सलाह का पालन नहीं करता, लेकिन जब मैंने किया है तो यह मेरे लिए बहुत मददगार रहा है। यहां तक ​​कि अगर आपके पास एक परीक्षण मामला नहीं है जो एक असामान्य कोड पथ को उत्तेजित करता है, तो आप इस तरह के पथ लेने के लिए अपने डिबगर में एक चर को घुमा सकते हैं, कुछ स्मृति आवंटित करके कह सकते हैं, फिर अपने नए सूचक को NULL के बजाय सेट करने के लिए डीबगर का उपयोग कर सकते हैं स्मृति पता, फिर आवंटन विफलता हैंडलर के माध्यम से कदम।

अभिकथन का प्रयोग करें - C, C ++ और Objective-C में अभिकारक () मैक्रो। यदि आपकी भाषा मुखर कार्य प्रदान नहीं करती है, तो अपने आप को लिखें।

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

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

इस प्रकार प्रत्येक सदस्य फ़ंक्शन प्रविष्टि और निकास पर इन्वर्टर की जांच कर सकता है, और क्लास चेकइनवेरेंट नामक फ़ंक्शन को परिभाषित कर सकता है जिसे कोई भी अन्य कोड किसी भी समय कॉल कर सकता है।

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

(किसी कारण से मैं कभी भी प्राइवेट नहीं था, जबकि बीओएस स्वैप फाइल के बिना चल सकता था, यह उस तरह से बहुत ही अकल्पनीय था। बीएफएस फाइलसिस्टम लिखने वाले डॉमिनिक गिआम्पोलो ने मुझसे आग्रह किया कि मैं कभी भी स्वैप के साथ बीओएस को न चलाऊं। देखें कि यह क्यों मायने रखता है, लेकिन यह किसी तरह का कार्यान्वयन कलाकृतियों रहा होगा।)

आपको I / O त्रुटियों के लिए अपने कोड की प्रतिक्रिया का भी परीक्षण करना चाहिए। अपनी सभी फ़ाइलों को एक नेटवर्क शेयर पर संग्रहीत करने का प्रयास करें, फिर अपने नेटवर्क केबल को डिस्कनेक्ट करें जबकि आपके ऐप में उच्च कार्यभार है। इसी तरह केबल को डिस्कनेक्ट करें - या अपने वायरलेस को बंद करें - यदि आप किसी नेटवर्क पर संचार कर रहे हैं।

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

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

डेटाबेस में हमेशा दोष-सहिष्णु डिस्क I / O होता है, लेकिन शायद ही किसी अन्य प्रकार का ऐप होता है। जबकि जर्नलेड फाइलसिस्टम बिजली की विफलता या क्रैश की स्थिति में फाइलसिस्टम भ्रष्टाचार को रोकते हैं, वे एंड-यूजर डेटा के भ्रष्टाचार या नुकसान को रोकने के लिए कुछ भी नहीं करते हैं। यह उपयोगकर्ता अनुप्रयोगों की जिम्मेदारी है, लेकिन शायद ही डेटाबेस के अलावा कोई अन्य गलती-सहिष्णुता को लागू करता है।


1
+1 बहुत सारी व्यावहारिक सलाह जिन्हें किसी और से समर्थन की आवश्यकता नहीं है। केवल एक चीज जो मैं जोड़ूंगा वह यह है कि दावे को दर्ज करने और उन स्थितियों की जांच करने के लिए है जो तब तक विफल नहीं हो सकते जब तक कि कोड में बग न हो । कभी भी ऐसी चीजों को
मुखर

10

जब मैं अपने कोड का परीक्षण करता हूं, तो मैं आमतौर पर विचार प्रक्रियाओं की एक श्रृंखला से गुजरता हूं:

  1. मैं इस "चीज़" को एक परीक्षण योग्य आकार के टुकड़ों में कैसे तोड़ूं? मैं सिर्फ वही परख सकता हूं जिसे मैं परखना चाहता हूं? मुझे कौन से स्टब्स / मोक्स बनाने चाहिए?
  2. प्रत्येक चंक के लिए: मैं यह सुनिश्चित करने के लिए इस चंक का परीक्षण कैसे करूं कि यह सही इनपुट के उचित सेट पर सही ढंग से प्रतिक्रिया करता है?
  3. प्रत्येक चंक के लिए: मैं कैसे परीक्षण कर सकता हूं कि गलत इनपुट्स के लिए सही ढंग से जवाब दिया गया है (NULL पॉइंटर्स, अमान्य मान)?
  4. मैं सीमाओं के लिए परीक्षण कैसे कर सकता हूं (उदाहरण के लिए मान जहां हस्ताक्षरित से अहस्ताक्षरित पर जाते हैं, 8 बिट से 16 बिट तक, आदि)।
  5. मेरे परीक्षण कोड को कितनी अच्छी तरह कवर करते हैं? क्या मेरी कोई शर्तें हैं? [यह कोड-कवरेज टूल के लिए एक शानदार जगह है।] यदि कोई ऐसा कोड है जो छूट गया था और जिसे कभी भी क्रियान्वित नहीं किया जा सकता है, तो क्या यह वास्तव में होना चाहिए? [यह एक अन्य पूर्ण प्रश्न है!]

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

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


5

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

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


1
साइक्लोमैटिक जटिलता के लिए +1। "मुझे सभी संभावित रास्तों का पालन करना वास्तव में कठिन लगता है, इसलिए मुझे कीड़े मिल सकते हैं" मेरे लिए तात्पर्य है कि ओपी के कोड को छोटे, कम जटिल विखंडू में तोड़ने की आवश्यकता हो सकती है।
टॉबी

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

3

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

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


3

यदि आपने जैसा कहा है कि आपको यूनिट परीक्षण की आवश्यकता नहीं है, तो मुझे अपने कोड को मैन्युअल रूप से तोड़ने की कोशिश करने से बेहतर कोई तरीका नहीं दिखता है।

अपने कोड को सीमाओं तक धकेलने का प्रयास करें । उदाहरण के लिए वैरिएबल को सीमा सीमा से अधिक फ़ंक्शन में पास करने का प्रयास करें। क्या आपके पास एक फ़ंक्शन है जो उपयोगकर्ता इनपुट को फ़िल्टर करने वाला है? वर्णों के विभिन्न संयोजनों को इनपुट करने का प्रयास करें।

पर विचार करें देखने के उपयोगकर्ता के बिंदु । उन उपयोगकर्ताओं में से एक बनने की कोशिश करें जो आपके एप्लिकेशन या फ़ंक्शंस की लाइब्रेरी का उपयोग करेंगे।


1
उपयोगकर्ता के दृष्टिकोण से चीजों को देखने के लिए +1।
मैथ्यू रोडैटस

3

लेकिन हमारे पास मेरे वर्तमान नियोक्ता के परीक्षक नहीं हैं और मेरे सहयोगियों को यह बहुत अच्छा लगता है

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

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

अपने सहयोगियों से बात करें और यह पता लगाने की कोशिश करें कि वे किस प्रकार की इकाई परीक्षण कर रहे हैं और इसका अनुकरण करें। बाद के समय में आप इकाई परीक्षण और टीडीडी विशेषताओं को बेहतर तरीके से प्रोटोटाइप कर सकते हैं और आसान अपनाने के लिए धीरे-धीरे इन अवधारणाओं को टीम में पेश कर सकते हैं।


2
  • अपना कोड लिखने से पहले अपने परीक्षण लिखें।
  • जब भी आप एक बग को ठीक करते हैं जो परीक्षण द्वारा पकड़ा नहीं गया था, तो उस बग को पकड़ने के लिए एक परीक्षण लिखें।

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


2

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

सीखने का सबसे अच्छा तरीका यह है कि आप इसे कैसे सीखते हैं और आप इससे क्या सीखते हैं।


2

ब्लैक बॉक्स परीक्षण! आपको परीक्षण के साथ अपनी कक्षाओं / विधियों का निर्माण करना चाहिए। आपके परीक्षण सॉफ्टवेयर के विनिर्देश पर आधारित होने चाहिए और आपके अनुक्रम आरेख (उपयोग मामलों के माध्यम से) पर स्पष्ट रूप से परिभाषित होने चाहिए।

अब चूंकि आप परीक्षण संचालित विकास नहीं करना चाहते ...

सभी आने वाले डेटा पर इनपुट सत्यापन डालें; किसी पर भरोसा मत करो। .Net फ्रेमवर्क में अमान्य तर्कों, अशक्त संदर्भों और अमान्य राज्यों के आधार पर बहुत सारे अपवाद हैं। आपको UI परत पर इनपुट सत्यापन का उपयोग करने के बारे में पहले से ही सोचना चाहिए ताकि यह मध्य-वेयर में समान चाल हो।

लेकिन आपको वास्तव में किसी प्रकार का स्वचालित परीक्षण करना चाहिए; वह सामान जीवन बचाता है।


2

मेरे अनुभव में

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

यूएमएल एक और समय नुक़सान है। एक ही व्हाइटबोर्ड + पेन ऐसा ही कर सकता है, सस्ता और जल्दी।

BTW, कोडिंग में अच्छा कैसे हो (और बग से बचें)?

  • a) परमाणु। एक फ़ंक्शन जो एक सरल (या कुछ एकल कार्य) करता है। क्योंकि यह समझना आसान है, इसे ट्रैक करना आसान है और इसे हल करना आसान है।

  • बी) होमोलॉजी। यदि, उदाहरण के लिए, आप किसी स्टोर प्रक्रिया का उपयोग करके डेटाबेस को कॉल करते हैं तो बाकी कोड के लिए करते हैं।

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

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

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

  • च) अपने कोड में टिप्पणी जोड़ें।

  • छ) बग के स्रोत के रूप में उपयोगकर्ता इनपुट। इसे पहचानो। उदाहरण के लिए, SQL इंजेक्शन उपयोगकर्ता इनपुट के कारण होता है।

  • ज) टीम के खराब तत्व को पहचानें और सौंपे गए कार्य को अलग करें। कुछ प्रोग्रामर कोड को पेंच करने के लिए प्रवण हैं।

  • i) अनावश्यक कोड से बचें। यदि, उदाहरण के लिए, वर्ग को इंटरफ़ेस की आवश्यकता है, तो इसका उपयोग करें, अन्यथा अप्रासंगिक कोड जोड़ने से बचें।

a) और b) कुंजी हैं। उदाहरण के लिए, मुझे एक सिस्टम की समस्या थी, जब मैंने एक बटन में क्लिक किया (सहेजें) तो यह फ़ॉर्म को सेव नहीं करता था। फिर मैंने एक चेकलिस्ट की:

  • बटन काम करता है? ... हाँ।
  • डेटाबेस स्टोर कुछ? नहीं, इसलिए त्रुटि एक मध्य चरण में थी।
  • फिर, डेटाबेस काम में स्टोर करने वाला वर्ग ?. नहीं <- ठीक है, मुझे त्रुटि मिली। (यह डेटाबेस की अनुमति से संबंधित था)। तब मैंने न केवल इस प्रक्रिया की बल्कि हर प्रक्रिया की जाँच की, जो कोड के समान (क्योंकि गृहविज्ञान) है। बग को ट्रैक करने में मुझे 5 मिनट लगे और इसे हल करने के लिए 1 मिनट (और कई कीड़े)।

और एक सनद

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


2

एक परीक्षक और एक प्रोग्रामर विभिन्न कोणों से समस्या का सामना करते हैं, लेकिन दोनों भूमिकाओं को पूरी तरह से कार्यक्षमता का परीक्षण करना चाहिए और बग्स को खोजना चाहिए। जहां भूमिकाएं भिन्न होती हैं, फोकस में होती हैं। एक शास्त्रीय परीक्षक केवल बाहरी (यानी ब्लैक बॉक्स) से आवेदन देखता है। वे ऐप की कार्यात्मक आवश्यकताओं के विशेषज्ञ हैं। एक प्रोग्रामर को कार्यात्मक आवश्यकताओं और कोड दोनों पर एक विशेषज्ञ होने की उम्मीद है (लेकिन कोड पर अधिक ध्यान देने की आवश्यकता है)।

(यह संगठन पर निर्भर करता है कि क्या प्रोग्रामर को स्पष्ट रूप से आवश्यकताओं पर एक विशेषज्ञ होने की उम्मीद है। भले ही, अंतर्निहित अपेक्षा वहाँ है - यदि आप कुछ गलत डिज़ाइन करते हैं, तो आप - आवश्यकताओं व्यक्ति नहीं - दोष प्राप्त करते हैं।)

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

  1. डिबगिंग ; कोड में ब्रेकपॉइंट सेट करें और एप्लिकेशन चलाएं। एक बार जब आप एक ब्रेकपॉइंट मारते हैं, तो लाइनों के माध्यम से कदम उठाएं जैसा कि आप अनुप्रयोग के साथ बातचीत करते हैं।
  2. स्वचालित परीक्षण ; कोड लिखें जो आपके कोड का परीक्षण करता है। यह केवल UI के नीचे के स्तरों में मदद करता है।
  3. अपने परीक्षकों को जानें ; वे आपके द्वारा किए गए आवेदन को बेहतर जान सकते हैं, इसलिए उनसे सीखें। उनसे पूछें कि आपके एप्लिकेशन की कमजोरियां क्या हैं, और बग्स को खोजने के लिए वे क्या रणनीति अपनाते हैं।
  4. अपने उपयोगकर्ताओं को जानें ; अपने उपयोगकर्ताओं के जूते में चलना सीखें। कार्यात्मक आवश्यकताएं आपके उपयोगकर्ताओं के फिंगरप्रिंट हैं। आपके उपयोगकर्ताओं को अक्सर उन चीज़ों के बारे में पता होता है जो कार्यात्मक आवश्यकताओं में स्पष्ट रूप से नहीं आती हैं। जैसा कि आप अपने उपयोगकर्ताओं को बेहतर समझते हैं - वास्तविक दुनिया में उनके काम की प्रकृति और आपके आवेदन को उनकी सहायता के लिए कैसे माना जाता है - आप बेहतर समझेंगे कि आवेदन क्या माना जाता है।

2

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

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

आंशिक रूप से मैं यहाँ अपने आप को उपदेश दे रहा हूँ, क्योंकि मैं इस सामान को जितना जानता हूँ उससे कम करना चाहिए।

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