"मंडेलबग" के अस्तित्व के लिए टीम के सदस्यों को कैसे मनाया जाए


20

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

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

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

कोई सुझाव?


12
मैं कहूंगा कि यह बहुत आसान है। एक इकाई परीक्षण बनाएं जो साबित करता है कि आप जो कह रहे हैं वह सच है।
चार्ल्स स्प्रबेरी

1
क्या आपने स्टैकट्रेस को किसी रूप में बचाया है? क्या आपके पास दुर्घटना के ढेर को दिखाने के लिए आपकी आईडीई का स्क्रीनशॉट है?
जियोर्जियो

7
@ फेथु: आप थोड़े बहुत आश्वस्त हैं कि इस तरह के बग को पुन: प्रस्तुत करना असंभव है - यह कठिन हो सकता है, लेकिन शायद ही कभी "असंभव" हो। और आप कैसे जान सकते हैं कि बग को "ठीक करना आसान है" जब आपके पास स्रोत कोड तक पहुंच नहीं है? बस एक अपवाद को पकड़ने से वास्तव में समस्या ठीक नहीं हो सकती है। या क्या आप उस पुस्तकालय कोड के बारे में बात कर रहे हैं जिस तक आपकी पहुंच है, और आपने पहले ही सटीक लाइन को इंगित कर दिया है जहां बग होता है? यदि हां, तो आप कोड में सुधार का सुझाव क्यों नहीं देते?
डॉक ब्राउन

2
@fithu: आपका मूल शीर्षक आपके बॉस के खिलाफ किसी प्रकार का शेख़ी था। मैंने इसे आशा में बदल दिया यह आपके प्रश्न के जल्द ही समापन को रोकता है, इस साइट पर रेंट बहुत लोकप्रिय नहीं हैं। यदि नया शीर्षक आपके प्रश्न को सही ढंग से प्रतिबिंबित नहीं करता है, तो इसे और बेहतर बनाने के लिए स्वतंत्र महसूस करें।
डॉक्टर ब्राउन

4
@ जियोर्जियो: एक स्टैक ट्रेस एक प्रमाण है कि एक कार्यक्रम एक विशिष्ट रेखा पर दुर्घटनाग्रस्त हो सकता है, यह इस बात का सबूत नहीं है कि यह रेखा बग का मूल कारण है। ऐसा लगता है कि इस तथ्य से ओपी को गलतफहमी हुई है, और यही कारण है कि मुझे कुछ प्रश्न विवरणों को समझने में समस्या थी।
डॉक ब्राउन

जवाबों:


35

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

मेरी सलाह यह नहीं है कि यह बहुत अधिक पसीना आए। अपना काम जारी रखें। जब भी आप इस दुर्घटना में आते हैं, तो स्टैक ट्रेस के साथ अपनी बग रिपोर्ट को अपडेट करें , यह कहते हुए कि यह पुनरावृत्ति है , और मालिक को लाइब्रेरी डेवलपर में बदल रहा है। प्रबंधन / नेतृत्व को यह तय करने दें कि यह आवृत्ति के आधार पर ठीक करना है या नहीं।

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


10

इसलिए, आपकी कम या ज्यादा स्पष्ट टिप्पणियों से, मुझे यह इस तरह मिला:

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

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

जब पहले से ही काम हो तो ज्यादातर लोगों को समझाना आसान होता है। इसके अलावा, वे "यहां एक बेहतर समाधान है" पर बेहतर प्रतिक्रिया देते हैं, "यह कोड गलत है, इसे किसी तरह ठीक करें" के विपरीत।

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


उन्होंने कहा कि इस परिवर्तन मर्ज करने के लिए मना कर दिया, क्योंकि "यह आवश्यक नहीं है"
fithu

@fithu: मेरा संपादन देखें।
डॉक ब्राउन

4
@DocBrown +1 के लिए वे (लोग) "यहां एक बेहतर समाधान है" पर बेहतर प्रतिक्रिया देते हैं, "यह कोड गलत है, इसे किसी तरह ठीक करें" के विपरीत।
laika

2
@ फेथु: तो एक परीक्षण मामले के साथ आते हैं जो फेंके जाने वाले अखंड अपवाद को ट्रिगर करता है। यानी इसे ट्रिगर करने वाले पैरामाटर्स का पता लगाते हैं।
प्रातः

2

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

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


3
"बस पुन: परीक्षण करें, उसी मापदंडों का उपयोग करके, इसे पुन: पेश करने के लिए" - थ्रेडिंग / नेटवर्किंग मुद्दों के लिए वास्तव में संभव नहीं है। लेकिन मुझे यह विचार पसंद है।
फितु

2

डेविल्स एडवोकेट एक और रास्ता सुझाता है।

दूसरे डेवलपर ने कहा है, सपाट रूप से, कि वहां कोई बग नहीं है।

क्या आप उसके कथित रूप से-बग़ैर बग़ीचे के नर्क को तनाव देने का एक तरीका लेकर आ सकते हैं, और इसके कारण बहुत बार दुर्घटना हो सकती है?


2

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

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

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

यहां तक ​​कि उन दुर्लभ मामलों में जहां एक बग को ठीक किए जाने के बाद भी पुन: पेश नहीं किया जा सकता है, आप इसे कोड निरीक्षण द्वारा बंद कर सकते हैं।


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

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

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