তাত্ত্বিকভাবে বাগ-মুক্ত প্রোগ্রাম


12

আমি প্রচুর নিবন্ধগুলি পড়েছি যার মধ্যে বলা আছে যে কোডটি বাগ-মুক্ত হতে পারে না এবং তারা এই উপপাদাগুলি সম্পর্কে কথা বলছে:

প্রকৃতপক্ষে রাইসের উপপাদ্যটি থামানো সমস্যার জড়িত বলে মনে হচ্ছে এবং থামানো সমস্যা গডেলের অসম্পূর্ণতা উপপাদ্যের সাথে ঘনিষ্ঠ সম্পর্ক relationship

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

এবং অবশ্যই বেশিরভাগ আলোচনায় টুরিং মেশিন সম্পর্কে কথা হয়েছিল। রৈখিক-চৌম্বিত অটোমেশন (বাস্তব কম্পিউটার) সম্পর্কে কী?


10
আমি বেশ নিশ্চিত যে এই অজগর প্রোগ্রামটি যা কিছু করার তাগিদে করে এবং আর কিছুই করে না: print "Hello, World!"... আপনি কি আরও কিছুটা পরিষ্কার হতে পারেন?
durron597

2
@ durron597: এই জাতীয় সফটওয়্যারটির জন্য কোনও বাজার রয়েছে? হ্যালো ওয়ার্ল্ড প্রিন্টার, ভার্সন ভার্সন? এখন আরও Hellos এবং আরও বিশ্বের সাথে?
জেনসজি

1
পছন্দ করুন একটি সহজ পর্যাপ্ত প্রোগ্রাম (যেমন একটি রুটিবোর্ডে তার ব্যবহার করে বলার পক্ষে) যথেষ্ট লেখা সম্ভব যে আপনি প্রক্রিয়াটির পুরো ক্ষেত্রটি একবারে দেখতে পাবেন যার কোনও বাগ নেই। আপনি আমার মূল বক্তব্যকে সম্বোধন না করেই আমার মন্তব্যের বিশদটিতে আক্রমণ করছেন, যা এমন কোনও অত্যন্ত সহজ প্রোগ্রাম লিখতে পারবেন যার কোনও বাগ নেই।
durron597

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

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

উত্তর:


18

এটি এত বেশি নয় যে প্রোগ্রামগুলি বাগ-মুক্ত হতে পারে না; আপনি যে প্রোগ্রামটি প্রমাণ করার চেষ্টা করছেন তা যদি ক্ষুদ্র হয় না তবে এটি প্রমাণ করা খুব কঠিন hard

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

নিম্নলিখিত ফাংশন বিবেচনা করুন:

int add(int a, int b) { return a + b; }

এই ফাংশনটিতে কী ভুল হতে পারে? আমি ইতিমধ্যে জানি আপনি কি ভাবছেন। ধরা যাক যে আমরা সমস্ত ঘাঁটি coveredেকে রেখেছি যেমন ওভারফ্লো পরীক্ষা করা ইত্যাদি a

LaunchMissiles();

পরিবর্তে?

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

আমি জানি আপনি কি ভাবছেন। "তবে আমি হার্ডওয়্যার নয়, সফ্টওয়্যার নিয়ে কথা বলছি।"

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

কেন? কারণ আপনার এই জিনিসগুলি প্রান্তের মামলা বলে।

এবং একবার আপনি এর সরলতার বাইরে গিয়ে কিছুটা হলেও return a + b, কোনও প্রোগ্রামের যথার্থতা প্রমাণ করা অসম্ভব কঠিন হয়ে পড়ে ।

আরও পড়া
তারা ডান স্টাফ
লেখেন আরিয়েন 5 বিস্ফোরণ


6
সম্পূর্ণ টাইপ-সঠিক ফাংশনটি বিবেচনা করুন: int add(int a, int b) { return a - b; }...
ডোনাল ফেলো

@DonalFellows: অবিকল কারণ আমি প্রায় Ariane তে 5. লিংক অন্তর্ভুক্ত কোনটি
রবার্ট হার্ভে

