কোডের সংশোধন প্রমাণগুলি কি কখনও মূলধারায় যাবে? [বন্ধ]


14

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

উত্তর:


8

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

এছাড়াও চুক্তি করার জন্য প্রোগ্রামিং সহায়ক হতে পারে। দেখুন মাইক্রোসফট কোড চুক্তি


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

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

14

সর্বাধিক তুচ্ছ প্রোগ্রামগুলি All

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

এখানে আমি এই বিষয়ে একটি সুন্দর নিবন্ধ পেয়েছি:

http://www.encyclopedia.com/doc/1O11-programcorrectnessproof.html


ডান - যে কোনও প্রোগ্রামিং প্রকল্পের জন্য সমস্যাটির অনানুষ্ঠানিক বর্ণনা থেকে একটি আনুষ্ঠানিকভাবে (সাধারণত, আজ, একটি প্রোগ্রাম আকারে) রূপান্তর ঘটে এবং তা দূরে যায় না।
ডেভিড থর্নলি

astree.ens.fr অ্যাস্ট্রির শিল্প অ্যাপ্লিকেশনগুলি এখানে দেখুন
zw324

@ জিয়াওউই: এই জাতীয় সরঞ্জামগুলি সহায়ক, তবে তারা কেবল কিছু প্রথাগত ত্রুটি খুঁজে পায়, এর চেয়ে বেশি কিছু নয়। যদি কোনও এক-লাইনের প্রোগ্রামটি printf("1")সঠিক হয় বা না হয় (উদাহরণস্বরূপ, কারণ প্রয়োজনটি ছিল "1 থেকে 6 পর্যন্ত সমানভাবে বিতরণ করা এলোমেলো সংখ্যা মুদ্রণ করা") যেমন স্থির বিশ্লেষক সিদ্ধান্ত নিতে পারবেন না।
ডক ব্রাউন

10

আনুষ্ঠানিক প্রমাণগুলির সাথে সমস্যাটি হ'ল সমস্যাটি কেবলমাত্র একটি পদক্ষেপে সরিয়ে নিয়ে যায়।

কোনও প্রোগ্রাম সঠিক বলে বলা একটি প্রোগ্রামের যা করা উচিত তা করে বলে সমান। প্রোগ্রামটি কী করা উচিত তা আপনি কীভাবে সংজ্ঞায়িত করবেন? আপনি এটি নির্দিষ্ট করুন। এবং আপনি কীভাবে সংজ্ঞায়িত করবেন না যে প্রোগ্রামটি প্রান্তের ক্ষেত্রে কী করা উচিত যা স্পিকটি আবরণ করে না? ঠিক আছে, তাহলে আপনাকে আরও বিশদটি বিশদ করে তুলতে হবে।

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


2
এছাড়াও .. "উপরের কোডে বাগগুলি সম্পর্কে সাবধান থাকুন; আমি কেবল এটি সঠিক প্রমাণ করেছি, এটি চেষ্টা করে দেখিনি।" - ডোনাল্ড নুথ
ব্রেন্ডন

8

আনুষ্ঠানিক যাচাইকরণ অনেক দীর্ঘ হয়েছে তবে সাধারণত শিল্প / বহুল ব্যবহৃত সরঞ্জাম সর্বশেষ গবেষণার চেয়ে পিছিয়ে। এই দিকটিতে সাম্প্রতিক কিছু প্রচেষ্টা এখানে:

স্পেস # http://research.microsoft.com/en-us/projects/specsharp/ এটি সি # এর একটি এক্সটেনশান যা কোড চুক্তিগুলিকে সমর্থন করে (প্রাক / পোস্ট শর্ত এবং আক্রমণকারী) এবং বিভিন্ন ধরণের স্থির বিশ্লেষণ করতে এই চুক্তিগুলি ব্যবহার করতে পারে ।

অন্যান্য ভাষার যেমন জাভা জন্য জেএমএল এবং আইফেলের কাছে এটির মত একই প্রকল্প রয়েছে this

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

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


4

বিস্তৃত বিকাশকারী কাজ ছাড়া কোডটি স্বয়ংক্রিয়ভাবে প্রমাণ করার কোনও পদ্ধতি না উঠলে না।


অর্থনৈতিক যুক্তি বিবেচনা করুন: সম্ভবত সফ্টওয়্যার ত্রুটির কারণে অর্থ হারানোর চেয়ে বিকাশকারীদের যথার্থতার প্রমাণ সহ "সময় নষ্ট" করা ভাল।
আন্দ্রেস এফ।

আমি ফিশটাস্টারের সাথে একমত, যদি না এটি অনেক কম সংস্থান হয় নিবিড় নিয়মিত ব্যবসায়ের সফটওয়্যার কেবলমাত্র সেই স্তরের যথাযথতার জন্য সমর্থন / ব্যয় করে না is কোনও বন্দী শ্রোতাদের কাছে একটি এলওবি অ্যাপে মাঝে মাঝে বাগ রিপোর্ট সম্পর্কিত ব্যয়ের জন্য সর্বাধিক ব্যবসায়িক সুবিধা ডক্সগুলিতে একটি লাইন যুক্ত করে যা বলে যে "এটি করো না"
বিল

