উত্সবগুলি কখন কোডের কোডে থাকা উচিত? [বন্ধ]


166

একটা ব্যাপার আলোচনা comp.lang.c ++,। থাকুক বা না থাকুক গবেষকেরা, যা C ++ শুধুমাত্র ডিবাগ মধ্যে উপস্থিত সম্পর্কে সংযত ধরে চলছে ডিফল্টরূপে তৈরী করে, উৎপাদন কোডে বা না রাখতে হবে।

একথাও ঠিক যে, প্রতিটি প্রকল্প, অনন্য, তাই আমার প্রশ্ন এখানে নয় এত কিনা গবেষকেরা রাখতে হবে, কিন্তু যা ক্ষেত্রেই এই সুপারিশের / না ভাল ধারণা।

জোর দিয়ে, মানে:

  • একটি রান-টাইম চেক যা একটি শর্ত পরীক্ষা করে যা, যখন মিথ্যা হয়, সফ্টওয়্যারটিতে একটি বাগ প্রদর্শন করে।
  • এমন একটি প্রক্রিয়া যার মাধ্যমে প্রোগ্রামটি থামানো হয়েছে (সম্ভবত সত্যিই ন্যূনতম পরিষ্কার-পরিচ্ছন্নতার পরে)।

আমি অগত্যা সি বা সি ++ নিয়ে কথা বলছি না।

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

আপনার মতামত / অভিজ্ঞতা কি?

চিয়ার্স,

কার্ল

সম্পর্কিত প্রশ্ন এখানে দেখুন


প্রতিক্রিয়া এবং আপডেট

আরে গ্রাহাম,

একটি দাবিটি ত্রুটি, খাঁটি এবং সাধারণ এবং তাই এটির মতো পরিচালনা করা উচিত। যেহেতু একটি ত্রুটি রিলিজ মোডে পরিচালনা করা উচিত তখন আপনার সত্যিকারের দৃ .়তার প্রয়োজন নেই।

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

অতএব, আপনি একটি দৃ as়তা সঙ্গে পয়েন্টার পরীক্ষা করা উচিত, কিন্তু সাধারণ ত্রুটি-পরিচালনা কোড সহ ফাইল উপস্থিতি।


সামান্য অফ-টপিক, তবে আলোচনার একটি গুরুত্বপূর্ণ বিষয়।

শিরোনাম হিসাবে, যদি আপনার দাবিগুলি ব্যর্থ হয় তবে ডিবাগারে ভেঙে যায়, কেন নয়। তবে এমন অনেকগুলি কারণ রয়েছে যা কোনও ফাইল আপনার কোডের নিয়ন্ত্রণের বাইরে সম্পূর্ণরূপে বিদ্যমান নয়: পড়া / লেখার অধিকার, ডিস্ক পূর্ণ, ইউএসবি ডিভাইস আনপ্লাগড ইত্যাদি Since যেহেতু আপনার এতে নিয়ন্ত্রণ নেই তাই আমি দৃser়ভাবে মনে করি এটি মোকাবেলা করার সঠিক উপায় নয়।

কার্ল


থমাস,

হ্যাঁ, আমার কোড কমপ্লিট রয়েছে এবং অবশ্যই বলতে হবে যে আমি সেই বিশেষ পরামর্শের সাথে দৃ strongly়ভাবে একমত নই।

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

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

কার্ল


3
সফটওয়্যার ইঞ্জিনিয়ারিং এসই-তে একটি আকর্ষণীয় সম্পর্কিত পোস্ট রয়েছে (যদিও আলোচনাটি সি ++ কেন্দ্রীভূত): মুক্তির বিল্ডগুলিতে কোনও বক্তব্য থাকা উচিত
সনি

উত্তর:


84

জোর দেওয়া মন্তব্যগুলি যা পুরানো হয় না। এগুলি নথি দেয় যে কোন তাত্ত্বিক রাজ্যগুলি উদ্দেশ্যযুক্ত এবং কোনটি রাজ্যগুলি হওয়া উচিত নয়। কোড পরিবর্তন করা হয় যাতে রাজ্যগুলিকে পরিবর্তনের অনুমতি দেওয়া হয়, বিকাশকারীকে শীঘ্রই অবহিত করা হবে এবং দৃ update়তা আপডেট করা দরকার।