2
@ ডোনালফেলো - গাণিতিক চরিত্রায়ন সমস্যার সমাধান করে না, এটি কেবল এটিকে অন্যত্র সরিয়ে নিয়েছে। আপনি কীভাবে প্রমাণ করবেন যে গাণিতিক মডেলটি ক্লায়েন্টের প্রয়োজনের প্রতিনিধিত্ব করে?
mouviciel

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

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

12

প্রথমে আপনি কোন প্রসঙ্গে এটি আলোচনা করতে চান তা প্রতিষ্ঠিত করুন St স্ট্যাক এক্সচেঞ্জের প্রোগ্রামার প্রশ্নোত্তর পরামর্শ দেয় যে আপনি সম্ভবত তাত্ত্বিক ফলাফল এবং কম্পিউটার বিজ্ঞানের উপপাদাগুলির চেয়ে সরঞ্জাম / ভাষার বাস্তব জগতের অস্তিত্ব সম্পর্কে আগ্রহী ।

আমি প্রচুর নিবন্ধ পড়েছি যা উল্লেখ করে যে কোডটি বাগ-মুক্ত হতে পারে না

আমি আশা করি না, কারণ এ জাতীয় বক্তব্য ভুল। যদিও এটি সাধারণভাবে গৃহীত হয় যে বেশিরভাগ বৃহত-স্কেল অ্যাপ্লিকেশনগুলি আমার জ্ঞান এবং অভিজ্ঞতার সেরাটির জন্য বাগ-মুক্ত নয়

আরো সাধারণভাবে স্বীকৃত যে হয় না অস্তিত্ব (অর্থাত অস্তিত্ব, না সম্ভাবনা) একটি হাতিয়ার পুরোপুরি নির্ধারণ কিনা একটি প্রোগ্রাম একটি লেখা টুরিং-সম্পূর্ণ প্রোগ্রামিং ভাষা সম্পূর্ণরূপে বাগ মুক্ত।

প্রুফ প্রমান হ'লটিং সমস্যাটির একটি স্বজ্ঞাত এক্সটেনশন, যা প্রতিদিনের অভিজ্ঞতার পর্যবেক্ষণের ডেটার সাথে মিলিত হয়।

এমন কোনও সফ্টওয়্যার রয়েছে যা " নির্ভুলতার প্রমাণগুলি" করতে পারে যা যাচাই করে যে কোনও প্রোগ্রাম প্রোগ্রামের সাথে সম্পর্কিত আনুষ্ঠানিক বৈশিষ্ট্যগুলি পূরণ করে ।

এটি কি বোঝায় যে প্রতিটি প্রোগ্রামের অন্তত একটি অনিচ্ছাকৃত আচরণ থাকবে?

না। যদিও বেশিরভাগ অ্যাপ্লিকেশনটিতে কমপক্ষে একটি বাগ বা অনিচ্ছাকৃত আচরণ রয়েছে বলে পাওয়া গেছে।

বা এর অর্থ কি এটির যাচাইকরণের জন্য কোড লেখা সম্ভব নয়?

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

আরও বেহাল বিবরণের জন্য দেখুন কোক হ'ল এমন একটি সরঞ্জাম / ভাষা / সিস্টেম।

পুনরাবৃত্ত চেকিং সম্পর্কে কি?

আমি জানি না। আমি এটির সাথে পরিচিত নই এবং আমি নিশ্চিত নই যে এটি কোনও সংযোগযোগ্যতা সমস্যা বা সংকলক অপ্টিমাইজেশন সমস্যা is


1
ফর্মাল স্পেসিফিকেশন এবং প্রুফ অ্যাসিস্ট্যান্টদের বিষয়ে প্রথম কথা হওয়ার জন্য +1। এটি একটি গুরুত্বপূর্ণ পয়েন্ট, যা পূর্বের উত্তরে অনুপস্থিত।
আর্সেনি মরজেনকো

6

আমি জিজ্ঞাসা করতে চাই, এটি কি বোঝায় যে প্রতিটি কোড কমপক্ষে একটি অনিচ্ছাকৃত আচরণ পাবে?

