আমি একটি অবস্থান জানাতে কত মধ্যে নই আরো গবেষণা বিষয়ে কাজ করা উচিত, কিন্তু যে আমি তোমাকে বলতে পারি হয় গবেষণা করা হচ্ছে, উদাহরণস্বরূপ Verisoft XT জার্মান সরকারের অর্থায়নে প্রোগ্রাম।
আপনি যে ধারণাগুলি সন্ধান করছেন বলে আমি মনে করি তাদের আনুষ্ঠানিক যাচাইকরণ এবং চুক্তি ভিত্তিক প্রোগ্রামিং বলা হয় , যেখানে প্রথমটি প্রোগ্রামার-বান্ধব পদ্ধতি doing চুক্তি ভিত্তিক প্রোগ্রামিংয়ে আপনি প্রথমে আপনার কোডটি স্বাভাবিক হিসাবে লিখেন এবং তারপরে কোডে তথাকথিত চুক্তি সন্নিবেশ করান । সহজেই ব্যবহারযোগ্য ভাষা যা এই দৃষ্টান্তের উপর ভিত্তি করে মাইক্রোসফ্ট রিসার্চ দ্বারা স্পেস # , এবং কার্যকরীভাবে অনুরূপ তবে সামান্য কম সুন্দর কোড চুক্তি এক্স # এর জন্য এক্সটেনশন যা আপনি উভয়ই অনলাইনে চেষ্টা করতে পারেন (তাদের অন্যান্য ভাষার জন্যও একই সরঞ্জাম রয়েছে, চেক আউটফোন দেখুন )। আপনি উল্লেখ করেছেন "রেট টাইপের সাথে পরিসর" কোনও ফাংশনে দুটি চুক্তি দ্বারা প্রতিফলিত হবে:
Contract.Requires(-3 <= a && a <= 24);
Contract.Requires( 3 <= b && b <= 10);
আপনি যদি সেই ফাংশনটি কল করতে চান তবে আপনাকে এই পরামিতিগুলি ব্যবহার করতে হবে যা এই মানদণ্ডগুলি পূরণ করার জন্য নিশ্চিত করা হয়েছে, অথবা আপনি একটি সংকলনের সময় ত্রুটি পান। উপরেরটি খুব সাধারণ চুক্তি, আপনি ভেরিয়েবল বা এক্সপশন এবং তাদের সম্পর্ক যা সম্পর্কে আপনি ভাবতে পারেন সে সম্পর্কে প্রায় কোনও অনুমান বা প্রয়োজনীয়তা সন্নিবেশ করতে পারেন এবং সংকলকটি পরীক্ষা করে দেখবে যে প্রতিটি প্রয়োজনীয়তা হয় কোনও অনুমান বা নিশ্চিত হওয়া যায় এমন কিছু দ্বারা আবৃত, অর্থাৎ প্রাপ্ত অনুমান থেকে। এই কারণেই যেখানে নামটি এসেছে: কলি প্রয়োজনীয়তা তৈরি করে , কলার নিশ্চিত করে যে এটি পূরণ করা হয় - যেমন কোনও ব্যবসায় চুক্তিতে in
পি( এক্স1, এক্স2, । । । , এক্সএন)এনপিব্যবহৃত হয়. সিএস দিক থেকে, এই দুটি প্রক্রিয়াটির গুরুত্বপূর্ণ অঙ্গ - বিবেচনা করা তত্ত্বগুলির উপর নির্ভর করে যাচাইকরণের শর্ত তৈরি করা জটিল এবং এসএমটি হ'ল একটি এনপি-সম্পূর্ণ বা অনস্বীকার্য সমস্যা problem এমনকি এসএমটি সলভারদের জন্য একটি প্রতিযোগিতা রয়েছে, সুতরাং এটি সম্পর্কে অবশ্যই কিছু গবেষণা চলে। অতিরিক্ত হিসাবে, রাষ্ট্রীয় স্থান গণনা, প্রতীকী মডেল চেকিং, সীমাবদ্ধ মডেল চেকিং এবং আরও অনেক কিছু যা গবেষণা করা হচ্ছে তার মতো প্রথাগত যাচাইকরণের জন্য এসএমটি ব্যবহারের বিকল্প পন্থা রয়েছে, যদিও বর্তমানে এসএমটি সবচেয়ে "আধুনিক" পদ্ধতির হয়।
সাধারণ ধারণার সীমা সম্পর্কে:
- যেমন আগেই বলা হয়েছে, প্রোগ্রামটির যথার্থতা প্রমাণ করা একটি গণনামূলকভাবে কঠিন সমস্যা, সুতরাং এটি সম্ভব হতে পারে যে চুক্তিগুলির সাথে কোনও প্রোগ্রামের সংকলনের সময় চেক (বা নির্দিষ্টকরণের অন্য কোনও রূপ) সত্যিই দীর্ঘ সময় নেয় বা এমনকি অসম্ভবও হতে পারে। বেশিরভাগ সময় ভালভাবে কাজ করে এমন হিউরিস্টিক প্রয়োগ করা এ সম্পর্কে সেরা যা করা সম্ভব।
- আরো আপনি আপনার প্রোগ্রাম সম্পর্কে উল্লেখ, উচ্চ নির্দেশের মধ্যে বাগ থাকার সম্ভাবনা পায় নিজেই । এটি মিথ্যা ইতিবাচক দিকে পরিচালিত করতে পারে (সমস্ত কিছু বাগ-মুক্ত থাকা সত্ত্বেও সংকলনের সময় চেক ব্যর্থ হয়) বা নিরাপদে থাকার ভ্রান্ত ছাপ, যদিও আপনার প্রোগ্রামে এখনও বাগ রয়েছে।
- চুক্তি বা স্পেসিফিকেশন লেখা সত্যিই ক্লান্তিকর কাজ এবং বেশিরভাগ প্রোগ্রামার এটি করতে খুব অলস হয়। কোডের চুক্তি সহ সর্বত্র সি # প্রোগ্রাম লেখার চেষ্টা করুন, কিছুক্ষণ পরে আপনি ভাববেন "আসুন, এটি কি সত্যই প্রয়োজনীয়?" এ কারণেই আনুষ্ঠানিক যাচাইকরণটি সাধারণত হার্ডওয়্যার ডিজাইন এবং সুরক্ষা সমালোচনামূলক সিস্টেমে যেমন সফ্টওয়্যার নিয়ন্ত্রণকারী বিমান বা স্বয়ংচালিত হিসাবে ব্যবহৃত হয়।
একটি উল্লেখযোগ্য জিনিস যা উপরের ব্যাখ্যাটি পুরোপুরি ফিট করে না তা হ'ল "ইমপ্লিপট কমপ্লেক্সিটি থিওরি" নামে একটি ক্ষেত্র, উদাহরণস্বরূপ এই কাগজটি । এটির উদ্দেশ্য হল প্রোগ্রামিং ভাষাগুলি বৈশিষ্ট্যযুক্ত করা যেখানে আপনি যে প্রতিটি প্রোগ্রাম লিখতে পারেন তা একটি নির্দিষ্ট জটিল শ্রেণিতে পড়ে, উদাহরণস্বরূপ পি such এই ভাষায়, আপনার লেখা প্রতিটি প্রোগ্রাম স্বয়ংক্রিয়ভাবে বহুগঠিত রানটাইম হতে "নিশ্চিত" হয়, যা "চেক" করা যেতে পারে সংকলন সময়ে কেবল প্রোগ্রাম সংকলন করে। আমি এই গবেষণার ব্যবহারিকভাবে ব্যবহারযোগ্য কোনও ফল জানি না, তবে আমি বিশেষজ্ঞ হতেও অনেক দূরে am