ব্যতিক্রম শব্দটির পরিবর্তে বাগ শব্দটি ব্যবহার করবেন না কেন? [বন্ধ]


18

যদি আমরা বাগ হিসাবে ব্যতিক্রমগুলি উল্লেখ করি তবে কেন কেবল ব্যতিক্রমের পরিবর্তে এটি প্রথমে বাগ হিসাবে ডাকব না?

কোডে এটিকে ব্যতিক্রম বলা হয় এবং এটি হওয়ার সাথে সাথে এটিকে একটি বাগ বলা হয়। তাহলে কেন এটিকে প্রথমে বাগ বলবেন না?

কোন উত্তর বা মন্তব্যের জন্য আপনাকে ধন্যবাদ।


আমি আশা করি যে প্রযুক্তিগত বিবরণগুলি আমি উল্লেখ করেছি তাতে কোনও বাগের তুলনায় কোনও ব্যতিক্রমের পার্থক্য স্পষ্ট করে দেওয়া যায়। দুর্দান্ত প্রশ্ন বিটিডাব্লু, +1
জেরেমি থম্পসন


1
আমি আসলে জানি না যে আপনি কীভাবে তাদের বিভ্রান্ত করতে পারেন, কারণ এগুলি খুব আলাদা জিনিস। ব্যতিক্রমগুলি কোড দ্বারা পরিচালিত কেসগুলি, যা কোনওরকম ত্রুটি নির্দেশ করে। সাধারণত, একটি অস্পষ্ট ধরণের ত্রুটি, ঠিক ব্যাখ্যাযোগ্য নয় এবং এ জাতীয়। - বাগগুলি করার সময় ... একটি ত্রুটি কোড দ্বারা নিজেই হ্যান্ডেলড সংজ্ঞা দ্বারা হয়। তারা এমনকি ত্রুটিও নয়, তারা যুক্তির অভাব নির্দেশ করে যেখানে এটি হওয়া উচিত নয়।
tvCa

1
@ নিক্লাসআর্টজ: বিশাল অনুগ্রহ কেন? অজস্র লোক নির্বিশেষে উত্তর দিতেন।
ThePopMachine

@ দ্যপপম্যাচিন কারন আমি অন্যান্য লোকদের কাছে আকর্ষণীয় মনে হতে পারে এমন প্রশ্নগুলির জন্য বিশাল উদ্যানগুলি পছন্দ করি। আমি আমার "জনপ্রিয়" প্রশ্নগুলির পুনর্নির্মাণ করছি এবং আমি যতটা পারি উত্তর দিতে পারি। আমি ভাল এবং মজাদার প্রশ্ন এবং উত্তর থেকে অনেক সাহায্য পেয়েছি। আমি এই প্রোগ্রামারগুলির জন্য ত্রুটি পরিচালনা ও ত্রুটি কোডগুলি সম্পর্কে একটি নতুন প্রশ্নও প্রস্তুত করছি..এটি কোড কীভাবে লিখবেন তা নির্দিষ্ট নয় তবে কীভাবে ওয়েব অ্যাপসকে সীমিত সংখ্যক ফিরিয়ে দিতে পারে এমন এক্সটেম্পল করার জন্য সীমিত এবং আশাবাদী মানসম্মত উপায়ে ত্রুটিগুলি কীভাবে পরিচালনা করতে হবে তা নির্দিষ্ট নয় t ত্রুটি কোডগুলি, কীভাবে ডিফল্টগুলি ভাল এবং কোড অংশগুলির নামকরণ করে।
নিক্লাস

উত্তর:


93

ভাল, এটি বেশ সহজ: সমস্ত ব্যতিক্রমগুলি বাগ নয় (এবং একইভাবে, সমস্ত বাগ নিজেকে ব্যতিক্রম হিসাবে প্রকাশ করে না)।

কোনও ব্যতিক্রমের উদাহরণ হিসাবে এটি কোনও বাগ নয়, যদি আপনি কোনও ইউএসবি ড্রাইভ থেকে কোনও ফাইল পড়েন এবং কেউ সকেট থেকে ড্রাইভটি বের করে দেয়। এটি একটি ব্যতিক্রম বাড়াতে চলেছে (বেশিরভাগ ভাষায় যা ব্যতিক্রমকে সমর্থন করে, এটি)। তবে কোডে এটি কোনও বাগ নেই।

