अपवाद के बजाय बग शब्द का उपयोग क्यों नहीं किया गया? [बन्द है]


18

यदि हम अपवादों को बग के रूप में संदर्भित करते हैं, तो इसे अपवाद के बजाय पहली जगह में बग क्यों नहीं कहा जाता है?

यदि कोड में इसे अपवाद कहा जाता है और जैसे ही यह होता है तो इसे बग कहा जाता है। तो फिर इसे पहली जगह में बग क्यों नहीं कहा जाता?

किसी भी उत्तर या टिप्पणी के लिए धन्यवाद।


मुझे आशा है कि मेरे द्वारा उल्लेखित तकनीकी विवरण एक बग बनाम एक अपवाद के भेद को स्पष्ट करने में मदद करते हैं। महान प्रश्नावली BTW, +1
जेरेमी थॉम्पसन


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

1
@NiklasRtz: विशाल इनाम क्यों? लोगों के टन की परवाह किए बिना जवाब दिया होगा।
thePopMachine 15

@ ThePopMachine क्योंकि मुझे उन सवालों के लिए बहुत बड़ा इनाम पसंद है जो अन्य लोगों को दिलचस्प लग सकते हैं। मैं अपने "लोकप्रिय" सवालों का जवाब दे रहा हूं और जितना हो सकता है उतने जवाब दूंगा। मुझे अच्छे और मजेदार सवालों और जवाबों से बहुत मदद मिली है। मैं इस प्रोग्रामर के लिए एरर हैंडलिंग और एरर कोड्स के बारे में एक नया प्रश्न भी तैयार कर रहा हूं..यह विशिष्ट नहीं है कि कोड कैसे लिखें, लेकिन वेबपेजों के लिए छूट के लिए सीमित और उम्मीद के मानकीकृत तरीके से त्रुटियों को कैसे हैंडल किया जाए जो सीमित संख्या में वापस आ सकें त्रुटि कोड, कैसे deafults अच्छे हैं और कोड भागों का नामकरण।
निकोलस

जवाबों:


93

खैर, यह बहुत आसान है: सभी अपवाद बग नहीं हैं (और इसी तरह, सभी कीड़े अपवाद के रूप में खुद को प्रकट नहीं करते हैं)।

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

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

कहा जा रहा है कि, एक अपवाद जो स्टैक की संभावना के शीर्ष पर अपना रास्ता बनाता है वह एक बग है। ऊपर मेरे USB उदाहरण में, आपको उस अपवाद को पकड़ने में सक्षम होना चाहिए और उपयोगकर्ता को यह कहते हुए एक अच्छी त्रुटि पेश करनी चाहिए कि "हम फ़ाइल से नहीं पढ़ सकते क्योंकि यह अब जुड़ा नहीं है।" या कुछ और। यदि आप उन्हें एक IOExceptionऔर कुछ फंकी एरर कोड के साथ प्रस्तुत करते हैं , तो यह एक बग है। लेकिन अपवाद स्वयं नहीं है।


1
मेरे द्वारा देखे जाने पर भी आप सही हैं: यदि कोई विधि निकटतम शहर (लॉस एंजिल्स) का नाम प्राप्त करने में विफल रहती है, तो यह एक अपवाद को पकड़ता है और बड़े प्रशासनिक क्षेत्र (जैसे कैलिफ़ोर्निया) का नाम देता है, लेकिन जब से यह लागू होता है किसी भी समन्वय के लिए, बिना किसी नजदीकी शहर के एक जगह बग नहीं है, यह एक अपवाद है। क्या आप सहमत हैं?
निकोलस

1
@ निके: हाँ, मैं इससे सहमत हूँ।
डीन हार्डिंग

1
IOException और एक त्रुटि कोड प्रस्तुत करना हमेशा एक बग नहीं होता है। यह एक डायग्नोस्टिक है। मैं अक्सर व्यक्तिगत स्क्रिप्ट के लिए ऐसा करता हूं, जहां विफलता का मतलब है कि मैं सिर्फ गलत तर्क देता हूं।
थॉमस ईडिंग

23

सादा और सरल, एक अपवाद (हमेशा) एक बग नहीं है!

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

एक बग आमतौर पर खराब प्रोग्रामिंग का एक परिणाम है। यदि कोई एप्लिकेशन कुछ ऐसा करता है जो प्रोग्रामिंग त्रुटि के परिणामस्वरूप अपेक्षित नहीं है, तो यह एक बग है।


1
हे, हमने लगभग एक ही समय में उत्तर दिया, और मूल रूप से एक ही उदाहरण के साथ ही :-)
डीन हार्डिंग

5
@ महान विचार एक जैसे लगते हैं, हाँ? : D

1
जबकि मैं आपके पहले वाक्य से सहमत हूं, मुझे आपके अंतिम वाक्य से असहमत होना चाहिए। पहला कंप्यूटर बग (हालांकि मनगढ़ंत), वास्तव में, एक कीट एक रिले के बिंदुओं के बीच फंस गया था। कैसे एक खराबी हार्ड ड्राइव किसी भी अलग है?
स्कॉट व्हिटलॉक

1
@ScottWhitlock मुझे लगता है कि "बग" की एक से अधिक परिभाषा है। मैंने हमेशा इसे मनुष्यों द्वारा की गई त्रुटियों के कारण माना है: en.wikipedia.org/wiki/Software_bug