না। সঠিক প্রোগ্রামগুলি হতে পারে এবং লিখিত হতে পারে। আপনি মনে করবেন না, একটি প্রোগ্রাম সঠিক হতে পারে, কিন্তু এটা সঞ্চালনের ব্যর্থ হতে পারে কারণে, যেমন, শারীরিক অবস্থার (ব্যবহারকারী রবার্ট হার্ভে তার উত্তর লিখেছে যেমন এখানে ), কিন্তু এই একটি স্বতন্ত্র ব্যাপার হল: যে প্রোগ্রাম এর কোড এখনও সঠিক। আরও স্পষ্ট করে বলতে গেলে, ব্যর্থতা প্রোগ্রামে নিজেই একটি ত্রুটি বা ত্রুটির কারণে ঘটে না , তবে অন্তর্নিহিত মেশিনে এটি কার্যকর করে (*)।

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

অথবা, এর অর্থ কি আমি কোড লিখতে পারছি না, যা এটি পরীক্ষা করবে?

উপরের বিবৃতিতে সাধারণ ক্ষেত্রে উল্লেখ করুন এবং আপনি সঠিক correct

আপনি কোনও প্রোগ্রাম লিখতে সক্ষম হতে পারেন যা একটি নির্দিষ্ট এক্স প্রোগ্রামটি সঠিক কিনা তা যাচাই করে। উদাহরণস্বরূপ, আপনি যদি "হ্যালো ওয়ার্ল্ড" প্রোগ্রামটি যথাযথভাবে দুটি নির্দেশাবলীর সাথে এক হিসাবে সংজ্ঞায়িত করেন তবে, print("hello world")এবং exit, আপনি এমন একটি প্রোগ্রাম লিখতে পারেন যা পরীক্ষা করে দেখায় যে এর ইনপুটটি এই দুটি নির্দেশাবলীর সমন্বিত কোনও প্রোগ্রাম, যদি এটি একটি হয় তবে রিপোর্ট করা "হ্যালো ওয়ার্ল্ড" প্রোগ্রামটি সঠিক বা না।

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


4

একই প্রোগ্রামের দুটি বা ততোধিক সংস্করণগুলি চালিত করা হ'ল এন-ভেরিয়েন্ট (বা এন-সংস্করণ) প্রোগ্রামিং নামক একটি সুপরিচিত ত্রুটি সহনশীলতা কৌশল। এটি সফ্টওয়্যারটিতে বাগের উপস্থিতির স্বীকৃতি।

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

দুটি দুর্বল লিঙ্ক রয়ে গেছে, সাধারণ মোড বাগগুলিতে নেতৃত্ব দেয়:

  • একটি স্পেসিফিকেশন আছে।
  • ভোটদান পদ্ধতিটি অনন্য বা জটিল is

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

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

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

4

একটি প্রোগ্রামের কিছু স্পেসিফিকেশন থাকে এবং কিছু পরিবেশে চলে।

(অন্যদের মধ্যে মহাজাগতিক রশ্মির উদাহরণকে পরিবর্তনের "পরিবেশ" হিসাবে বিবেচনা addকরা FireMissilesযেতে পারে)

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

বিশেষত, আপনি শব্দ স্ট্যাটিক উত্স বিশ্লেষকগুলি যেমন: ফ্রেমা-সি ব্যবহার করতে পারেন ।

