क्या यह चेतावनी और नोटिस से बचने के लिए अच्छा अभ्यास है?


20

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

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

अंत में, मुझे नहीं पता कि क्या मैं अपना समय बर्बाद कर रहा हूं और सभी चेतावनियों और नोटिसों से छुटकारा पाने की कोशिश कर रहा हूं, या कि मैं वास्तव में अधिक अच्छे के लिए ऐसा कर रहा हूं।

इसलिए मेरा प्रश्न, क्या यह चेतावनी और नोटिस से पूरी तरह से बचने के लिए अच्छा अभ्यास है, या यह वास्तव में कोई फर्क नहीं पड़ता है?


6
"कभी-कभी, नोटिस न करने का कोई समाधान नहीं है" जब से मैंने PHP का उपयोग किया है, तब से यह एक समय हो गया है, लेकिन मुझे ऐसे मामलों में भाग लेने की याद नहीं है जहां आप नोटिस / चेतावनी से बच सकते हैं या कम से कम इसे स्थानीय रूप@ से दबा सकते हैं
कोडइन्चोअस

27
मैंने जो सबसे ठोस तर्क देखा है, वह यह है कि "ये संदेश एक कारण से मौजूद हैं - खुद को चेतावनी की बाढ़ को अनदेखा करने के कारण हमें वास्तविक समस्याओं को नजरअंदाज करना पड़ता है जो शायद टाल दिया गया है।" दूसरे शब्दों में, यदि सामान्य ऑपरेशन के दौरान कोई चेतावनी या नोटिस नहीं हैं, तो कोई भी चेतावनी या नोटिस संभावित परेशानी का संकेत है; अगर सब कुछ सिर्फ शोर है, तो आप SHTF के बाद ही परेशानी शुरू कर देंगे (और शायद ग्राहकों के जाने के बाद)।
पिस्कवेर

12
नोटिस को दबाने के लिए @ का उपयोग करना, जबकि आम तौर पर, एक बुरी चीज माना जाता है। यह बदतर है तो बस सभी नोटिस को बंद कर देना क्योंकि आपने अब एक संभावित समस्या को छिपा दिया है। 15 साल की php प्रोग्रामिंग में मुझे अभी तक एक ऐसे मामले में नहीं आना है जहाँ मुझे कोड I नियंत्रण में एक नोटिस को दबाना पड़ा हो।
सेराड

2
क्या आप इन सूचनाओं का प्रदर्शन बंद कर रहे हैं या कर रहे हैं error_reporting(0);? मैं हमेशा उपयोग करता हूं error_reporting(E_ALL);और विकास और उत्पादन के बीच एकमात्र अंतर ini_set('display_errors', 'on');बनाम है ini_set('display_errors', 'off');। मैं हमेशा नोटिस और चेतावनी को ठीक करने का लक्ष्य रखता हूं जबकि कोड अभी भी मेरे दिमाग में ताजा है। मैं अपने उत्पादन प्रणाली पर अक्सर लॉग देखता हूं कि क्या अतिरिक्त चेतावनी और नोटिस हैं जो मुझे याद हो सकते हैं।
मंकीज़ेउस

1
मैं @Cerad के बारे में कही गई बातों से बहुत सहमत हूं @। PHP प्रोग्रामिंग के वर्षों और वर्षों के बाद, मैंने उस ऑपरेटर का उपयोग नहीं किया है। एक बार भी नहीं। कभी नहीँ। न केवल यह संभावित समस्याओं को छिपाता है, इसका एक प्रदर्शन प्रभाव भी है: दृश्यों के पीछे, PHP कोड को कॉल करने से पहले त्रुटि रिपोर्टिंग बंद कर देता है -> कोड को कॉल करता है -> इसे अपने मूल मूल्य पर वापस सेट करता है। यदि आपके पास @आपके कोड में दर्जनों या सैकड़ों हैं, तो ये चरण महंगे हैं ।
रादु मुरझिया

जवाबों:


26

अगर मैं इन लाइव उत्पादन वेबसाइटों पर चेतावनी और नोटिस को चालू करता हूं, तो वे उनके साथ ओवरलोड हो जाएंगे।

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

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

आदर्श रूप में, आप चेतावनियों को त्रुटियों के रूप में मानने की कोशिश भी करेंगे, लेकिन यह तभी काम करेगा जब; यदि इसे प्रति-फ़ाइल के आधार पर चालू / बंद करना संभव है, तो इसे सभी नई फ़ाइलों के लिए चालू करें, और सभी चेतावनी-मुक्त फ़ाइलों के लिए इसे चालू करें, और इसे एक बार चालू करने के बाद इसे कभी भी बंद न करें

तो, अधिभार के बारे में क्या करना है?

आप हर चेतावनी और सूचना की एक सूची बनाते हैं, और फिर निम्नलिखित नियमों का पालन करते हैं:

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

नोट: इन दोनों की आवश्यकता है कि आपके पास किसी प्रकार का लॉग डेटाबेस हो और जगह में लॉग फ़िल्टरिंग तंत्र हो। ध्यान दें, कि "लॉग डेटाबेस" और "लॉग फ़िल्टरिंग तंत्र" बस एक पाठ फ़ाइल और हो सकता है grep

