सबसे प्रभावी रूप से डिबग कोड कैसे? [बन्द है]


33

कोड में रेंगने वाले कीड़े को कम किया जा सकता है, लेकिन पूरी तरह से समाप्त नहीं किया जाता है क्योंकि यह लिखा जाता है - प्रोग्रामर हैं, हालांकि कई असहमत होंगे , केवल मनुष्य।

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

यहाँ ध्यान दें कि हम कीड़े को रोकने के बारे में बात नहीं कर रहे हैं ; हम बात कर रहे हैं कि जब बग दिखाई देते हैं तो क्या करना है । यह एक विस्तृत क्षेत्र है, मुझे पता है, और भाषा, मंच और उपकरणों पर अत्यधिक निर्भर हो सकता है। यदि हां, तो मानसिकता और सामान्य तरीकों जैसे उत्तरों को शामिल करना जारी रखें।


लिंक किए गए प्रश्न को हटा दिया गया है।

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

मुझे लगता है कि छापे। ऑफ-द-शेल्फ, बग हत्या स्प्रे। क्या यह एक दार्शनिक प्रश्न है? पुस्तकें केवल
पूर्व

जवाबों:


38

डिबगिंग करने की मानसिकता और दृष्टिकोण शायद सबसे महत्वपूर्ण हिस्सा है, क्योंकि यह निर्धारित करता है कि आप त्रुटि को कितना प्रभावी ढंग से ठीक करेंगे, और आप इससे क्या सीखेंगे - यदि कुछ भी।

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

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

एक आखिरी नोट - मैं "त्रुटियों" को कॉल करना पसंद करता हूं और "बग" नहीं - दिज्क्स्ट्रा ने अपने सहयोगियों को बाद के शब्द का उपयोग करने के लिए धोखा दिया क्योंकि यह बेईमान है, इस विचार का समर्थन करते हुए कि हमारे कार्यक्रम में खस्ताहाल और चंचल बग-परियों ने कीड़े लगाए। टी देखने के बजाय, वहाँ होने के कारण हमारी अपनी (मैला) सोच: http://www.cs.utexas.edu/users/EWD/transaches/EWD10xx/EWD1036.html

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


7
असल में मैं जैसे शब्द "त्रुटि" के बजाय "बग", नहीं उस पर "प्रोग्रामर जो भूल हो गई है", लेकिन क्योंकि यह बनाता है यह स्पष्ट है कि यह हो सकता है दोष डालता है क्योंकि नहीं गलती प्रोग्रामर किया गया है। मेरे लिए, "बग" कोड में त्रुटि का अर्थ है; जबकि "त्रुटि" का तात्पर्य कहीं न कहीं त्रुटि है । शायद कोड में, शायद पर्यावरण सेटअप में, शायद आवश्यकताओं में। मुझे पागल कर देता है जब मेरे मालिक के पास "बग सूची" होती है, जहां आधे मुद्दे आवश्यकता परिवर्तन होते हैं। इसे एक कार्य सूची, फ़र्चेरीसेक कहते हैं!
कार्सन 63000 ऑक्ट

2
+1 के लिए "हर त्रुटि सीखने का अवसर है, लगभग हमेशा अपने बारे में (क्योंकि केवल शुरुआती कंपाइलर / कंप्यूटर को दोष देते हैं")
एमडी महबूबुर्रहमान

आप "बग" शब्द के इतिहास से अवगत हैं, है ना? मेरा मतलब है, जैसा कि सॉफ्टवेयर विकास में उपयोग किया जाता है। बेशक, आज हमें यह समस्या नहीं है, लेकिन एक बग वास्तव में प्रोग्रामर द्वारा किसी कंप्यूटर के हार्डवेयर में उड़ान नहीं भरता है और एक समस्या का कारण बनता है। ऐसा नहीं है कि कोई मुझे ठीक करने के लिए सोचता है, मुझे पता है कि एडिसन ने इस शब्द का इस्तेमाल मॉथ घटना से बहुत पहले किया था, इसीलिए मैंने 'इतिहास' शब्द का इस्तेमाल किया था, 'मूल' नहीं। देखें computerworld.com/article/2515435/app-development/... और en.wikipedia.org/wiki/Software_bug#Etymology
Threed