1
@ScottWhitlock: और माना जाता है कि प्रोग्रामर कहेंगे "मेरी गलती नहीं, एक बग होना चाहिए", जिसे "बग" के रूप में बैकफायर करने का मतलब एक सॉफ्टवेयर दोष था। आज, हार्डवेयर विफलता को बग नहीं कहा जाएगा, हालांकि बग के परिणामस्वरूप हार्डवेयर विफलता हो सकती है।
6

20

ये एक ही चीज नहीं हैं।

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

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

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

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


अपनी शर्तों को परिभाषित करने के लिए +1। सामान्य तौर पर, लोगों को अधिक बार ऐसा करना चाहिए!
21 फरवरी को yfeldblum

यह निश्चित रूप से सबसे स्पष्ट उत्तर है। बहुत स्पष्ट और संक्षिप्त। अच्छा काम!
लोके

5

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


3

अपवाद हमेशा बग से संबंधित नहीं होते हैं। इसे ऐसा समझें कि आप जो कर रहे हैं, उसमें कुछ गलत हो सकता है।

एक उदाहरण जो दिमाग में आता है वह है InetAddress.getByName () जो कि एक डोमेन नाम को हल करने के लिए उपयोग किया जाता है। अगर कुछ होता है और एक UnknownHostException को फेंक दिया जाता है तो यह वास्तव में कोड इश्यू नहीं है।


2

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

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

यदि कोई डीबगर दूसरा मौका अपवाद नहीं संभालता है, तो एप्लिकेशन बंद हो जाता है।


2

आप वैध रूप से एक अपवाद खुद उठा सकते हैं, आप उम्मीद करेंगे कि उद्देश्य पर बग का परिचय कभी न हो।


यह एक टिप्पणी की तरह अधिक पढ़ता है, देखें कैसे उत्तर दें
gnat

1
ब्रेविटी का मतलब यह नहीं है कि यह ऐसा जवाब नहीं है जो दो चीजों के बीच के अंतर को उजागर करता है।
एलन बी

1

सभी अपवाद बग नहीं हैं। यह बहस का विषय हो सकता है कि सभी कीड़े अपवाद हैं या नहीं।

हम कह सकते हैं कि अपवाद ऐसी घटनाएँ हैं जो आवेदन के सामान्य या अपेक्षित प्रवाह का हिस्सा नहीं हैं। ये घटनाएँ स्वतंत्र हो सकती हैं कि कोड कैसे लिखा जाता है जहाँ एक बग अनिवार्य रूप से खराब कोड (जैसे गलत गणना) का परिणाम होता है।

यहाँ एक उदाहरण है कि अपवाद को कैसे नहीं संभालना बग हो सकता है।

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

अनिवार्य रूप से अप्रत्याशित घटनाओं को संभालने के लिए हमारे तरीके को आसान बनाने के लिए प्रदान करने वाली भाषाओं को प्रदान करने वाली प्रोग्रामिंग माचिसिज्म को पकड़ने की कोशिश अनिवार्य रूप से है।


1

सिनोप्सिस : अपवाद बुरे परिणामों के सबूत हैं, कीड़े खराब परिणामों के कुछ कारण हैं। समस्या (हल की जानी चाहिए) अपवाद नहीं है, समस्या वह है जो अपवाद का कारण बनी।

अनुगमन: एक बग किसी उत्पाद के डिजाइन या कार्यान्वयन में दोष है (सॉफ्टवेयर तक सीमित नहीं)। उदाहरण के लिए, गलत ऐनक या सरल बिल्ड त्रुटि के कारण या तो ठीक से रेटेड रिले (समय / संवेदनशीलता / विश्वसनीयता / क्षमता) का उपयोग नहीं करना। एक अपवाद एक वास्तविक दुनिया है / भविष्यवाणी की गई समय से विचलन (मुझे लगता है कि 'अपेक्षित' कहने की हिम्मत है?) व्यवहार, जैसे, वाहन चलाते समय वाहन के नियंत्रण का नुकसान।

स्पष्ट रूप से, एक बग अपवाद का कारण बन सकता है क्योंकि 1 में उदाहरण) 2 में उदाहरण को जन्म दे सकता है)। लेकिन सभी अपवाद बग के कारण नहीं होंगे, उदाहरण के लिए, एक वाहन के नियंत्रण का नुकसान क्योंकि ऑपरेटर को एक स्ट्रोक था।


0

चूँकि यह प्रश्न एक इनाम के लिए फिर से खोला गया है, मुझे 2003 के अपने सीयूजे लेख का उल्लेख करना चाहिए, जिसका शीर्षक है "एन एक्सएक्सएक्स ए या बग?", जो ओपी के प्रश्न को बिल्कुल संबोधित करता है।

मूल रूप से, लेख "बग" और "अपवाद" (उदाहरण देते हुए) शब्दों को परिभाषित करता है, और प्रत्येक से निपटने के लिए रणनीतियों का प्रस्ताव करता है।

लेख बग को "संभाल" नहीं करने का प्रस्ताव देता है, बल्कि उन्हें जोर के साथ झंडा देता है। इसके विपरीत, सच्चे अपवादों को कोड के माध्यम से संभालने की आवश्यकता होती है (संभवतः अपवादों को फेंकना / पकड़ना)।

मुख्य बिंदु यह है कि बग को अपवादों की तुलना में सटीक विपरीत रणनीति की आवश्यकता होती है।

उपर्युक्त लेख अब डॉडोब के यहाँ से उपलब्ध है: http://www.drdobbs.com/an-exception-or-a-bug/184401686

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