অন্যান্য ব্যক্তিরা কি বাগগুলি দেখলে তারা ঠিক করে দেয় বা ক্রাশ / ডেটা ক্ষতি / লোকেরা এটি ঠিক করার আগেই মারা যাওয়ার আগ পর্যন্ত অপেক্ষা করে থাকে?
উদাহরণ 1
Customer customer = null;
...
customer.Save();
কোডটি স্পষ্টতই ভুল, এবং এর আশেপাশে কোনও উপায় নেই - এটি নাল রেফারেন্সে কোনও পদ্ধতি কল করে। এটি ক্রাশ না হওয়ার কারণে ঘটেSave
হওয়ার ঘটে কোনও উদাহরণের ডেটা অ্যাক্সেস না করার ঘটে; সুতরাং এটি ঠিক একটি স্থির ফাংশন কল করার মত। তবে যে কোনও ছোট পরিবর্তন হঠাৎ করে ভাঙা কোডের কারণ হতে পারে যা ক্রাশ হয় না: ক্রাশ শুরু করতে।
তবে , কোডটি সংশোধন করাটাও অকল্পনীয় নয় :
Customer customer = null;
...
customer = new Customer();
try
...
customer.Save();
...
finally
customer.Free();
end;
হতে পারে একটি ক্র্যাশ পরিচয় করিয়ে দিতে ; সম্পূর্ণ কভারেজ এবং ম্যানুয়াল ব্যবহারকারীর পরীক্ষার সাথে ইউনিট পরীক্ষার মাধ্যমে একটি আবিষ্কার হয়নি।
উদাহরণ 2
float speed = 0.5 * ((G * mass1 * mass2) / R) * Pow(time, 2);
পদার্থবিজ্ঞান জানে এমন লোকেরা চিনবে যে এটি आर হওয়ার কথা 2 ।
কোডটি ভুল, একেবারেই ভুল। এবং গতির পরিমাণকে আরও বাড়িয়ে তোলার ফলে খুব শীঘ্রই রেট্রো-রকেট গুলি চালানো হবে, যা মহাকাশযানের সমস্ত চালককে হত্যা করবে।
তবে এটিও সম্ভবত এটির অতিরিক্ত অনুমানের গতিটি অন্য একটি বিষয়কে মাস্ক করে দিচ্ছে: শাটলটি খুব দ্রুত গতিতে চলার সময় এয়ার-ব্যাগ স্থাপন করতে পারে না। যদি আমরা হঠাৎ করে কোডটি ঠিক করি:
float speed = 0.5 * ((G * mass1 * mass2) / Pow(R, 2)) * Pow(time, 2);
এখন গতিটি সঠিক, এবং হঠাৎ এয়ারব্যাগগুলি যখন ব্যবহার করা উচিত নয় তখন মোতায়েন করা হচ্ছে।
উদাহরণ 3
এখানে একটি উদাহরণ রয়েছে যা আমি সম্প্রতি পেয়েছি, কোনও স্ট্রিংয়ে অবৈধ অক্ষর রয়েছে কিনা তা পরীক্ষা করে দেখছি:
if (StrPos(Address, "PO BOX") >= 0)
{
//Do something
}
যদি দেখা যাচ্ছে যে Do something
শাখায় একটি বাগ আছে ? স্পষ্টতই ভুল কোড ঠিক করা:
if (StrPos("PO BOX", Address) >= 0)
{
//Do something
}
কোডটি ঠিক করে তবে একটি বাগ প্রবর্তন করে।
আমি এটি যেভাবে দেখছি সেখানে দুটি সম্ভাবনা রয়েছে:
- কোডটি ঠিক করুন, এবং এটি ভঙ্গ করার জন্য দোষী হন get
- কোডটি ক্রাশ হওয়ার জন্য অপেক্ষা করুন এবং বাগ থাকার জন্য দোষ চাপুন
আমাদের কি করতে আপনি রাজনৈতিকভাবে না?
উদাহরণ 4 - আজকের আসল ওয়ার্ল্ড বাগ
আমি একটি অবজেক্ট তৈরি করছি, তবে ভুল কনস্ট্রাক্টরকে ফোন করছি:
Customer customer = new Customer();
দেখা যাচ্ছে যে "প্যারামিটারলেস" কনস্ট্রাক্টর আসলে উত্তরাধিকার শৃঙ্খলে আরও পিছনে থেকে প্যারামিটারাইজড কনস্ট্রাক্টর:
public Customer(SomeObjectThatNobodyShouldBeUsingDirectly thingy = null)
public Customer(InjectedDependancy depends)
এটিকে কল করা একটি ভুল, যেহেতু এটি পরবর্তী সমস্ত নির্মাণকারীকে বাইপাস করে।
আমি এই জাতীয় বিপজ্জনক নির্মাণকারীকে প্রকাশ না করার জন্য অবজেক্টের বংশটি পরিবর্তন করতে পারি, তবে এখন আমাকে কোডটি এতে পরিবর্তন করতে হবে:
Customer customer = new Customer(depends);
তবে আমি এই গ্যারান্টি দিতে পারি না যে এই পরিবর্তনটি কোনও কিছুই ভঙ্গ করবে না। আমার উপরের উদাহরণের মতো 1 , সম্ভবত কেউ, কোথাও, কোনও না কোনওভাবে কিছু রহস্যজনক অবস্থার অধীনে Customer
অবৈধ এবং জঞ্জাল পূর্ণরূপে নির্মাণের উপর নির্ভর করে ।
সম্ভবত Customer
অবজেক্টটি, এখন এটি সঠিকভাবে নির্মিত হয়েছে এমন কিছু কোড চালানোর অনুমতি দেবে যা আগে কখনও করেনি এবং এখন আমি ক্র্যাশ পেতে পারি।
আমি এটিতে আপনার স্ত্রীর জীবন বাজি রাখতে পারি না।
এবং আমি এখান থেকে মঙ্গলবার পর্যন্ত এটি পরীক্ষা করতে পারি, আমি আপনার মেয়ের জীবনের শপথ করতে পারি না যে আমি কোনও প্রতিরোধের পরিচয় দেয়নি।
আমি কি:
- কোডটি ঠিক করুন এবং এটি ভঙ্গ করার জন্য দোষী হবেন? অথবা
- বাগ ছেড়ে দিন, এবং গ্রাহক এটি পেলে দোষী হন?