@ निश्चित रूप से। लेकिन काफी समय से, कीड़ों ने अधिकांश सॉफ्टवेयर त्रुटियों का कारण नहीं बनाया है।
सीमित

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

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

  3. किसी के बारे में अपनी समस्या के बारे में बात करें, भले ही वह सिर्फ रबर की डिक्की हो । अपने आप को उस समस्या को व्यक्त करने के लिए मजबूर करना जो आप शब्दों में काम कर रहे हैं वास्तव में चमत्कार करता है।

  4. अपने आप को एक समय सीमा दें। यदि उदाहरण के लिए 45 मिनट के बाद आपको लगता है कि आप कहीं नहीं जा रहे हैं, तो बस कुछ समय के लिए अन्य कार्यों पर स्विच करें। जब आप अपने बग पर वापस जाते हैं, तो आप उम्मीद कर सकते हैं कि आप अन्य संभावित समाधान देख पाएंगे जो आपने पहले नहीं सोचा होगा।


2
+1 के लिए "अपने आप को उस समस्या को व्यक्त करने के लिए मजबूर करना जो आप शब्दों में काम कर रहे हैं वास्तव में चमत्कार करता है।"
एमडी महबूबुर्रहमान

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

3

मुझे लगता है कि बग का प्रजनन भी महत्वपूर्ण है। बग को पुन: उत्पन्न करने वाले सभी मामलों को सूचीबद्ध किया जा सकता है और फिर आप यह सुनिश्चित कर सकते हैं कि आपका बग फिक्स उन सभी मामलों को कवर करता है।


3

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

(1) एक प्रोग्रामर कोड में एक दोष बनाता है। (२) दोष संक्रमण का कारण बनता है (३) संक्रमण फैलता है (४) संक्रमण विफलता का कारण बनता है।

यदि आप अपने डिबगिंग कौशल में सुधार करना चाहते हैं, तो मैं इस पुस्तक की अत्यधिक अनुशंसा करता हूं।

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

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

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


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

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

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

3

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

  1. यह समझें कि समस्या की धारणा क्या है: एक ग्राहक के 'बॉब अभी भी सिस्टम में नहीं है' से 'जब मैं बॉब के लिए उपयोगकर्ता रिकॉर्ड बनाने की कोशिश करता हूं, तो यह डुप्लिकेट कुंजी अपवाद के साथ विफल होता है, हालांकि बॉब पहले से ही नहीं है वहाँ पर'
  2. अगर यह वास्तव में एक समस्या है या गलतफहमी है (वास्तव में, बॉब वहां नहीं है, तो बॉब नाम नहीं है, और सम्मिलित काम नहीं करेगा)।
  3. कम से कम विश्वसनीय कदम उठाने की कोशिश करें ताकि आप समस्या का पुनरुत्पादन कर सकें - 'उपयोगकर्ता रिकॉर्ड' ब्रूस 'के साथ एक सिस्टम दिया गया, जब कोई उपयोगकर्ता रिकॉर्ड' बॉब 'डाला जाता है, तो एक अपवाद होता है'
  4. यह आपका परीक्षण है - यदि संभव हो, तो इसे एक स्वचालित परीक्षण हार्नेस में रखें जिसे आप बार-बार चला सकते हैं, यह डीबगिंग के लिए अमूल्य होगा। आप यह सुनिश्चित करने के लिए अपने परीक्षण सूट का हिस्सा भी बना सकते हैं कि उस विशेष समस्या पर बाद में फिर से प्रकट न हों।
  5. अपने डिबगर को बाहर निकालें और ब्रेकपॉइंट्स डालना शुरू करें - जब आप अपना परीक्षण चलाते हैं, तो कोड पथ का पता लगाएं, और पहचानें कि क्या गलत है। जब आप ऐसा करते हैं, तो आप अपने परीक्षण को यथासंभव संकीर्ण बनाकर परिष्कृत कर सकते हैं - आदर्श रूप से एक इकाई परीक्षण।
  6. इसे ठीक करें - अपने टेस्ट पास को सत्यापित करें।
  7. ग्राहक द्वारा बताई गई मूल समस्या को भी निर्धारित करें (बहुत महत्वपूर्ण - आपने समस्या का सबसेट तय कर दिया होगा)। सत्यापित करें कि आपने कार्यक्रम के अन्य पहलुओं में प्रतिगमन का परिचय नहीं दिया है।

यदि आप कोड से बहुत परिचित हैं, या यदि समस्या या समस्या स्पष्ट है, तो आप उन कुछ चरणों को छोड़ सकते हैं।

हमें अपने मूल्यवान समय का सबसे प्रभावी उपयोग करने के लिए कैसे संपर्क करना चाहिए और हमें इसे खोजने के लिए कम समय और अधिक समय कोडिंग करने में सक्षम करना चाहिए?

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


यह सबसे अच्छा जवाब है IMO
marcusshep