বিপরীতভাবে, একটি বাগ নিজেকে গণনার ত্রুটি বা কিছু হিসাবে প্রকাশ করতে পারে। আপনি এখনও একটি উত্তর পান, এটি ঠিক সঠিক নয়।

এই কথাটি বলার পরে, ব্যতিক্রম সম্ভবত স্ট্যাকের শীর্ষে যাওয়ার সমস্ত উপায় তৈরি করে একটি বাগ is উপরের আমার ইউএসবি উদাহরণে, আপনি সেই ব্যতিক্রমটি ধরতে এবং ব্যবহারকারীর কাছে একটি দুর্দান্ত ত্রুটি উপস্থাপন করতে সক্ষম হবেন "এই ফাইলটি আর সংযুক্ত না হওয়ায় আমরা ফাইলটি পড়তে পারিনি" " অথবা অন্যকিছু. আপনি যদি এগুলি কেবল একটি IOExceptionএবং কিছু মজার ত্রুটি কোড সহ উপস্থাপন করেন তবে এটি একটি বাগ। তবে ব্যতিক্রম নিজেই এটি নয়।


1
আমি কীভাবে এটি করি তা দেখার পরেও আপনি সঠিক হন: কোনও পদ্ধতি যদি নিকটতম শহরের (লস অ্যাঞ্জেলেস) নাম পেতে ব্যর্থ হয় তবে এটি ব্যতিক্রম হয় এবং বৃহত্তর প্রশাসনিক অঞ্চলটির নাম দেয় (যেমন ক্যালিফোর্নিয়া) তবে যেহেতু এটি প্রয়োগ হয় যে কোনও স্থানাঙ্কের কাছে, নিকটবর্তী শহর ছাড়া কোনও জায়গা বাগ নয়, এটি ব্যতিক্রম। তুমি কি একমত?
নিক্লাস

1
@ নিক: হ্যাঁ, আমি এর সাথে একমত হই।
ডিন হার্ডিং

1
একটি আইওএক্সেপশন এবং একটি ত্রুটি কোড উপস্থাপন করা সর্বদা কোনও বাগ নয়। এটি ডায়াগনস্টিক। আমি প্রায়শই এটি ব্যক্তিগত স্ক্রিপ্টগুলির জন্য করি, যেখানে ব্যর্থতার অর্থ আমি স্রেফ ভুল যুক্তি দিয়েছি।
টমাস এডিং

23

সরল এবং সহজ, একটি ব্যতিক্রম (সর্বদা) কোনও বাগ নয়!

ব্যতিক্রমী কিছু ঘটলে একটি ব্যতিক্রম ছুঁড়ে দেওয়া হয় (বা হওয়া উচিত)। আমার হার্ড ড্রাইভে যদি সমস্যা হয় এবং একটি ফাইল লেখা যায় না, এটি কোনও বাগ নয়। এটি হার্ডওয়্যার একটি ব্যর্থতা।

একটি বাগ সাধারণত খারাপ প্রোগ্রামিংয়ের ফলাফল। যদি কোনও অ্যাপ্লিকেশন এমন কিছু করে যা প্রোগ্রামিং ত্রুটির ফলে প্রত্যাশিত নয়, তবে এটি একটি বাগ।


1
হি, আমরা প্রায় একই সময়ে উত্তর দিয়েছিলাম, এবং মূলত একই উদাহরণটিও সহ :-)
ডিন হার্ডিং

5
@ ডিয়ানহার্ডিং মহান মন একসাথে ভাবেন, হ্যাঁ? : ডি

1
আমি যখন আপনার প্রথম বাক্যটির সাথে একমত হই, তবুও আপনাকে অবশ্যই আমার শেষ বাক্যটির সাথে একমত হতে হবে না। প্রথম কম্পিউটার বাগ (যদিও অপ্রামাণিক), আসলে, একটি মথ একটি রিলে এর বিন্দুর মধ্যে আটকা পড়ে ছিল। কোনও ত্রুটিযুক্ত হার্ড ড্রাইভ কীভাবে আলাদা?
স্কট হুইটলক

1
@ স্কটউইটলক আমার ধারণা "বাগ" এর একাধিক সংজ্ঞা রয়েছে। আমি সবসময় গড় ত্রুটির ধারণা যেমন মানুষের দ্বারা সৃষ্ট: en.wikipedia.org/wiki/Software_bug