16
@ জ্যাক্সনিডার: ইউনিট পরীক্ষাগুলি প্রোগ্রামের কোডের আওতায় থাকা জিনিসগুলি পরীক্ষা করার জন্য। কোডগুলি অনুমানের অধীনে কোডটি প্রক্রিয়া চালিয়ে যাওয়ার আগে, কোডগুলি অনুমান করা হয়েছে যে কোডগুলি অনুমান করা হয়েছে বাস্তবে বাস্তবে সত্য তা নিশ্চিত করার জন্য ser তারা এই অর্থে "ডকুমেন্টেশন" যা তারা যদি কেস হিসাবে না দাঁড়ায় তবে প্রোগ্রামটি বাতিল হয়ে যাবে, অনুমানটি জানিয়ে দেবে এবং বোঝাবে যে অনুমানটি ধরে রাখেনি। আপনি অবশ্যই কোডটিতে এটির ডকুমেন্টেশন হিসাবে দৃ read়তাটি পড়তে পারেন।

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

1
আরো নির্দিষ্টভাবে, দাবি হয় তথ্য এবং কার্মিক । নিজেই একটি দাবী প্রোগ্রাম প্রবাহ বা ফলাফলের উপর কোনও প্রভাব ফেলে না। অন্যদিকে ব্যতিক্রম, প্রোগ্রাম প্রবাহকে পরিবর্তন করে এবং এর ফলে ফলাফল।
yoyo

59

আমাকে স্টিভ ম্যাককনেলের কোড সম্পূর্ণ উদ্ধৃত করার অনুমতি দিন। অনুচ্ছেদে বিভাগটি 8.2।

সাধারণত, আপনি চান না যে ব্যবহারকারীরা প্রোডাকশন কোডটিতে দৃser় বার্তা দেখতে পাবে; জোর দেওয়া মূলত উন্নয়ন এবং রক্ষণাবেক্ষণের সময় ব্যবহারের জন্য। উত্সগুলি সাধারণত উন্নয়নের সময় কোডে সংকলিত হয় এবং উত্পাদনের জন্য কোডটি সংকলিত হয়।

তবে পরে একই বিভাগে এই পরামর্শ দেওয়া হয়েছে:

অত্যন্ত দৃust় কোডের জন্য, তবুও ত্রুটিটি জোড় করে হ্যান্ডেল করুন।

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


7
আমি মনে করি কোড কমপ্লিটের দ্বিতীয় উদ্ধৃতিটির অর্থ যা আপনার হ'ল - যা উত্পাদন কোডে সংকলিত হবে - এবং আপনারও "যদি (! শর্ত) should চেষ্টা করা উচিত { প্রোগ্রামের আক্রমণকারীদের লঙ্ঘন না করে প্রোগ্রামটি ক্রাশ হয়।
yoyo

34

প্রডাকশন কোডে ছেড়ে দেওয়া ছাড়ুন, আপনি যদি না পরিমাপ করেন যে প্রোগ্রামটি বন্ধ হয়ে যাওয়ার সাথে সাথে উল্লেখযোগ্যভাবে দ্রুত চলে runs

যদি এটি আরও দক্ষ হিসাবে প্রমাণ করার জন্য এটি মাপার মতো না হয় তবে কোনও পারফরম্যান্স জুয়ার জন্য এটি পরিষ্কারভাবে বলিদানের মতো নয় not "- স্টিভ ম্যাককনেল ১৯৯৩

http://c2.com/cgi/wiki?ShipWithAssertionsOn


11
প্রকৃতপক্ষে, সবচেয়ে খারাপটি ঘটে যা ঘটে যখন কোডটি ক্র্যাশ হয় তখন এমন কোনও কিছু যা দৃ an়তা নয়। যদি কোডটি পরে অবশ্যই 100% সম্ভাব্যতার সাথে ক্রাশ হয়ে যায় তবে অবশ্যই দাবিটি অবশ্যই একেবারে সেখানেই থাকবে। আপনি যদি কোনও পয়েন্টারকে অবজ্ঞা করেন তবে আপনাকে স্পষ্টতই জোর দিয়ে বলতে হবে যে এটি আগে নাল নয়। আপনি যদি কোনও সংখ্যায় ভাগ করেন তবে আপনি দৃ as়ভাবে বলছেন যে এটি শূন্য নয়। জমিগুলি বের করুন এবং সমস্ত ক্র্যাশ অবস্থানগুলি অন্তর্ভুক্ত। আসল সমস্যাটি সাবসিস্টেমগুলিকে ক্র্যাশ করতে এবং একটি ওয়াচডগের মাধ্যমে পুনরায় চালু করার জন্য প্রোগ্রামটি কাঠামোগত নয়।
রব

