मुझे कई परियोजनाओं और अधिकारियों को निस्तारित करने का "अवसर" दिया गया, जिससे पूरी देव टीम बदल गई क्योंकि ऐप में बहुत अधिक त्रुटियां थीं और उपयोगकर्ता समस्याओं और भाग-दौड़ से थक गए थे। इन कोड आधारों में एप स्तर पर सभी केंद्रीकृत त्रुटि हैंडलिंग थी जैसे शीर्ष मतदान उत्तर विवरण। यदि वह उत्तर सबसे अच्छा अभ्यास है तो यह काम क्यों नहीं किया और पिछली देव टीम को मुद्दों को हल करने की अनुमति देता है? शायद कभी-कभी यह काम नहीं करता है? ऊपर दिए गए उत्तर में यह उल्लेख नहीं किया गया है कि एकल मुद्दों को ठीक करने में देव कितने समय व्यतीत करते हैं। यदि समस्याओं को हल करने का समय प्रमुख मीट्रिक है, तो try..catch ब्लॉकों के साथ इंस्ट्रूमेंटिंग कोड एक बेहतर अभ्यास है।
मेरी टीम ने यूआई को बदलने के बिना समस्याओं को कैसे ठीक किया? सरल, हर विधि का प्रयास के साथ साधन किया गया था..चेक ब्लॉक किया गया और सब कुछ विफलता के बिंदु पर लॉग किया गया था विधि नाम के साथ, विधि पैरामीटर मान एक स्ट्रिंग में समाप्त हो गया जिसमें त्रुटि संदेश, त्रुटि संदेश, ऐप का नाम, दिनांक, आदि और संस्करण। इस जानकारी के साथ डेवलपर्स उस अपवाद की पहचान करने के लिए त्रुटियों पर एनालिटिक्स चला सकते हैं जो सबसे अधिक होता है! या त्रुटियों की उच्चतम संख्या के साथ नामस्थान। यह भी मान्य कर सकता है कि एक मॉड्यूल में होने वाली त्रुटि को ठीक से नियंत्रित किया जाता है और कई कारणों से नहीं होता है।
इसका एक अन्य समर्थक लाभ यह है कि त्रुटि लॉगिंग विधि में एक ब्रेक-पॉइंट सेट किया जा सकता है और एक ब्रेक-पॉइंट और "स्टेप आउट" डीबग बटन के एक क्लिक के साथ, वे उस विधि में हैं जो वास्तविक तक पूर्ण पहुंच के साथ विफल हुए विफलता के बिंदु पर वस्तुएं, तत्काल विंडो में आसानी से उपलब्ध हैं। यह डिबग करना बहुत आसान बनाता है और सटीक लाइन खोजने के लिए समस्या को डुप्लिकेट करने के लिए विधि की शुरुआत में निष्पादन को वापस खींचने की अनुमति देता है। क्या केंद्रीकृत अपवाद हैंडलिंग एक डेवलपर को 30 सेकंड में एक अपवाद को दोहराने की अनुमति देता है? नहीं।
बयान "एक विधि को केवल एक अपवाद को पकड़ना चाहिए जब वह इसे कुछ समझदार तरीके से संभाल सकता है।" इसका तात्पर्य है कि डेवलपर्स हर उस त्रुटि का पूर्वानुमान लगा सकते हैं या उसका सामना कर सकते हैं, जो रिलीज से पहले हो सकती है। यदि यह एक उच्च स्तर था, तो ऐप अपवाद हैंडलर की जरूरत नहीं होगी और इलास्टिक सर्च और लॉगस्टैश के लिए कोई बाजार नहीं होगा।
यह दृष्टिकोण देवों को उत्पादन में रुक-रुक कर मुद्दों को खोजने और ठीक करने देता है! क्या आप उत्पादन में डिबगर के बिना डिबग करना चाहेंगे? या आप परेशान उपयोगकर्ताओं से कॉल लेने और ईमेल प्राप्त करेंगे? यह आपको किसी और को जानने से पहले और ईमेल के बिना, आईएम, या स्लैक के समर्थन में मुद्दों को ठीक करने की अनुमति देता है क्योंकि समस्या को ठीक करने के लिए आवश्यक सब कुछ ठीक है। 95% मुद्दों को पुन: पेश करने की आवश्यकता नहीं है।
ठीक से काम करने के लिए इसे केंद्रीकृत लॉगिंग के साथ जोड़ा जाना चाहिए जो किसी डेटाबेस में नेमस्पेस / मॉड्यूल, क्लास का नाम, विधि, इनपुट और त्रुटि संदेश और स्टोर पर कब्जा कर सकता है, इसलिए यह हाइलाइट करने के लिए एकत्रित किया जा सकता है कि कौन सी विधि सबसे अधिक विफल होती है इसलिए यह हो सकता है पहले तय किया।
कभी-कभी डेवलपर्स कैच ब्लॉक से स्टैक अप अपवाद को फेंकना चुनते हैं, लेकिन यह दृष्टिकोण सामान्य कोड की तुलना में 100 गुना धीमा है जो फेंक नहीं करता है। लॉगिंग के साथ कैच और रिलीज को प्राथमिकता दी जाती है।
इस तकनीक का उपयोग 2 वर्षों में 12 देवों द्वारा विकसित फॉर्च्यून 500 कंपनी में अधिकांश उपयोगकर्ताओं के लिए हर घंटे विफल रहने वाले ऐप को जल्दी से स्थिर करने के लिए किया गया था। इस का उपयोग करते हुए 3000 अलग-अलग अपवादों की पहचान, तय, परीक्षण और 4 महीने में की गई। यह औसतन हर 15 मिनट में औसतन 4 महीने के लिए ठीक हो जाता है।
मैं मानता हूं कि कोड को लिखतने के लिए आवश्यक हर चीज में टाइप करना मजेदार नहीं है और मैं दोहराव वाले कोड को नहीं देखना पसंद करता हूं, लेकिन प्रत्येक विधि में कोड की 4 लाइनों को जोड़ना लंबे समय में इसके लायक है।