1
@ স্কটউইটলক: এবং সম্ভবত প্রোগ্রামাররা "আমার দোষ নয়, অবশ্যই একটি বাগ হতে হবে" বলবে, যা "বাগ" হিসাবে ব্যর্থ হয়ে সফ্টওয়্যার ত্রুটি বোঝায়। আজ, একটি হার্ডওয়্যার ব্যর্থতাকে বাগ বলা হবে না, যদিও বাগের ফলে হার্ডওয়্যার ব্যর্থতা হতে পারে।
jmoreno

20

এগুলো এক জিনিস না.

একটি বাগ একটি সফ্টওয়্যার অংশের অনিচ্ছাকৃত আচরণ: সফ্টওয়্যারটি যা করার কথা তা করে না। বাগগুলি সফ্টওয়্যার বিকাশের সমস্ত স্তরে বাস করতে পারে, প্লেইন পুরাতন টাইপগুলি থেকে যৌক্তিক ত্রুটি থেকে অপর্যাপ্ত ফাংশনাল স্পেস পর্যন্ত।

একটি ব্যতিক্রম , বিপরীতে, হয় কোনও প্রোগ্রামের একটি অস্বাভাবিক পরিস্থিতি, সাধারণ ক্রিয়াকলাপ থেকে বিচ্যুত হওয়া বা বিশেষত, এই জাতীয় অবস্থার সংকেত ও পরিচালনা করতে ব্যবহৃত ভাষা নির্মানের বিষয়ে উল্লেখ করতে পারে।

ব্যতিক্রম ঘটবে তা ত্রুটির চিহ্ন হতে পারে তবে প্রায়শই তা হয় না। উদাহরণস্বরূপ, কোনও অ্যাপ্লিকেশন যা কোনও ইউআরএল থেকে একটি দস্তাবেজ ডাউনলোড করার এবং স্থানীয়ভাবে এটি প্রক্রিয়া করার কথা বলে তা দূরবর্তী সার্ভারটি ডাউন থাকলে একটি ব্যতিক্রম হতে পারে: অ্যাপ্লিকেশনটি সাধারণ ক্রিয়াকলাপ থেকে বিচ্যুত হয় (এটি নথিটি ডাউনলোড ও প্রক্রিয়া করতে পারে না), তবে এটি যদি হয় ব্যতিক্রমটি সঠিকভাবে পরিচালনা করে এবং পুনরুদ্ধার করে, তখন কোনও বাগ নেই।

বিপরীতে, ত্রুটির উপস্থিতি অগত্যা নিজেকে ব্যতিক্রম হিসাবে প্রকাশ করে না। কোনও অ্যাপ্লিকেশন আপনার ডাটাবেসে এটি সংরক্ষণ করার পরিবর্তে নিঃশব্দে প্রবেশ করা ডেটা বাতিল করতে পারে; কোনও ব্যতিক্রম ছুঁড়ে না ফেলে তবে এটি এখনও একটি বাগ is


আপনার শর্তাবলী সংজ্ঞায়িত করার জন্য +1। সাধারণভাবে, লোকেরা আরও প্রায়ই এটি করা উচিত!
yfeldblum

এটি অবশ্যই স্পষ্ট উত্তর। খুব স্পষ্ট এবং সংক্ষিপ্ত। দারূন কাজ!
লক করুন

5

ব্যতিক্রম এবং বাগগুলি মোটেই সম্পর্কিত নয়। অবশ্যই, কখনও কখনও আপনি একটি ব্যতিক্রম ছুঁড়ে ফেলেছেন এবং এর অর্থ একটি বাগ। তবে কখনও কখনও এটির অর্থ কেবল একটি ব্যতিক্রমী, অস্বাভাবিক পরিস্থিতি, যা অগত্যা প্রোগ্রামের কোনও বাগ নয়। বিশেষত জাভা যেমন একটি ব্যতিক্রম-খুশি ভাষায়, যেখানে প্রতিটি মানক ক্রিয়াকলাপ এবং এটি কুকুর প্রায় পাঁচটি পৃথক ব্যতিক্রম নিক্ষেপ করে-উদাহরণস্বরূপ, ফাইল খোলার ব্যর্থ হয়েছে, ফাইল পড়া ব্যর্থ হয়েছে ইত্যাদি etc.