5
assert ref != null;if (ref == null) throw new IllegalArgumentException();মিথ্যা হতে পারে এমন পূর্বশর্তগুলির জন্য আপনার প্রথমটি ব্যবহার করা উচিত নয় এর চেয়ে আলাদা । আপনাকে assertএমন জিনিসগুলির জন্য ব্যবহার করতে হবে যা ভুল হতে পারে না । উদাহরণস্বরূপ, int i = -1 * someNumber; i = i * i;পরে লোকদের iইতিবাচক মনে করিয়ে দেওয়ার জন্যassert i > 0;
ক্যাপ্টেন ম্যান

1
"প্রকৃতপক্ষে, সবচেয়ে খারাপটি ঘটে যখন কোডটি এমন কিছুর কারণ হিসাবে ক্র্যাশ হয় যা দৃ .়বিশ্বাস নয় If যদি কোডটি পরে অবশ্যই 100% সম্ভাব্যতার সাথে ক্র্যাশ হয়ে যায়, তবে অবশ্যই দাবীটি অবশ্যই অবশ্যই সেখানে থাকবে" " - এটি একটি মিথ্যা বৈপরীত্য.
রব গ্রান্ট

2
@ রবার্টগ্রান্ট: অনেক প্রোগ্রামের জন্য ক্র্যাশ হওয়া সবচেয়ে খারাপ ঘটনা থেকে অনেক দূরে। কোনও বিল্ডিং বা ব্রিজ ডিজাইনের গতিবেগ যাচাই করার কথা, এমন কোনও প্রোগ্রামের জন্য, ভুলভাবে জানাচ্ছেন যে কোনও ডিজাইনের শব্দটি এটি সবচেয়ে খারাপ কাজ সম্পর্কেই হতে পারে। বাইরের বিশ্বের কাছে উন্মুক্ত অথচ গোপনীয় ডেটাতে কেবলমাত্র পঠনযোগ্য অ্যাক্সেস রয়েছে এমন কোনও প্রোগ্রামের জন্য, তথ্যটি ফাঁস করে দেওয়া প্রোগ্রামটি যে কোনও কিছু করতে পারে তার চেয়ে খারাপ হতে পারে। কারণটির কোনও অর্থবহ ইঙ্গিত না দিয়ে ক্র্যাশ হওয়া ধারণাটি "সবচেয়ে খারাপ যেটি ঘটতে পারে" তা অনেক বেশি বিপদকে উপেক্ষা করে।
supercat

@ সুপের্যাট আমি যে মন্তব্যটি উদ্ধৃত করছি তার সাথে আমি একমত নই।
রব গ্রান্ট

21

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

এটি বলেছে যে, একটি ক্ষেত্রে আমি প্রযোজনায় দৃser়তা ফিরিয়ে আনব: আমরা যদি পরীক্ষার পরিবেশে পুনরুত্পাদনযোগ্য বাগের মুখোমুখি হই যে পরীক্ষার পরিবেশে আমাদের পুনরুত্পাদন করা খুব কঠিন সময় হয়, তবে বাগটি পুনরুত্পাদন করতে সহায়ক হতে পারে উত্পাদনে, তারা দরকারী তথ্য সরবরাহ করে কিনা তা দেখার জন্য।

আরও আকর্ষণীয় প্রশ্ন হ'ল: আপনার পরীক্ষার পর্যায়ে, আপনি কখন দৃ as়তা বন্ধ করবেন?


4
আমি মনে করি যে দাবিগুলি কখনই উত্পাদন কোডের অন্তর্ভুক্ত করা উচিত নয়। দাবিগুলি ত্রুটি নয়, তারা বিকাশকারীদের জন্য ডিজাইন করা হয়েছে। জোর কেবল পরীক্ষার কোডে থাকতে হবে। অ্যাপ্লিকেশন ক্রাশ হ'ল কারণ এবং দৃ as়ভাবে অগ্রহণযোগ্য এবং failড়ু বিকাশ ব্যর্থ। বিকাশকারীদের ত্রুটিপূর্ণভাবে পরিচালনা করতে বিকাশকারীদের অতিরিক্ত মাইল যেতে হবে।
iksnae

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

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