3

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

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

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


3

আমি এই প্রশ্নে হোঁচট খেয়েছি এবং আমি মনে করি যে এই লিঙ্কটি আকর্ষণীয় হতে পারে:

অ্যাস্ট্রির শিল্প অ্যাপ্লিকেশন

২০০৩ সালে ১৩০ কে-র বেশি লাইন কোডের সাথে এয়ারবাসের ব্যবহৃত সিস্টেমে আরটিইর অনুপস্থিতি প্রমাণিত করা খারাপ বলে মনে হয় না, এবং আমি আশ্চর্য হয়েছি যে সেখানে কেউ বলবে যে এটি বাস্তব বিশ্ব নয়।


2

না। এর জন্য প্রচলিত প্রবাদটি হ'ল "তত্ত্বের ক্ষেত্রে তত্ত্ব ও অনুশীলন একই রকম practice

একটি খুব সাধারণ উদাহরণ: টাইপস।

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

বিশেষত যদি প্রয়োজনীয়তা পরিবর্তন হয়, বা বাগ সংশোধন করার জন্য অ্যালগরিদম আপডেট করা হয় - আনুষ্ঠানিক প্রমাণটি মেয়াদ শেষ হওয়ার সম্ভাবনা থাকে, কোড মন্তব্যগুলি প্রায়শই পায় get


3
ভুল। কোনও ইউনিট পরীক্ষা সম্ভাব্য পরামিতিগুলির পুরো পরিসীমাটি কভার করতে সক্ষম হবে না। "ইউনিট পরীক্ষার জন্য" এইভাবে একটি সংকলক কল করুন, নিশ্চিত করুন যে কোনও পাস পরিবর্তন শব্দার্থবিজ্ঞান।
এসকে-যুক্তি

3
ইউনিট টেস্টিং পবিত্র
কান্ড

1
@ উইনস্টন ইওয়ার্ট, সেখানে যাচাই করা সংকলক রয়েছে (এবং আরও অনেক যাচাই করা এসেম্বেলার)। এবং সফ্টওয়্যারটির পরে হার্ডওয়্যারটি আনুষ্ঠানিকভাবে যাচাই করা হয়। এখানে দেখুন: gallium.inria.fr/~xleroy/publi/compiler-certif.pdf
এসকে-যুক্তি

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

1
@ উইনস্টন ইওয়ার্ট, নির্ভুলতার প্রমাণগুলি ব্যবহারিক এবং বাস্তব জীবনে ব্যাপকভাবে ব্যবহৃত হয়। যা খুব ব্যবহারিক নয় তা হ'ল আধুনিক মূলধারার ভাষা। আমি আশা করি তারা সকলেই মারা যাবেন, তাই ভবিষ্যতে নির্ভুলতার প্রমাণগুলির মান বাড়বে।
এসকে-যুক্তি

1

আমি মনে করি যে থামার সমস্যার কারণে নির্ভুলতার প্রমাণগুলিতে আরোপিত সীমাবদ্ধতা সংশোধন প্রমাণগুলি মূলধারার হয়ে উঠতে সবচেয়ে বড় বাধা হতে পারে।


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

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

1

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


সি ++ এর পার্শ্ব প্রতিক্রিয়াগুলি সম্পর্কে বিট দিয়ে আপনি কি কনস্টের সঠিকতার কথা উল্লেখ করছেন?
উইনস্টন ইওয়ার্ট

হ্যাঁ, কনস্ট + কনস্টের সদস্য ফাংশন। যদি আপনার সমস্ত সদস্যের কার্যকারিতা স্থির হয় তবে অবজেক্টগুলির সমস্ত ডেটা পরিবর্তনযোগ্য নয়।
tp1

আপনি যদি ব্যবহার করেন mutableবা ব্যবহার করেন তবে এগুলি এখনও পরিবর্তনযোগ্য const_cast। আপনি যে সংযোগটি সেখানে আঁকছেন তা আমি অবশ্যই দেখতে পাচ্ছি, তবে দুটি পদ্ধতির স্বাদ আমার কাছে বরং আলাদা বলে মনে হচ্ছে।
উইনস্টন ইওয়ার্ট

ঠিক আছে, এজন্য আপনাকে এটি ব্যবহার করার পছন্দ করতে হবে - এর চারপাশে যাওয়ার সবসময় উপায় রয়েছে। তবে গুরুত্বপূর্ণ বিটটি হ'ল কীভাবে কম্পাইলারগুলি এই অঞ্চলে সমস্যার জন্য চেক করা যায়।
tp1
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.