3

ব্যতিক্রমগুলি সবসময় বাগ সম্পর্কিত নয়। এটিকে এমন কিছু হিসাবে ভাবেন যা আপনি যা করছেন তাতে ভুল হতে পারে।

মাথায় আসার একটি উদাহরণ হ'ল InetAddress.getByName () যা কোনও ডোমেন নাম সমাধান করার জন্য ব্যবহৃত হয়। যদি কিছু ঘটে থাকে এবং কোনও অজানাহোস্টএক্সসেপশন এটি ফেলে দেওয়া হয় তবে এটি কোনও কোড সমস্যা নয়।


2

একটি সফ্টওয়্যার বাগ হ'ল একটি সাধারণ শব্দ যা কোনও কম্পিউটার প্রোগ্রাম বা সিস্টেমে একটি ত্রুটি, ত্রুটি, ভুল, ব্যর্থতা বা ত্রুটি বর্ণনা করার জন্য ব্যবহৃত হয় যা একটি ভুল বা অপ্রত্যাশিত ফলাফল উত্পন্ন করে বা অনিচ্ছাকৃত আচরণের কারণ করে। এমনকি কোনও লেবেলে কোনও বানান ভুলও হতে পারে।

ব্যতিক্রমগুলি বাদে পৃথক। প্রতিটি ধরণের ব্যতিক্রম (অ্যাক্সেস লঙ্ঘন, স্ট্যাক ওভারফ্লো এবং আরও কিছু) একটি ডিবাগারের কাছে হয় "প্রথম সুযোগ" বা "দ্বিতীয় সুযোগ" ব্যতিক্রম হিসাবে উত্থাপিত হতে পারে। প্রথম সুযোগ ব্যতিক্রমগুলি হ'ল সংজ্ঞা অনুসারে, অ-প্রাণঘাতী যদি না তারা ত্রুটি হ্যান্ডলারের সাথে সঠিকভাবে পরিচালনা না করা হয়, তবে দ্বিতীয় পর্যায়ে ব্যতিক্রম হিসাবে এগুলি আবার উত্থাপিত হয় (যা কেবলমাত্র কোনও ডিবাগারই পরিচালনা করতে পারে)।

যদি কোনও ডিবাগার দ্বিতীয় সুযোগ ব্যতিক্রম না পরিচালনা করে তবে অ্যাপ্লিকেশনটি বন্ধ হয়ে যায়।


2

আপনি বৈধভাবে নিজেই একটি ব্যতিক্রম উত্থাপন করতে পারেন, আশা করি আপনি উদ্দেশ্য নিয়ে কখনও কোনও বাগ প্রবর্তন করবেন না।


এটি আরও একটি মন্তব্যের মতো পড়ে, কীভাবে উত্তর দিতে হয় দেখুন
gnat

1
ব্রেভিটি এর অর্থ এই নয় যে এটি কোনও উত্তর নয় যা দুটি জিনিসের মধ্যে পার্থক্য তুলে ধরে।
অ্যালান বি

1

সমস্ত ব্যতিক্রম বাগ নয়। এটি বিতর্কের বিষয় হতে পারে যে সমস্ত বাগ ব্যতিক্রম বা না।

আমরা বলতে পারি ব্যতিক্রমগুলি হ'ল ইভেন্টগুলি যা প্রয়োগের স্বাভাবিক বা প্রত্যাশিত প্রবাহের অংশ নয়। এই সমস্যাগুলি কোড কীভাবে লিখিত হয় তার চেয়ে আলাদা হতে পারে যেখানে কোনও বাগ হিসাবে মূলত খারাপ কোডের ফলাফল হয় (ভুল গণনার মতো)।

এখানে কীভাবে কোনও ব্যতিক্রম পরিচালনা না করা তার একটি উদাহরণ হতে পারে।