দৃsert় বিবৃতিটির পুরো বিষয়টি হ'ল আপনি চেকগুলি চালু বা বন্ধ করতে পারেন। আপনি যদি এগুলিকে উত্পাদনে রেখে দেন তবে কেন জোড় স্টেটমেন্টটি ব্যবহার করবেন?
মিগুয়েলমুনোজ

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

16

জোর দেওয়া উচিত নয় প্রোডাকশন কোডে থাকা । কোনও নির্দিষ্ট দাবি যদি মনে হয় এটি প্রোডাকশন কোডে কার্যকর হতে পারে তবে এটি দৃ an়তা হওয়া উচিত নয়; এটি একটি রান টাইম এরর চেক অর্থাত কিছু ভালো কোডেড হওয়া উচিত: if( condition != expected ) throw exception

'দৃser়তা' শব্দটির অর্থ এসেছে "একটি উন্নয়ন-সময়-সময় যাচাই যা হবে না মাঠে সঞ্চালিত ।"

যদি আপনি এই ভাবনা শুরু করেন যে দৃ .় বক্তব্যগুলি মাঠে নামতে পারে তবে আপনি অনিবার্যভাবে অন্যান্য বিপজ্জনক চিন্তাভাবনা করাও শুরু করবেন, যেমন ভেবে যে কোনও প্রদত্ত বক্তব্য সত্যই মূল্যবান কিনা। এমন কোনও দাবি নেই যা তৈরি করার পক্ষে উপযুক্ত নয়। আপনার নিজেকে কখনই জিজ্ঞাসা করা উচিত নয় "আমি কি এটি চাপিয়ে দেই নাকি?" আপনি কেবল নিজেকে জিজ্ঞাসা করা উচিত "আমি কি জোর দেওয়া ভুলে গেছি এমন কিছু আছে?"


6

প্রোফাইলিং যদি না দেখায় যে এই দাবিগুলি পারফরম্যান্সে সমস্যা সৃষ্টি করে, আমি বলি তাদেরও প্রযোজনা মুক্তিতে থাকা উচিত।

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


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

5

আমার সি ++ এ আমি প্রয়োজনীয়তা (এক্স) সংজ্ঞায়িত করেছি যা দৃsert় (x) এর মতো এটি ব্যতীত যদি দাবিটি কোনও রিলিজ বিল্ডে ব্যর্থ হয় তবে এটি ব্যতিক্রম ছুঁড়ে দেয়।

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

তারা বলেছে যে এগুলি ব্যবহারকারীদের শেষ বার্তাগুলি প্রদর্শন করা উচিত নয় কারণ তারা সেগুলি বুঝতে পারে না। তাই? শেষ ব্যবহারকারীরা আপনাকে স্ক্রিন শট বা ত্রুটি বার্তার কিছু পাঠ্য সহ ইমেল প্রেরণ করতে পারে, যা আপনাকে ডিবাগ করতে সহায়তা করে। যদি ব্যবহারকারী কেবল "এটি ক্র্যাশ হয়ে গেছে" বলে, আপনার এটি ঠিক করার ক্ষমতা কম। নিজের থেকে দৃ -়-ব্যর্থতা বার্তা ইন্টারনেটে স্বয়ংক্রিয়ভাবে প্রেরণ করা ভাল, তবে এটি কেবল তখনই কার্যকর হয় যখন ব্যবহারকারীর ইন্টারনেট অ্যাক্সেস থাকে এবং আপনি যদি তাদের অনুমতি নিতে পারেন।


তারা আরও বলেছে যে হ্যাকারদের কাছে আপনার সেই বার্তা যুক্ত করা উচিত নয় কারণ তারা ব্রেক ইন করার মূল্যবান সংকেত
ডেভওয়ালি

4

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


2

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

কিছু ব্যতিক্রম রয়েছে - উদাহরণস্বরূপ, পিএইচপি আপনাকে দৃ fail় ব্যর্থতার জন্য একটি কাস্টম হ্যান্ডলার তৈরি করতে দেয় যাতে আপনি কেবল প্রস্থান করার পরিবর্তে কাস্টম ত্রুটিগুলি প্রদর্শন করতে পারেন, বিস্তারিত লগিং করতে পারেন।


