बहुत अधिक समय डिबगिंग में खर्च करना


24

कल, मैंने एक वेब परियोजना के v1.0 रिलीज को चालू कर दिया था, जिस पर (चालू और बंद,) काम करने में लगभग 6 सप्ताह का समय लगा है। मैंने अपने समय का कोई सटीक रिकॉर्ड नहीं बनाया है, लेकिन अपने अनुभवों के अनुसार मैं अनुमान लगाऊंगा कि मैंने हर समय प्रोग्रामिंग में से जो भी खर्च किया था, उसका आधा हिस्सा डिबगिंग में खर्च किया गया था। मेरा अनुमान है कि एक अच्छा 15-20 घंटे के लिए डिबगिंग खर्च करना, जो मेरे लिए कीमती समय है जो बेहतर हो सकता था कि नए कोड लिखने या प्रोजेक्ट को पूरा करने से पहले खर्च किया जा सके। यह भी विशेष रूप से मदद नहीं करता है कि मैं कॉलेज में 5 सप्ताह में एक फ्रेशमैन बनूंगा।

बात यह है कि, मैं उस समय डिबगिंग में खर्च करने के लिए बुरा महसूस करता हूं। डिबगिंग में बिताए गए सभी समय मुझे यह एहसास कराते हैं कि मैंने अपनी परियोजना को विकसित करते समय कुछ बहुत ही मूर्खतापूर्ण गलतियां कीं, गलतियों को ठीक करने में मुझे बहुत समय लगा।

मैं इसे भविष्य में होने से कैसे रोक सकता हूं? मैं अपना 50% समय डिबगिंग में खर्च नहीं करना चाहता, मैं 10% डिबगिंग और बाकी नए कोड लिखना चाहूंगा। इस लक्ष्य तक पहुँचने में मेरी मदद करने के लिए कुछ तकनीकें क्या हो सकती हैं?


22
जब मैं एक फ्रेशमैन था, मैं भी एक धीमा कोडर था। बस इसे 20 साल दें।
जॉब

27
उह, हाँ, यह सौभाग्य है। "यदि डिबगिंग कीड़े को हटाने की प्रक्रिया है, तो प्रोग्रामिंग को उन्हें डालने की प्रक्रिया होनी चाहिए।" -आदर्श दिक्जस्त्र
मैट

7
क्या आपने उन गलतियों से कुछ सीखा? यदि आपने किया है, तो आप अगली बार उन्हें नहीं बनाएंगे और इससे आपका डिबगिंग समय कम हो जाएगा।
क्रेग टी

5
इसे "अनुभव" कहा जाता है और आपकी अगली परियोजना में आपकी सहायता करेगा ।

4
1940 के दशक के उत्तरार्ध की बात करते हुए, मौरिस विल्क्स ने लिखा: "जैसे ही हमने प्रोग्रामिंग शुरू की, हमने अपने आश्चर्य को पाया कि प्रोग्राम को सही तरीके से प्राप्त करना उतना आसान नहीं था जितना हमने सोचा था। डिबगिंग को खोजा जाना था। यह एक पर था। EDSAC कक्ष और छिद्रण उपकरणों के बीच मेरी यात्रा जो 'सीढ़ियों के कोण पर झिझक' थी, यह अहसास मुझे पूरी ताकत के साथ हुआ कि मेरे जीवन के शेष हिस्से का एक अच्छा हिस्सा अपने स्वयं के कार्यक्रमों में त्रुटियों को खोजने में खर्च होने वाला था।
ट्रेवर पॉवेल

जवाबों:


35

आप सॉफ्टवेयर इंजीनियरिंग के पवित्र कंघी बनानेवाले की रेती के लिए पूछ रहे हैं, और इस सवाल का जवाब अभी तक किसी के पास नहीं है।

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