यह महत्वपूर्ण बिट है। डेटाबेस के बिना, आपको पता नहीं चलेगा कि आप नई चेतावनी कब जोड़ते हैं, और फ़िल्टरिंग के बिना, आपको अभी भी अधिभार की समस्या है।

नोट # 2: यह केवल चेतावनियों के लिए काम नहीं करता है, यह स्टाइल चेकर्स, जटिलता मेट्रिक्स, कोड कवरेज, स्थैतिक विश्लेषण उपकरण, और इसी तरह के लिए भी काम करता है। मूल रूप से:

  1. नई समस्याएं न जोड़ें।
  2. पुरानी समस्याओं को ठीक करें जैसे ही आप उन पर ठोकर खाते हैं।

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

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


3
एक अन्य बिंदु यह है कि उपयोगकर्ता को पहुंचाने वाली चेतावनियों और त्रुटियों को बंद क्यों किया जाए: जैसा कि एक सूचना डेवलपर के लिए चेतावनी के रूप में है, यह संवेदनशील जानकारी (फ़ाइलों के नाम, अन्य शामिल सर्वरों के नाम, उपयोग किए जाने वाले एसक्यूएल प्रश्नों की संरचना) को लीक कर सकता है ... )
हेगन वॉन एटिजन

उत्पादन में चेतावनी उपयोगकर्ता को नहीं, लॉग को जाना चाहिए! त्रुटियों को लॉग में जाना चाहिए, उपयोगकर्ता को नहीं। एक वेबसाइट जो त्रुटियों को नहीं फँसाती है, उन्हें लॉग इन करें, और उपयोगकर्ता-उपयुक्त त्रुटि पृष्ठ की सेवा दें, बजाय उत्पादन तैयार होने के। PHP को यह गलत करना बहुत आसान है, लेकिन आपको अभी भी इसे सही करना चाहिए।
हॉब्स

49

यदि आपके कोड से चेतावनी और नोटिस आ रहे हैं, तो निश्चित रूप से इसे ठीक करें। मेरे अनुभव से, 95% में यह सौम्य हो सकता है, लेकिन 5% एक वास्तविक समस्या को उजागर करते हैं जिससे पीछा करने में अनगिनत घंटे लग सकते हैं।

यदि वे तृतीय-पक्ष कोड से आ रहे हैं, जिसे आपको एक कारण या दूसरे के लिए उपयोग करना चाहिए, तो आपके पास आमतौर पर ज्यादा विकल्प नहीं होते हैं।

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


8
मैं जावा / ग्रहण में काम करता हूं, जो स्पष्ट रूप से php से अलग है, लेकिन मुझे आमतौर पर यह चेतावनी मिलती है कि या तो 1 को उठाया जाता है) कुछ ऐसा जो संकलित करता है लेकिन मैंने एक स्पष्ट गलती की है या 2) कुछ ऐसा है जो अब ठीक है लेकिन सड़क के नीचे खराब होगा
corsiKa

1
@corsiKa मैं आपकी टिप्पणी PHP में अनुवाद कर रहा था, लेकिन मुझे एहसास हुआ कि केवल एक शब्द को बदलने की आवश्यकता है।
wizzwizz4

3
जब तक, निश्चित रूप से, ये चेतावनियां आपके usingबयान के आदेश के बारे में स्टाइलकॉप से ​​हैं ...
दान पेंट्री

12

यह मायने रखता है। एक चेतावनी आपके परीक्षणों को तोड़ नहीं सकती है या यहां तक ​​कि थोड़ी देर के लिए जंगली में दिखा सकती है - लेकिन यह एक उभरते हुए बग का लक्षण हो सकता है। मैं वर्तमान में मुख्य रूप से C # / C ++ में विकसित करता हूं और इससे छुटकारा पाने के लिए और हमारे कोड बेस से चेतावनी जारी रखने के लिए एक परिभाषित रणनीति है। सौभाग्य से यह रॉकेट विज्ञान =) नहीं है।

यदि आपके कामकाज की भाषा में चेतावनियों को त्रुटियों के रूप में मानने की क्षमता है और परिवर्तनशील चेतावनी स्तर हैं, तो मैं निम्नलिखित कार्य करूंगा:

  1. चेतावनी स्तर को केवल इतनी दूर तक घुमाएँ जिससे आपको कोई चेतावनी न मिले। यदि आप न्यूनतम चेतावनी स्तर पर हैं और आपको अभी भी चेतावनी मिलती है - उन्हें ठीक करने का प्रयास करें। यदि आप उन्हें ठीक नहीं कर सकते हैं, तो आप अभी के लिए कर रहे हैं, लेकिन उम्मीद है कि आप उन्हें ठीक कर सकते हैं। महान।
  2. चूंकि अब आपके पास कोई चेतावनी नहीं है (कम चेतावनी स्तर पर सबसे अधिक संभावना है), स्विच को फ्लिप करें और सभी चेतावनियों को त्रुटियों के रूप में मानें।
  3. चेतावनी स्तर को चालू करने और सभी नई चेतावनियों को ठीक करने का प्रयास करें। यदि आप नहीं कर सकते हैं, तो चेतावनी के स्तर को वापस नीचे ले जाएं, लेकिन चेतावनी को त्रुटियों के रूप में बंद न करें।

मुझे पता है कि यह न केवल मेरे कोड से चेतावनी देता है - यह उन्हें बाहर रखता है

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