2

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

যেহেতু এটি একটি ডাটাবেস সিস্টেম এবং আমরা সম্ভাব্য এন্টারপ্রাইজ-সমালোচনামূলক ডেটা সংরক্ষণ করছি, আমরা দূষিত ডেটা এড়াতে যা কিছু করতে পারি তা করি। যদি কোনও শর্ত থাকে তবে তা হতে পারে আমাদের ভুল ডেটা সংরক্ষণের কারণ পারে তবে আমরা তাত্ক্ষণিকভাবে সমস্ত লেনদেনকে রোলব্যাক করব, এবং সার্ভারটি বন্ধ করব।

এটি বলার পরে, আমরা পারফরম্যান্স-সমালোচনামূলক রুটিনগুলিতে উত্পাদন দৃ avoid়তা এড়াতে চেষ্টা করি।


5
আমি আপনার "উত্পাদন দৃser়তা" একটি "ব্যতিক্রম" বলব এবং এটিকে কোড করব।
ডেভওয়ালি

1
আপনি সম্ভবত ঠিক বলেছেন তবে পণ্যটি মূলত সিটিতে লেখা হয়েছিল এমনকি আমরা যখন এটি কিছু প্ল্যাটফর্মে আমরা ব্যবহৃত প্রায়শই সংকলকগুলিকে সি ++ হিসাবে রূপান্তরিত করি তখনও ব্যতিক্রমগুলি যথাযথভাবে সমর্থন করে না। পুরানো কোডটির বেশিরভাগটি সি ++ এ নতুন করে লেখা হয়নি তাই এই দাবিগুলি এখনও ব্যবহৃত হয়।
গ্রীম পেরো

1

আমি ইন-লাইন ইউনিট পরীক্ষার হিসাবে দৃ see়পদগুলি দেখছি। বিকাশের সময় দ্রুত পরীক্ষার জন্য দরকারী, তবে শেষ পর্যন্ত সেই দৃ as়তাগুলি ইউনিট পরীক্ষায় বাহ্যিকভাবে পরীক্ষা করার জন্য পুনরুদ্ধার করা উচিত।


দৃsert়তা: একটি সত্য বা বিশ্বাসের বিবরণ দিন। এগুলি পরীক্ষার জন্য নয় (কেবল) তবে আপনি যা সত্য বলে মনে করছেন তা বোঝানোর জন্য (যেমন, আপনার অনুমানগুলি), যাতে কোনও কারণে যদি আপনার অনুমানগুলি ভুল হয় তবে আপনার প্রোগ্রামটি অব্যাহত থাকবে না। উদাহরণস্বরূপ, এটি দৃser়তার বৈধ ব্যবহার: প্রতিস্থাপন (পাও (1,0) <1)। ত্রুটি পরীক্ষা করার জন্য এটি সত্যিই উপযুক্ত জায়গা নয়, কারণ এটি যদি সত্য না হয় তবে আধুনিক গণিতের সমস্তই ভুল, এবং ... ভাল, আপনি কীভাবে এটি পরিচালনা করতে শুরু করবেন? ভুল অনুমান পরিচালনা করা প্রোগ্রামের আওতার বাইরে; আপনি বিশ্বাসের উপর এটি গ্রহণ। তবে আপনি যাচাই করুন।

1

সুযোগসুবিধে থাকা সমস্ত ত্রুটিগুলি হ্যান্ডেল করা ভাল বলে মনে হচ্ছে এবং আমরা যে সত্য বলে আসছি তা অনুমানের জন্য দৃ as়পদগুলি ব্যবহার করি।

অর্থাত্, যদি আপনার প্রোগ্রামটি কোনও ফাইল খোলার / পড়া / বন্ধ করতে থাকে, তবে ফাইলটি খুলতে না পারা সুযোগের মধ্যে রয়েছে - এটি একটি আসল সম্ভাবনা, যা অন্য কথায় উপেক্ষা করা অবহেলা be সুতরাং, এর সাথে সম্পর্কিত ত্রুটি-চেকিং কোড থাকা উচিত।