पेशेवर बग ट्रैकिंग सिस्टम का उपयोग करते हैं ताकि वे (1) जान सकें कि क्या तय करना है, लेकिन यह भी (2) विश्लेषण करें कि वास्तव में क्या तय किया जाना था। आपको इतना औपचारिक होने की आवश्यकता नहीं है - बस एक नोटबुक में एक मिलान रखना आपके लिए ठीक हो सकता है।

डिजाइन चरण दोष

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

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

कोडिंग त्रुटियां

यदि आपका डिज़ाइन ठोस है, लेकिन आप लगातार उस भाषा से लड़ रहे हैं जिसके साथ आप कोडिंग कर रहे हैं, तो अपने आप को कुछ उपकरण प्राप्त करें जो आपके लिए आपके कोड का विश्लेषण करेंगे और आपको जल्दी और अक्सर चेतावनी देंगे कि आप गलतियाँ कर रहे हैं।

यदि आप C में प्रोग्रामिंग कर रहे हैं, तो सभी संकलक चेतावनियों को चालू करें lint, जैसे अर्थ-चेकर का उपयोग करें, और valgrindसामान्य डायनेमिक-मेमोरी से संबंधित समस्याओं को पकड़ने के लिए जैसे टूल का उपयोग करें ।

यदि आप पर्ल प्रोग्रामिंग कर रहे हैं, तो चालू करें strictऔर warningsयह कहते हैं कि यह क्या कहता है।

कोई फर्क नहीं पड़ता कि आप किस भाषा का उपयोग कर रहे हैं, संभवतः डिबगिंग चरण तक पहुँचने से पहले सामान्य गलतियों को पकड़ने में मदद करने के लिए कई उपकरण मौजूद हैं।

एकीकरण चरण दोष

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

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

और इसी तरह...

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

लगभग जो कुछ भी उबलता है वह यह है कि थोड़ा समय और काम के बाद विकास / रिलीज की प्रक्रिया में बाद में भारी लाभांश का भुगतान होता है।

यह तथ्य कि आपने अपने करियर में इतनी जल्दी इन मुद्दों पर गौर किया है, आपके भविष्य के लिए अच्छा है, और मैं आपको शुभकामनाएं देता हूं।


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

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

37

यूनिट टेस्ट लिखें

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

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

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


यूनिट परीक्षणों के लिए +1 - विकास प्रक्रिया में पहले जो बग्स को सस्ता और आसानी से पकड़ा जाता है उन्हें ठीक करना है।
पॉल आर।

26

डिबगिंग के लिए 50% (एक व्यापक अर्थ में) यह सब बुरा नहीं है। आमतौर पर लोग वास्तविक कोड लिखने की तुलना में बहुत अधिक समय डिजाइन करने, परीक्षण करने, बग को ठीक करने, फिर से तैयार करने और इकाई परीक्षण लिखने में खर्च करते हैं। यह नौकरी का हिस्सा है।

और ईमानदार होने के लिए, यह रखरखाव प्रोग्रामिंग में बहुत खराब है - काफी बार, मैं एक घंटे लगाता हूं कि वास्तव में क्या गलत होता है, फिर इसे ठीक करने के लिए कोड लिखने में पांच मिनट लगते हैं और फिर आधे घंटे में पूरी बात का परीक्षण किया जाता है। यह सिर्फ 5% कोडिंग बनाम लगभग 95% गैर-कोडिंग है।

हालांकि डिबगिंग के समय को कम करने के लिए आप कुछ चीजें कर सकते हैं:

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

1
साथ ही दुनिया समस्याओं के मामले में आपकी अपेक्षा से अलग व्यवहार कर सकती है। इससे बहुत सूक्ष्म कीड़े हो सकते हैं।

