डिबगिंग: कुछ निश्चित सुधारों पर विवरण को समझना क्यों? [बन्द है]


12

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


1
आप किसी को कैसे मनाएंगे कि आपको बग को ठीक करने के लिए किया गया था, अन्यथा।

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

जवाबों:


32

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

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

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

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


15

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

अगर आपको पूरा यकीन है कि आपने इसे ठीक कर लिया है, लेकिन यह नहीं पता कि क्यों फिक्स काम करता है, किसी से पूछें। अधिकांश इंजीनियरों मैं जानता हूँ कि प्यार इसके पीछे रहस्य की वजह से ऐसा सवाल मिलता है।


मैं मानता हूं कि आपको निश्चित रूप से इसे "निश्चित" के रूप में दावा नहीं करना चाहिए यदि आप निश्चित नहीं हैं कि इसे अभी स्थानांतरित या छुपाया नहीं गया है। फिर भी, यह स्वीकार करना बहुत भयानक नहीं होगा कि आपने "संबंधित कोड में एक समस्या क्षेत्र निर्धारित किया है" और अब "बग को पुन: पेश करने में असमर्थ हैं" - अतीत में मेरी टीमों ने इन्हें "सीएनआर बनाम v <संस्करण संख्या के रूप में लॉग किया है। > "
पीटरएल

6

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

मैं मज़बूत राय रखता हूं कि आपको कभी भी ऐसा कोड नहीं लिखना चाहिए जो आपको समझ में न आए कि यह क्या करता है या यह क्यों करता है। आप यह कैसे सुनिश्चित कर सकते हैं कि भले ही आपने उस बग को ठीक कर लिया हो, जिसे आपने ठीक किया है - आपने और कुछ नहीं तोड़ा है?

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

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

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


4

या डेवलपर्स के बीच कभी-कभी यह तय करने के बारे में विवरण जानने के बिना प्रोग्राम को काम करना आम है कि क्यों काम किया?

इसके साथ कम से कम तीन बड़ी समस्याएं हैं:

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

  2. आप यह नहीं जान सकते कि बग वास्तव में तय किया गया है या आपके परिवर्तन से नकाबपोश है जब तक कि आप यह नहीं समझते कि) क्या समस्या थी, और b) आपका परिवर्तन समस्या को हल कैसे करता है।

  3. बग शायद तय नहीं है , और यह निकट भविष्य में आपको फिर से काटने जा रहा है।


2

मुझे दो परिदृश्य दिखाई देते हैं: आपने कुछ और काम किया और बग होना बंद हो गया, जब तक कि कुछ और कुछ और नहीं टूट गया, तब तक आपको बहुत कुछ करने देना होगा - आपने वह किया जो आवश्यक / वांछित था और यह था एक अप्रत्याशित और अकथनीय सकारात्मक दुष्प्रभाव।

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

मैं वास्तव में दूसरे मामले की जाँच करने के लिए एक अच्छे कारण के बारे में नहीं सोच सकता - अगर यह एक महत्वपूर्ण बग है, तो इसे ठीक करने के लिए महत्वपूर्ण है। यदि यह एक गैर-महत्वपूर्ण बग है, तो कम से कम आप यह सुनिश्चित कर सकते हैं कि आप अपने "फिक्स" के साथ एक महत्वपूर्ण बग का परिचय नहीं दे रहे हैं।


0

या डेवलपर्स के बीच कभी-कभी यह तय करने के बारे में विवरण जानने के बिना प्रोग्राम को काम करना आम है कि क्यों काम किया?

मुझे लगता है कि इन दिनों यह बहुत आम है। ऐसा Google और Stackoverflow के कारण है। आपको अपने कोड के साथ समस्या है, बस इसे Google करें, समाधान ढूंढें, ठीक किया गया, अगली समस्या पर जाएं।

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