बहुत कम जानकारी के साथ डिबगिंग के लिए युक्तियाँ? [बन्द है]


11

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

इस सब से मैं ज्यादातर समय बिना किसी समस्या के निपट सकता हूं।

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

असल में, यह इसके लिए उबलता है:

  • बड़े और जटिल कोड आधार मैं 100% परिचित नहीं हूं
  • कई तरह से चीजें गलत हो सकती हैं
  • बग कैसे हुआ, इस बारे में बहुत कम जानकारी

क्या किसी के पास कोई सुझाव, ट्रिक्स, सुझाव आदि हैं, इस तरह की चीज़ को कैसे डीबग करें?


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

पूरक के रूप में, [रेमंड चेन के ब्लॉग पर "मानसिक डिबगिंग" पोस्ट पढ़ें] ( goo.gl/2KIH )!
जादूगर

कोड आधार कितना बड़ा है? दस KLOC या 50 MLOC?
बेसिल स्टारीनेवविच

जवाबों:


11

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

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

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


2
+1 ध्वनि सलाह, और मैं इसका विस्तार करूंगा: क्या वे बग को मज़बूती से प्राप्त करने के लिए प्राप्त कर सकते हैं, या यह आंतरायिक है? अगर यह मज़बूती से हो रहा है, तो क्या वे आपको वहाँ ले जाने के लिए उठाए गए कदमों से चल सकते हैं?
ब्लेयरहिपो

1
लॉग फ़ाइलों में देखने से थोड़ी मदद मिल सकती है।
pramodc84

11

एक अच्छी शुरुआत यह किताब हो सकती है ।

वैकल्पिक शब्द

मैं नीचे परिभाषा का उपयोग कर रहा हूं क्योंकि ऐसा लगता है कि डेवलपर अब इसे समर्थन करने के लिए चारों ओर नहीं है।

लिगेसी कोड एक स्रोत कोड है जो एक लंबे समय तक समर्थित नहीं है।


दुख की बात है, यह भी विरासत कोड नहीं है। मुझे पूरा यकीन है कि मैं जिस पर काम कर रहा हूं वह इस साल की शुरुआत में शुरू हुआ था।
तारका

3
@ क्लोकुन - पुस्तक में "लिगेसी कोड" की परिभाषा पूरी तरह से इसकी पारंपरिक परिभाषा के समान नहीं है। बहुत अच्छी किताब है।
ऑस्टिन सलोनन

4

मुझे कुछ साल पहले इसी तरह की समस्या हुई थी और उत्पादकता और कोड क्लीन-अप को सबसे बड़ा बढ़ावा सिस्टम में बग ट्रैकिंग को एकीकृत कर रहा था।

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

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


एक बड़े पूर्व-मौजूदा कोड आधार के लिए, अच्छी लॉगिंग को जोड़ना बहुत काम का HELL होने जा रहा है। +1 क्योंकि यह एकमात्र व्यवहार्य विकल्प साबित हो सकता है यदि बग्स रुक-रुक कर हो।
ब्लेयरहिपो

@BairairHippo: मेरे अनुभव से यह है, लेकिन वह कीमत है जो आप एक कोडबेस के साथ भुगतान करते हैं जिसका वह वर्णन कर रहा है। यह लगभग उतना ही दयनीय है जितना कि इस तरह के कोडबेस में काम करना ...
ऑस्टिन सलोनन

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

1

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

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


0

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

एक बार जब आपके पास काम करने वाले यूनिट परीक्षणों का एक सभ्य सेट होता है, तो आपके पास कोड क्लीनर बनाने के लिए कुछ रीफैक्टरिंग करने के लिए एक सुरक्षा जाल होता है।

कोड आधार को समझने तक इसे जारी रखें।

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

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