2
+1। मैं कहूंगा कि डिबगिंग प्रयासों पर केवल 50% खर्च करना काफी कम है, विशेष रूप से, लेकिन न केवल एक स्थापित कोडबेस में। अगर मुझे एक बग सौंपा जाता है, जब तक कि उसे कोड के प्रासंगिक भागों की पूर्ण रूप से पूरी तरह से फिर से लिखने की आवश्यकता न हो (संभावना नहीं) मैं कुल समय के उस अंश की तुलना में बहुत बड़ा खर्च कर सकता हूं, जो कि गलत हो रहा है। खुद को ठीक करना अक्सर जल्दी होता है, अक्सर बदले हुए कोड की केवल एक या कुछ पंक्तियों की राशि होती है।
एक CVn

@ ThorbjørnRavnAndersen नर्क हाँ, विशेष रूप से ओपी उल्लेख जैसी वेब परियोजनाओं के साथ। हम काम पर इस सप्ताह चरित्र encodings के साथ एक महान समय आ रहा है ...
Izkata

5

अधिक योजना

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

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


1
+1 क्योंकि यह वही है जो मैं अपने डिबगिंग समय को कम करने के लिए करता हूं। जब मैं एक नई परियोजना शुरू करता हूं, तो मैं वह सब कुछ लिखता हूं जो मैं टिप्पणियों में करने जा रहा हूं, फिर वापस जाऊंगा और टिप्पणियों को कोड के साथ बदल
दूंगा

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

5

अधिक सावधानी से काम करें

यह "बराबर दो बार कटने के उपाय" के बराबर सॉफ्टवेयर है:

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

यह सब कहा, कुछ भी नहीं पूरी तरह से दोषों को खत्म करने जा रहा है। आपको इसे जीवन के एक तथ्य के रूप में स्वीकार करने की आवश्यकता है। दोषों के लिए इस तथ्य योजना को देखते हुए, जैसे इकाई परीक्षण। इसका मतलब यह नहीं है कि "हमेशा के लिए ले" (उर्फ विश्लेषण-पक्षाघात)। यह संतुलन खोजने के बारे में है।


4

अन्य उत्तर पहले से ही कवर कर चुके हैं जो मैं कहना चाहता हूं, लेकिन मैं अब भी आपको (क्रूरतापूर्ण) राय देना चाहता हूं:

मूल रूप से, गैर-तुच्छ सॉफ्टवेयर कार्य के लिए, अपने समय के अधिकांश समय को रखरखाव और डिबगिंग पर खर्च करने की अपेक्षा करते हैं। यदि आप एक परिपक्व, प्रोडक्शन सॉफ्टवेयर सिस्टम पर काम कर रहे हैं, और आप मेंटेनेंस और डीबगिंग पर अपना 80-90% से कम समय बिता रहे हैं, तो आप अच्छा कर रहे हैं!

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

TL; DR: यह सिर्फ मुझे लगता है जैसे आपके पास गैर-तुच्छ सॉफ्टवेयर सिस्टम प्रोग्रामिंग के बारे में थोड़ा सा अवास्तविक चित्र हो सकता है। प्रयास का विशाल बहुमत परिशोधन, रखरखाव, रीफैक्टरिंग, फिक्सिंग बग्स, और सामान्य रूप से सामान बनाने में है जो "डिबगिंग" (रखरखाव) के तहत आएगा - कम से कम एक बहुत ही सामान्य अर्थ में - पूरी तरह से नए काम करने के विपरीत, नया नया कोड लिखना।


2

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

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


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

2

CONTINUOUS एकीकरण (CI) उत्तर है।

निरंतर एकीकरण = विन्यास प्रबंधन प्रणाली (अर्थात, Git, Mercurial, SVN, आदि) + CI टूल + यूनिट टेस्ट + स्मोक टेस्ट

वह सूत्र आपको निरंतर एकीकरण (CI) पर अधिक पढ़ने के लिए प्रेरित करेगा। इस क्षेत्र में कुछ संसाधन नीचे दिए गए हैं:


1

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