আমাদের ধরুন যে কোনও প্রোগ্রাম রয়েছে যা বাহ্যিক স্টোরেজ ডিভাইসে কিছু ডেটা লিখে। বাহ্যিক স্টোরেজ ডিভাইসটি লেখার সময় আনপ্লাগড করা হয়েছিল, ক্রাশ হয়েছিল বা ধ্বংস হয়ে যেতে পারে (কোন কারণেই)। এখন এটি একটি ব্যতিক্রমী কেস, এখন প্রোগ্রামিং ভাষাটি ব্যতিক্রমী হ্যান্ডলিং সমর্থন করে বা যদি এই ইভেন্টটির কারণে প্রোগ্রামটি ক্র্যাশ হয় বা খারাপ আচরণ করে তবে এটি একটি বাগ। (শেষ ব্যবহারকারীটি কী ঘটবে তা হতাশই করতে পারেন না It এটি খুব অসন্তুষ্ট) । তবে যদি প্রোগ্রামটি প্রক্রিয়াটি মনোযোগ সহকারে বন্ধ করে দেয় তবে ব্যবহারকারীকে অবহিত করুন (অন্য কথায় এক্সপিশনটি পরিচালনা করুন) এটি পরিষ্কার কোনও বাগ নয়।

ম্যাচানিজম প্রোগ্রামিং ল্যাঙ্গুয়েজগুলি উপলব্ধ করার চেষ্টাটি অপ্রত্যাশিত ইভেন্টগুলি পরিচালনা করার জন্য আমাদের পথ সহজ করার জন্য একটি সরঞ্জাম।


1

সংক্ষিপ্তসার : ব্যতিক্রমগুলি খারাপ ফলাফলের প্রমাণ, বাগগুলি (কিছু কিছু) খারাপ ফলাফলের কারণ। সমস্যাটি (সমাধান করতে হবে) ব্যতিক্রম নয়, সমস্যাটি ব্যতিক্রম ঘটায়।

রেজোনিং: কোনও ত্রুটি হ'ল কোনও পণ্য ডিজাইন বা প্রয়োগের ক্ষেত্রে ত্রুটি (সফ্টওয়্যারেই সীমাবদ্ধ নয়)। উদাহরণস্বরূপ, ভুল চশমা বা সাধারণ বিল্ড ত্রুটির কারণে একটি সঠিকভাবে রেটযুক্ত রিলে (সময় / সংবেদনশীলতা / নির্ভরযোগ্যতা / ক্ষমতা) ব্যবহার না করা। একটি ব্যতিক্রম হ'ল আসল বিশ্ব / চালিত সময়ের বিচ্যুতি (ভবিষ্যতবাণী বলার সাহস)?

স্পষ্টতই, 1-এ উদাহরণ হিসাবে একটি বাগ একটি ব্যতিক্রম ঘটায়।) উদাহরণটি উদাহরণস্বরূপ হতে পারে 2)। তবে সমস্ত ব্যতিক্রমগুলি বাগের কারণে ঘটবে না, উদাহরণস্বরূপ, কোনও যানবাহন নিয়ন্ত্রণ হারিয়েছে কারণ অপারেটরটির একটি স্ট্রোক হয়েছিল।


0

যেহেতু এই প্রশ্নটি অনুগ্রহের জন্য পুনরায় খোলা হয়েছে, তাই 2003 এর আমার সিইউজে নিবন্ধটি "একটি ব্যতিক্রম বা একটি বাগ?" শিরোনামে উল্লেখ করতে পারি, যা ওপির প্রশ্নের ঠিক ঠিক সম্বোধন করে বলে মনে হচ্ছে।

মূলত, নিবন্ধটি "বাগ" এবং "ব্যতিক্রম" (উদাহরণ দেওয়া) শর্তাদি সংজ্ঞায়িত করে এবং প্রতিটিটির সাথে ডিল করার কৌশল প্রস্তাব করে।

নিবন্ধটি বাগগুলি "পরিচালনা" না করার পরিবর্তে দৃ them়তার সাথে তাদের পতাকাঙ্কিত করার প্রস্তাব দেয়। বিপরীতে, সত্য ব্যতিক্রম কোডের মাধ্যমে পরিচালনা করা প্রয়োজন (সম্ভবত ব্যতিক্রম ছোঁড়া / ধরা ব্যতিক্রম)।

মূল কথাটি হ'ল বাগগুলি ব্যতিক্রমগুলির চেয়ে সঠিক বিপরীত কৌশল প্রয়োজন ।

পূর্বোক্ত নিবন্ধটি এখন ডক্টব ডাবস থেকে পাওয়া যাবে: http://www.drdobbs.com/an-exception-or-a-bug/184401686

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.