আমি কিছুক্ষণ ধরে এই সমস্যাটি নিয়ে ভাবছিলাম এবং অন্যান্য বিকাশকারীদের মতামত জানার জন্য আমি আগ্রহী।
আমি প্রোগ্রামিং একটি খুব রক্ষণাত্মক শৈলী আছে ঝোঁক। আমার সাধারণ ব্লক বা পদ্ধতিটি দেখতে এমন দেখাচ্ছে:
T foo(par1, par2, par3, ...)
{
// Check that all parameters are correct, return undefined (null)
// or throw exception if this is not the case.
// Compute and (possibly) return result.
}
এছাড়াও, গণনার সময়, আমি সমস্ত পয়েন্টারগুলিকে ডিফারেন্স করার আগে তাদের চেক করি। আমার ধারণাটি হ'ল, যদি কিছু বাগ থাকে এবং কিছু নূলে পয়েন্টার কোথাও উপস্থিত হয় তবে আমার প্রোগ্রামটির উচিত এটি সুন্দরভাবে পরিচালনা করা এবং কেবল গণনা চালিয়ে যাওয়া অস্বীকার করা উচিত। অবশ্যই এটি লগ বা অন্য কোনও প্রক্রিয়াতে ত্রুটি বার্তা নিয়ে সমস্যাটি অবহিত করতে পারে।
এটিকে আরও বিমূর্তভাবে বলতে গেলে আমার পন্থাটি
if all input is OK --> compute result
else --> do not compute result, notify problem
অন্যান্য বিকাশকারীরা, তাদের মধ্যে আমার কিছু সহকর্মী, অন্য কৌশল ব্যবহার করেন। উদাহরণস্বরূপ, তারা পয়েন্টারগুলি পরীক্ষা করে না। তারা ধরে নিয়েছে যে কোনও টুকরো কোডকে সঠিক ইনপুট দেওয়া উচিত এবং যদি ইনপুটটি ভুল হয় তবে এর জন্য দায়বদ্ধ হওয়া উচিত নয়। এছাড়াও, যদি কোনও নল পয়েন্টার ব্যতিক্রম প্রোগ্রামটি ক্র্যাশ করে তবে পরীক্ষার সময় একটি বাগ আরও সহজেই পাওয়া যায় এবং এটির স্থির হওয়ার আরও সম্ভাবনা থাকে।
আমার এটার উত্তরটি সাধারণত: তবে যদি পরীক্ষার সময় বাগটি পাওয়া না যায় এবং গ্রাহক যখন পণ্যটি ইতিমধ্যে ব্যবহার করছেন তখন উপস্থিত হয় তবে কী হবে? বাগটি নিজেই প্রকাশের জন্য পছন্দসই উপায় কী? এটি এমন কোনও প্রোগ্রাম হওয়া উচিত যা কোনও নির্দিষ্ট ক্রিয়া সম্পাদন করে না, তবে এখনও কাজ চালিয়ে যেতে পারে, বা ক্রাশ হয়ে যাওয়া এবং পুনরায় আরম্ভ করা দরকার এমন একটি প্রোগ্রাম?
সংক্ষেপিত
ভুল ইনপুট পরিচালনা করার জন্য দুটি পদ্ধতির মধ্যে কোনটি আপনাকে পরামর্শ দেবে?
Inconsistent input --> no action + notification
অথবা
Inconsistent input --> undefined behaviour or crash
সম্পাদন করা
উত্তর এবং পরামর্শের জন্য ধন্যবাদ। আমিও চুক্তি করে ডিজাইনের ভক্ত। তবে আমি যদি সেই ব্যক্তিকে বিশ্বাস করি যিনি কোড লিখেছেন আমার পদ্ধতিগুলিতে কল করে (সম্ভবত এটি নিজেই হয়ে থাকেন), তবুও বাগ থাকতে পারে এবং ভুল ইনপুট নিয়ে যেতে পারে। সুতরাং আমার পদ্ধতির অনুমান করা হয় না যে কোনও পদ্ধতিটি সঠিক ইনপুটটি পাস করেছে।
এছাড়াও, আমি সমস্যাটি ধরতে এবং এটি সম্পর্কে অবহিত করার জন্য একটি প্রক্রিয়া ব্যবহার করব। একটি ডেভলপমেন্ট সিস্টেমে এটি ব্যবহারকারীকে অবহিত করার জন্য একটি ডায়ালগ খুলতে পারে। কোনও প্রোডাকশন সিস্টেমে এটি লগতে কিছু তথ্য লিখবে। আমি মনে করি না যে অতিরিক্ত চেকগুলি পারফরম্যান্সের সমস্যার কারণ হতে পারে। আমি নিশ্চিত না যে উত্সাহগুলি যথেষ্ট কিনা, যদি তারা একটি উত্পাদন ব্যবস্থায় স্যুইচ করা থাকে: সম্ভবত এমন কিছু পরিস্থিতির উত্পাদনে ঘটবে যা পরীক্ষার সময় ঘটেছিল না।
যাইহোক, আমি সত্যিই আশ্চর্য হয়েছি যে অনেক লোক বিপরীত পদ্ধতির অনুসরণ করে: তারা অ্যাপ্লিকেশনটিকে "উদ্দেশ্যমূলকভাবে" ক্র্যাশ করে দেয় কারণ তারা মনে করেন যে এটি পরীক্ষার সময় বাগগুলি খুঁজে পেতে আরও সহজ করবে।