আচ্ছা ... হ্যা আসলে, যদি প্রত্যেক পথ "মাধ্যমে" প্রোগ্রাম পরীক্ষা করা হয়। তবে তার মানে হল যে সমস্ত সম্ভাব্য রাজ্যের সমস্ত স্থানের মাধ্যমে সমস্ত সম্ভাব্য রাজ্যের প্রোগ্রামটি থাকতে পারে সমস্ত ভেরিয়েবল সহ have এমনকি খুব সাধারণ স্ট্যাটিক্যালি সংকলিত প্রোগ্রামের জন্য - বলুন, একটি পুরানো ফোর্টরান নম্বর ক্রাঙ্কার - এটি সম্ভব নয়, যদিও এটি কমপক্ষে কল্পনাযোগ্যও হতে পারে: যদি আপনার কেবল দুটি পূর্ণসংখ্যের ভেরিয়েবল থাকে তবে আপনি মূলত পয়েন্টগুলি সংযোগ করার সমস্ত সম্ভাব্য উপায় নিয়ে কাজ করছেন একটি দ্বিমাত্রিক গ্রিড; এটি দেখতে অনেকটা ট্র্যাভেলিং সেলসম্যানের মতো লাগে। জন্য এন যেমন ভেরিয়েবল, আপনি একটি সঙ্গে লেনদেন করছেন এন -dimensional স্থান, তাই কোনো বাস্তব প্রোগ্রামের জন্য, কাজের সম্পূর্ণরূপে untractable হয়।
খারাপ: গুরুতর কাপড়, আপনি আছে না শুধু আদিম ভেরিয়েবল একটি নির্দিষ্ট নম্বর, কিন্তু ফাংশন কল মাছি উপর ভেরিয়েবল তৈরি, অথবা একটি টুরিং-সম্পূর্ণ ভাষায় সম্ভব হিসাবে পরিবর্তনশীল আকার ভেরিয়েবল ... বা যে মত কিছু আছে। এটি রাষ্ট্রের স্থানটিকে অসীম-মাত্রিক করে তোলে, পূর্ণ কভারেজের সমস্ত আশাকে ছিন্নবিচ্ছিন্ন করে তোলে, এমনকি অযৌক্তিকভাবে শক্তিশালী পরীক্ষার সরঞ্জাম সরবরাহ করে।
বলেছিল ... আসলে বিষয়গুলি এতটা নির্লজ্জ নয়। এটা তোলে হয় করা সম্ভব প্রমান কর সঠিক হতে সমগ্র প্রোগ্রাম, কিন্তু আপনি একটি কয়েক ধারনা ছেড়ে দিতে হবে করতে হবে।
প্রথম: এটি একটি ঘোষিত ল্যাঙ্গুঞ্জে স্যুইচ করার জন্য অত্যন্ত পরামর্শ দেওয়া হয়। অপরিহার্য ভাষাগুলি, কোনও কারণে, সর্বদাই সর্বাধিক জনপ্রিয় হয়ে উঠেছে, তবে তারা যেভাবে অ্যালগরিদমকে বাস্তব-বিশ্বের মিথস্ক্রিয়াগুলির সাথে একত্রে মিশ্রিত করে তা "সঠিক" দ্বারা আপনি কী বোঝাতে চেয়েছেন তা এমনকি চূড়ান্ত করে তোলে ।
খাঁটি কার্যকরী প্রোগ্রামিং ভাষাগুলিতে অনেক সহজ : এগুলি গাণিতিক ক্রিয়াকলাপগুলির আসল আকর্ষণীয় বৈশিষ্ট্যগুলির মধ্যে এবং স্পষ্ট সত্যিকারের বিশ্বের মিথস্ক্রিয়াগুলির মধ্যে স্পষ্ট পার্থক্য রয়েছে যা সম্পর্কে আপনি সত্যিই কিছু বলতে পারবেন না। ফাংশনগুলির জন্য, "সঠিক আচরণ" নির্দিষ্ট করা খুব সহজ: যদি সমস্ত সম্ভাব্য ইনপুটগুলির জন্য (যুক্তির ধরণগুলি থেকে) সম্পর্কিত কাঙ্ক্ষিত ফলাফলটি প্রকাশিত হয় তবে ফাংশনটি সঠিকভাবে আচরণ করে।
এখন, আপনি বলছেন যে এটি এখনও অবিচল রয়েছে ... সর্বোপরি, সমস্ত সম্ভাব্য যুক্তির স্থানটিও সাধারণভাবে অসীম-মাত্রিক। সত্য - যদিও একটি একক ক্রিয়াকলাপের জন্য, এমনকি নির্বাক কভারেজ টেস্টিং আপনাকে একটি অত্যাবশ্যক প্রোগ্রামের জন্য আশা করতে পারে তার চেয়ে বেশি এগিয়ে নিয়ে যায়! তবে, একটি অবিশ্বাস্য শক্তিশালী সরঞ্জাম রয়েছে যা গেমটি পরিবর্তন করে: সর্বজনীন কোয়ান্টিফিকেশন / প্যারামেট্রিক পলিমারফিজম । মূলত, এটি আপনাকে খুব সাধারণ ধরণের ডেটাতে ফাংশন লিখতে দেয়, এই গ্যারান্টি সহ যে এটি যদি ডেটার সাধারণ উদাহরণের জন্য কাজ করে তবে এটি কোনও সম্ভাব্য ইনপুটটির পক্ষে কাজ করবে।
অন্তত তাত্ত্বিকভাবে। সত্যিকারের এত সাধারণ যে সঠিকরূপে আপনি সম্পূর্ণরূপে এটি প্রমাণ করতে পারেন তা সন্ধান করা সহজ নয় - সাধারণত আপনার নির্ভরশীল-টাইপযুক্ত ভাষার প্রয়োজন এবং এগুলি ব্যবহার করা বরং কঠিন হয়ে পড়ে। তবে প্যারাম্যাট্রিক পলিমারফিজমে একা কার্যকরী শৈলীতে লেখাই ইতিমধ্যে আপনার "সুরক্ষা স্তর "টিকে প্রচুর পরিমাণে বাড়িয়ে তোলে - আপনি অগত্যা সমস্ত বাগ খুঁজে পাবেন না, তবে আপনাকে সেগুলি বেশ ভালভাবে লুকিয়ে রাখতে হবে যাতে সংকলক সেগুলিকে স্পষ্ট করে না!