তবে, আসুন আমরা বলি যে আপনার ফপেন () সর্বদা একটি বৈধ, খোলা ফাইল হ্যান্ডেল ফেরত হিসাবে নথিভুক্ত। আপনি ফাইলটি খুলুন এবং এটি আপনার পঠন ফাইলে () ফাংশনে সরিয়ে দিন।

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

সুতরাং, পঠিত ফাইল () {প্রতিস্থাপন (fptr! = NULL); .. this এক্ষেত্রে উপযুক্ত, যদিও পুরোপুরি বর্ধিত ত্রুটি হ্যান্ডলিং করা হয় না (আসলে ফাইলটি পড়ার ক্ষেত্রে যে কোনও উপায়ে হ্যান্ডলিং ব্যবস্থার প্রয়োজন হবে তা উপেক্ষা করে)।

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


1

ধরুন কোনও কোডের টুকরোটি উত্পাদন অবস্থায় রয়েছে এবং এটি এমন একটি বক্তব্যকে আঘাত করে যা সাধারণত ট্রিগার হয়। দৃ়তা একটি বাগ খুঁজে পেয়েছে! এটি না থাকলে ব্যতীত দৃser়তা বন্ধ রয়েছে।

তাহলে এখন কি হবে? হয় প্রোগ্রামটি (1) সমস্যার উত্স থেকে আরও সরানো সময়ে একটি অপ্রয়োজনীয় উপায়ে ক্রাশ হবে, বা (২) আনন্দের সাথে সম্পন্ন হতে চালাবে, সম্ভবত ভুল ফলাফল প্রদান করবে।

কোনও দৃশ্যই আমন্ত্রন দিচ্ছে না। এমনকি উত্পাদনে সক্রিয় তদন্তগুলি ছেড়ে দিন।


0

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

আমি একটি উদাহরণ দেয়

file = create-some-file();
_throwExceptionIf( file.exists() == false, "FILE DOES NOT EXIST");

বিরুদ্ধে

file = create-some-file();
ASSERT(file.exists());

আবেদনটি কীভাবে দাবিটি পরিচালনা করবে? আমি try catchমারাত্মক ত্রুটিগুলি মোকাবেলার পুরানো পদ্ধতিটি পছন্দ করি ।


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

0

বেশিরভাগ সময়, যখন আমি জাভাতে (দৃ .় মূলশব্দ) দৃ as়তা ব্যবহার করি তখন আমি স্বয়ংক্রিয়ভাবে পরে কিছু উত্পাদন কোড যুক্ত করি। কেস অনুসারে, এটি লগিং বার্তা, একটি ব্যতিক্রম ... বা কিছুই হতে পারে।

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


0

সংস্থানগুলি ত্রুটি নয় এবং ত্রুটি হিসাবে পরিচালনা করা উচিত নয়। যখন একটি দৃ thrown়তা নিক্ষেপ করা হয়, এর অর্থ হ'ল আপনার কোডে বা বিকল্পভাবে কোডটিতে কোড কোডে একটি বাগ রয়েছে।

কয়েকটি পয়েন্ট প্রকাশনা কোডে গবেষকেরা সক্রিয় এড়াতে হল: 1. আপনি আপনার শেষ ব্যবহারকারীর মত একটি বার্তা দেখতে চাই না "কথন ব্যর্থ MyPrivateClass.cpp লাইন 147. শেষ ব্যবহারকারী না আপনি ইঞ্জিনিয়ার QA 2. কথন পারে। প্রভাব কর্মক্ষমতা

তবে, দৃ leave়তা দেওয়ার একটি দৃ strong় কারণ রয়েছে: সংযোজন কার্য সম্পাদন এবং সময়কে প্রভাবিত করতে পারে এবং দুঃখের বিষয় এটি কখনও কখনও গুরুত্বপূর্ণ (বিশেষত এমবেডেড সিস্টেমে)।

আমি প্রোডাকশন কোডটিতে দৃ .়তা রেখে দেওয়ার পক্ষে ভোট দেওয়ার প্রবণতা পোষণ করছি তবে নিশ্চিত হয়ে নিন যে এই প্রতিবেদনের মুদ্রণ আউটগুলি শেষ ব্যবহারকারীর সামনে না আসে।

~ Yitzik


না, দাবিগুলি অনুমান করা তথ্যের জন্য। যদি আমাদের কোডটি ২ returns ফেরত আসে যখন এটি ধরে নেওয়া হয় যে এটি সর্বদা 25 ফেরত আসবে, মহাবিশ্ব সম্পর্কে আমাদের শারীরিক অনুমানগুলিতে সমস্যাটিও একটি সমস্যা হতে পারে: সম্ভবত এই দুটি বিট কম্পিউটিংয়ের ইতিহাসে প্রথমবারের জন্য 5 টি সম্ভাব্য মানটিতে চলে গেছে। আপনার কোডটি যে অনুমানের জন্য লেখা হয়েছিল তার অধীনে এখনও এটি পরিচালনা করছে তা নিশ্চিত করার জন্য দৃ as়তা রয়েছে। যদি পদার্থবিজ্ঞান উইন্ডোটির বাইরে চলে যায়, আপনার কোডটি লক্ষ্য করা উচিত, ড্রাইভটি একা ছেড়ে এগিয়ে চলার সময় ছেড়ে দিন;) তবে হ্যাঁ, কোডটিতে এটি কোনও ত্রুটি নয় এবং আপনি কী ধরণের ত্রুটি পরিচালনা করতে পারেন?