3

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

  1. निर्धारित करें कि क्या वास्तव में एक बग है। एक बग हमेशा के लिए सिस्टम व्यवहार और आवश्यकताओं के बीच अंतर है; परीक्षक को अपेक्षित और वास्तविक व्यवहार को स्पष्ट करने में सक्षम होना चाहिए। यदि वह अपेक्षित व्यवहार के लिए सहायता प्रदान करने में असमर्थ है, तो कोई आवश्यकता नहीं है और कोई बग नहीं है - बस किसी की राय। इसे वापस भेजो।

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

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

  4. यदि आपने इसे दो प्रणालियों में संकुचित कर दिया है जो सहयोग करते हैं, तो ट्रैफिक मॉनिटर या लॉग फ़ाइलों के माध्यम से दो प्रणालियों के बीच संदेशों का निरीक्षण करें और निर्धारित करें कि कौन सी प्रणाली कल्पना कर रही है और कौन सी नहीं है। यदि परिदृश्य में दो से अधिक प्रणालियाँ हैं, तो आप युग्मित जाँच कर सकते हैं और अनुप्रयोग स्टैक के "डाउन" तरीके से काम कर सकते हैं।

  5. समस्या को अलग-थलग करने का कारण यह है कि समस्या कोड में एक दोष के कारण नहीं हो सकती है जिसका आपके पास नियंत्रण है (उदाहरण के लिए थर्ड पार्टी सिस्टम या पर्यावरण) और आप उस पार्टी को जल्द से जल्द संभालना चाहते हैं। । यह आपको काम को बचाने और तुरंत बिंदु पर लाने के लिए दोनों है ताकि संकल्प को यथासंभव कम समय सीमा में प्राप्त किया जा सके। आप केवल दस दिनों के लिए किसी समस्या पर काम नहीं करना चाहते हैं क्योंकि यह वास्तव में किसी और की वेब सेवा के साथ समस्या है।

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

  7. यदि आप इसे स्रोत नियंत्रण से समझ नहीं सकते हैं, तो अब अपने डिबगर को संलग्न करने और इसे पता लगाने के लिए कोड के माध्यम से कदम उठाने का समय है। संभावना अब आप समस्या का एक अच्छा विचार है वैसे भी कर रहे हैं।

एक बार जब आप जानते हैं कि बग कहां है और इसे ठीक करने के बारे में सोच सकते हैं, तो इसे ठीक करने के लिए एक अच्छी प्रक्रिया है:

  1. एक इकाई परीक्षण लिखें जो समस्या को पुन: पेश करता है और विफल रहता है।

  2. यूनिट टेस्ट को संशोधित किए बिना, इसे पास करें (एप्लिकेशन कोड को संशोधित करके)।

  3. प्रतिगमन को रोकने / पता लगाने के लिए अपने परीक्षण सूट में इकाई परीक्षण रखें।


1

यहां बताया गया है कि मैं इसे कैसे करता हूं:

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

1

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

यह मानते हुए कि आप उत्पादन के माहौल में हैं, यहाँ आपको यह करने की आवश्यकता है:

  1. "त्रुटि" को सही ढंग से बताएं, और उन घटनाओं की पहचान करें जो इसके होने का कारण बनती हैं।

  2. निर्धारित करें कि "त्रुटि" कोड त्रुटि या विनिर्देश त्रुटि है। उदाहरण के लिए, 1 अक्षर नाम दर्ज करना कुछ प्रणालियों के लिए एक त्रुटि माना जा सकता है लेकिन अन्य प्रणालियों के लिए स्वीकार्य व्यवहार। कभी-कभी एक उपयोगकर्ता एक त्रुटि की रिपोर्ट करेगा कि वह / वह सोचता है कि एक समस्या है लेकिन सिस्टम के व्यवहार के लिए उपयोगकर्ता की अपेक्षाएं आवश्यकताओं का हिस्सा नहीं थीं।

  3. यदि आपने साबित कर दिया है कि कोड में कोई त्रुटि है और त्रुटि कोड के कारण है, तो आप यह निर्धारित कर सकते हैं कि त्रुटि को रोकने के लिए किस कोड के टुकड़े को ठीक करने की आवश्यकता है। वर्तमान डेटा और भविष्य के सिस्टम संचालन (कोड और डेटा पर प्रभाव विश्लेषण) पर व्यवहार के प्रभाव की भी जांच करें।

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

  5. उन कारणों का विश्लेषण करें जिनके कारण यह बग सामने आया (आवश्यकताएं, कोडिंग, परीक्षण, आदि)। उन प्रक्रियाओं को लागू करें जो स्थिति को फिर से होने से रोकें।

  6. प्रकरण को पर्याप्त रूप से प्रलेखित करें।

  7. फ़िक्सेस रिलीज़ करें (या नया संस्करण)

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