जैसा कि मैंने अपने नियोक्ताओं को समझाने की कोशिश की, कोड रखरखाव और तकनीकी सहायता को कम करने का सबसे अच्छा तरीका यह है कि आप अपने कोड को अग्रिम रूप से योजना बनाने के लिए समय व्यतीत करें।


1

टेस्ट संचालित विकास डिबगिंग समय को कम करने में मदद कर सकता है:

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

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


1

डीबग प्रोग्रामिंग में अपरिहार्य है, लेकिन यहाँ कुंजी है, क्या आपका कोड डीबग करना आसान है या नहीं? यदि आपको कुछ सरल डिबग करने के लिए बस घंटे खर्च करने की आवश्यकता है, तो आपके कोड आर्किटेक्चर के साथ वास्तव में कुछ गलत होना चाहिए।

आपको साफ कोड लिखने की आदत डालनी चाहिए, और बुरी आदतों को दूर करना चाहिए जैसे कॉपी पेस्ट कोड लिखना और लंबे तरीके लिखना आदि।

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


1

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

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

आखिरी बिंदु जो मैं बनाऊंगा वह है अनुभव। इसे पाने का कोई आसान तरीका नहीं है, बस आपको समय लगाना होगा। जैसा कि आप अनुभव प्राप्त करते हैं कि आप डिबगिंग में कम समय व्यतीत करेंगे क्योंकि आप शुरू करने के लिए बेहतर कोड लिखेंगे, समस्याओं को पहले नोटिस करेंगे, और एक समस्या का स्रोत क्या हो सकता है के लिए एक बेहतर अंतर्ज्ञान विकसित करेंगे। इसे बनाए रखें और आप इसे अपने करियर में लगातार आगे बढ़ाएंगे।


0

ऊपर महान जवाब, लेकिन कोई भी सीधे उल्लेख नहीं किया गया है (हालांकि इस पर सबसे अधिक संकेत दिया गया है):

READ READ READ READ एट एट नौजवान ...

जितना अधिक आप जानते हैं, उतना कम आप नहीं जानते हैं। थोड़ा क्लिच, लेकिन फिर भी मूल सत्य।

एक बार जब आप ऊपर दिए गए सुझावों का पालन करते हैं और विश्लेषणात्मक रूप से बग का दस्तावेजीकरण करते हैं, तो उन्हें वर्गीकृत करने का प्रयास करें, और फिर प्रासंगिक साहित्य पढ़ें।

क्या यह एक डिजाइन निर्णय मुद्दा था? डिज़ाइन पैटर्न पर पढ़ें।

क्या यह रूपरेखा या भाषा के ज्ञान की कमी थी? उस पर हड्डी!

आदि

दो चीजें हैं (लाइव) डेवलपर कभी नहीं बच सकता है: परिवर्तन (आईटी में एकमात्र स्थिर) और आरटीएफएमिंग ...


0

इकाई परीक्षण और जोर

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

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


0

जब आप एक परियोजना शुरू करते हैं, तो आप कितने वैकल्पिक तरीकों की पहचान करते हैं?

क्या आपके पास प्रत्येक के लिए पेशेवरों और विपक्षों के साथ दो से चार अलग-अलग दृष्टिकोण हैं? क्या तब आप उनमें से एक उचित चयन करते हैं?

फिर, सबसे महत्वपूर्ण, क्या आप सादगी को अत्यधिक महत्वपूर्ण मानते हैं?

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

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


0

हर बार जब आप बग ठीक करते हैं, तो आप फिर से वही गलती करने से बचना चाहते हैं। ऐसा करने के लिए, आप निम्न कार्य कर सकते हैं:

  • इसे एक दोषपूर्ण रिकॉर्डिंग लॉग में लिखें , जिसमें शामिल हैं:

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

  • अपनी कोड समीक्षा प्रक्रिया में सुरक्षित कोडिंग नियमों को एकीकृत करें

  • नियंत्रण प्रवाह और डेटा की कल्पना करें

संदर्भ

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