আমার আমার মতামত পরিমার্জন করতে অনুমতি দিন: 1. দৃ our়তা আমাদের অনুমানগুলি পরীক্ষা করে দেখুন। যদি আমাদের অনুমানগুলি আমাদের ভুল হয়, এর অর্থ হল আমাদের কোডে একটি বাগ রয়েছে। ২. আমাদের কোডটিতে আমাদের কোডের ব্যবহারের উপর চাপ দেওয়া উচিত নয়। অর্থাত্ কোনও ফাংশন যদি দৃ as়তার সাথে ব্যর্থ হয় না তবে যদি ব্যবহারকারী থেকে ইনপুটটিতে কিছু ভুল হয়। আমরা ত্রুটি ফিরিয়ে দেব এবং ব্যবহারকারীর পরিচালনা করা উচিত (তিনি সাফল্য জোর দিয়ে বলতে পারেন) ৩. আমি উত্পাদনে দৃser়তা রেখে যাওয়া পছন্দ করি - তবে আচরণ সম্ভবত পরিবর্তিত হবে। আমি সম্মত হই যে কোনও উপযুক্ত ত্রুটি পরিচালনা করা নেই। ব্যর্থ দৃ as়তা == বাগ .. তবে সিস্টেমটি থামাতে এবং পুনরায় বুটের অপেক্ষা না করে পুনরায় আরম্ভ করতে পারে।
ইয়েশক ইয়ারম

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

-8

একটি দৃ .়তা ত্রুটি, খাঁটি এবং সহজ এবং তাই এটির মতো পরিচালনা করা উচিত।

যেহেতু একটি ত্রুটি রিলিজ মোডে পরিচালনা করা উচিত তখন আপনার সত্যিকারের দৃ .়তার প্রয়োজন নেই।

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


2
শর্তসাপেক্ষ ব্রেকআপপয়েন্ট হিসাবে জাল ব্যবহার করা বেশ কয়েকটি কারণে সত্যই বিরক্তিকর। সর্বাধিক গুরুত্বপূর্ণ একটি হ'ল এই দাবী দলের অন্যান্য বিকাশকারীকে বিভ্রান্ত করে - তারা কীভাবে জানবে যে এই ত্রুটিটি যখন বহিষ্কার করা হয় বা এমন হয় যে কেউ কোডটিতে তার শর্তযুক্ত ব্রেকপয়েন্ট রেখে গেছে?
লেগো

কোডগুলিতে প্রথম স্থানে যদি দাবী না করা হত না। এবং যদি আপনি কোডটি নিরীক্ষণের জন্য ব্যবহার করে থাকেন তবে কেবলমাত্র আপনি সেগুলি দেখতে পাবেন (যদি না আপনি সেগুলি উত্স ট্রিতে পরীক্ষা না করে)। আমি এমন জায়গাগুলিতে কাজ করেছি যা ব্যবহারিকভাবে সমস্ত কিছুর জন্য দাবী রাখে। প্রোগ্রামটির শুরুতে প্রায় times০ বার ক্লিক করার কারণে সহায়তা ডকুমেন্টেশন সার্ভারটি উপলভ্য নয় খুব দ্রুত ক্লান্ত হয়ে পড়ে।
গ্রাহাম.রিডস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.