(তবে এই জাতীয় বিশ্লেষকদের শিল্পের বর্তমান অবস্থা পুরো প্রোগ্রাম বিশ্লেষণ এবং জিসিসি সংকলক বা ফায়ারফক্স ব্রাউজার বা লিনাক্স কার্নেলের মতো বৃহত আকারের প্রোগ্রামগুলির প্রমাণের অনুমতি দেয় না; এবং আমার বিশ্বাস যে এই প্রমাণগুলি আমার জীবদ্দশায় ঘটবে না won't আমার জন্ম ১৯৫৯ সালে)

তবে, আপনি যা প্রমাণ করেছেন তা হ'ল প্রোগ্রামের সঠিক আচরণটি কিছু পরিবেশের (শ্রেণির) কিছু নির্দিষ্ট স্পেসিফিকেশন t

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

সহজ কথায়, যদি আপনার মহাকাশযান রোবট কিছু ET এর সাথে দেখা করে এবং আপনি এটি নির্দিষ্ট না করে থাকেন, তবে আপনার রোবটটি আপনার মতো আচরণ করার কোনও উপায় নেই ...

জে.পাইট্রাটের ব্লগ এন্ট্রিগুলিও পড়ুন ।

বিটিডাব্লু, হ্যালটিং সমস্যা বা গডেলের উপপাদ্য সম্ভবত মানুষের মস্তিষ্ক, এমনকি মানব প্রজাতির ক্ষেত্রেও প্রযোজ্য।


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

3

এটি কি বোঝায় যে প্রতিটি প্রোগ্রামের অন্তত একটি অনিচ্ছাকৃত আচরণ থাকবে?

না।

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

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

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

দ্রষ্টব্য: আনুষ্ঠানিক পদ্ধতিগুলি একটি মহাজাগতিক রশ্মি প্রসেসরটিকে আঘাত করে এবং এর launch_missiles()পরিবর্তে সম্পাদন করার সম্ভাবনা বাদ দেয় a+b। তারা বাস্তব মেশিনগুলির চেয়ে একটি বিমূর্ত মেশিনের প্রসঙ্গে প্রোগ্রামগুলি বিশ্লেষণ করে যা রবার্ট হার্ভির মহাজাগতিক রশ্মির মতো একক ইভেন্ট আপসেটের সাপেক্ষে।


1

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

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

রাইসের উপপাদ্যের ক্ষেত্রেও একই কথা। হ্যাঁ, কোনও প্রোগ্রামের কোনও অপ্রয়োজনীয় সম্পত্তির জন্য আমরা একটি প্রোগ্রাম লিখতে পারি যা সেই সম্পত্তিটিকে সত্য বা মিথ্যা প্রমাণিতও করতে পারে না; আমরা এ জাতীয় প্রোগ্রাম লেখা এড়াতে পারি কারণ কোনও প্রোগ্রামটি প্রমাণযোগ্য কিনা তা আমরা নির্ধারণ করতে সক্ষম।


0

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

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

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

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

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

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

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

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

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

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


-2

আমি বিশ্বাস করি না যে কোডটি সর্বদা 100% বাগ মুক্ত হয় কারণ কোডটি সত্যই শেষ হয় না। আপনি যা লেখেন তার উপরে আপনি সর্বদা উন্নতি করতে পারেন।

প্রোগ্রামিং বিজ্ঞান এবং গণিতের ক্ষেত্র যা ক্ষেত্রে উভয়ই অন্তহীন। বিকাশকারী হিসাবে দুর্দান্ত জিনিস হ'ল আমাদের কাজ অফুরন্ত।

কোডের একক লাইন লেখার জন্য হাজার হাজার প্লাস রয়েছে। কোডটি সেই লাইনটির সর্বাধিক অনুকূলিত সংস্করণ লিখতে হবে তবে এটি বাগ বিনামূল্যে হতে পারে না। বাগ ফ্রি এই ধারণাটিকে বোঝায় যে আপনার কোডটি অবিচ্ছেদ্য এবং সমস্ত কোড কিছুটা ডিগ্রী বা পদ্ধতিতে ভেঙে যেতে পারে।

তাহলে কোড কি দক্ষ হতে পারে? হ্যাঁ.
কোড কি অন্তহীনভাবে অনুকূলিত হতে পারে? হ্যাঁ.
কোড বাগ বিনামূল্যে হতে পারে? না, আপনি কেবল এটি ভাঙার কোনও উপায় খুঁজে পান নি।
বলা হচ্ছে, আপনি যদি নিজের এবং আপনার কোড লেখার অনুশীলনগুলি আরও উন্নত করার চেষ্টা করেন তবে আপনার কোডটি ভঙ্গ করা শক্ত।


এই পোস্টটি পড়ার চেয়ে শক্ত (পাঠ্যের প্রাচীর)। তুমি কিছু মনে করবে সম্পাদন করা একটি ভাল আকৃতি সেটিকে ing?
gnat
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.