در این مقاله از گروه تبلیغاتی فورسی نگاهی میاندازیم به انواع باگ ها در صنعت توسعهٔ نرمافزار (و اینکه تا چه اندازه میتوانند عجیب باشند) که جالب است بدانید نام خود را از دانشمندان معروف گرفتهاند.
در مقالهای معروف تحت عنوان ?Why Do Computers Stop and What Can Be Done About It که در سال ۱۹۸۵ منتشر شد، Jim Gray، که یکی از دانشمند مطرح علوم کامپیوتر است باگها را بر اساس نام دو دانشمند معروف به دو دستهٔ کلی Bohrbugs و Heisenbugs تقسیمبندی کرد اما امروزه با انواع و اقسام باگها در پروسهٔ توسعهٔ نرمافزار سروکار داریم و از همین روی به دو دستهٔ دیگر هم نگاهی خواهیم داشت و در نهایت هم هر چهار گروه را با ذکر مثال بررسی خواهیم نمود.
باگ Bohrbug
بیشتر باگ هایی که با آنها برخورد داریم، مجدداً قابلتولید هستند و با عنوان Bohrbugs شناخته میشوند؛ این باگها نام خود را از دانشمندی به نام Niels Bohr گرفتهاند که در سال ۱۹۱۳ یک مدل اتمی ساده و قابلدرک ارائه داد. در مدل آقای Bohr، چیزهایی مثل مسیر حرکت و مقدار انرژی یک الکترون در یک اتم، قابل پیشبینی هستند.
بهطور مشابه، Bohrbugها هم قابل پیشبینی هستند؛ بهعبارت دیگر، اگر تحت همان شرایط قبلی نرمافزار را اجرا کنید، دوباره ایجاد میشوند. برای مثال، وقتی بهخاطر اینکه از یک موجودیت null استفاده میکنید و بالتبع برنامهٔ شما کرش میکند، قطعاً بار دیگر برنامه برای یک ورودی دیگر با مقدار null در همین قسمت کرش خواهد کرد؛ پس مشخص است که این باگ بهراحتی قابل تولید مجدد و بالتبع قابل دیباگ کردن است.
باگ Heisenbug
همهٔ دولوپرهای حرفهای با این موضوع مواجه شدهاند زمانیکه برنامه را دوباره اجرا میکنند، باگی که باعث شده بود برنامه کرش کند، ناپدید شده است! صرفنظر از اینکه چقدر تلاش میکنید و زمان خود را صرف پیدا کردن دوبارهٔ همان باگ میکنید، ولی باگ از دست شما فرار میکند و دوباره خود را نشان نمیدهد.
این نوع از باگها اسم خود را از دانشمند معروف آقای Werner Heisenberg گرفتهاند که بهخاطر «اصل عدم قطعیت» یا اصطلاحاً Uncertainty Principle شناخته شده است؛ براساس این اصل، در یک زمان مشخص، امکان اندازهگیری مکان و سرعت یک الکترون درون یک اتم، بهصورت دقیق و یا تقریبی وجود ندارد.
وقتی شما میخواهید عملیات دیباگینگ، ایزولهسازی و یا بررسی دقیق برای پیدا کردن مشکل را انجام دهید و باگها رفتار متفاوتی از خود نشان میدهند، به این نام شناخته میشوند؛ برای مثال، اگر متغیرهایتان را مقداردهی اولیه نکنید، ممکن این اتفاق رخ دهد. وقتی برنامه اجرا میشود، به متغیرهایی که مقداردهی اولیه نشدهاند دسترسی خواهد داشت و این باعث ایجاد باگ میشود اما این درحالی است که وقتی میخواهید برنامه را دیباگ کنید، برنامه احتمالاً درست کار خواهد کرد چراکه بسیاری از دیباگرها، متغیرهایی که مقداردهی اولیه نشدهاند را با ۰ مقداردهی میکنند و همین باعث میشود که شما با باگ موردنظر برخورد نکنید.
باگ Mandelbugs
وقتی علت ایجاد باگ بسیار پیچیده و غیرقابل فهم باشد و باگ رفتاری غیرطبیعی از خود نشان میدهد، آنرا Mandelbugs مینامند. این باگها نام خود را از روی نام آقای Benoît Mandelbrot گرفتهاند که بهعنوان پدر علم هندسه فراکتال شناخته میشود (فراکتالها، ساختارهای پیچیده و شبیه به خود هستند). یک باگ در سیستمعامل که به زمانبندی وابسته است، مثالی از این نوع باگها است.
باگ Schroedinbug
گاهی اوقات به سورسکد نگاه میاندازید و متوجه میشوید که باگ یا مشکلی وجود دارد که در مرحلهٔ اول اصلاً نباید اجازهٔ اجرا شدن برنامه را بدهد و وقتی میخواهید همین کد را اجرا کنید، باگ مورد نظر بیدرنگ ظاهر میشود و نرمافزار متوقف میشود. هرچند این مورد کمی غیرمعمول به نظر میرسد، اما چنین باگهایی گاهی اوقات رخ میدهند و با نام Schroedinbug شناخته میشوند (معمولاً این نوع باگها از مراحل اولیهٔ تستهای کیفیت نرمافزار رد میشوند و خود را نشان نمیدهند.) که این دست باگها نام خود را از دانشمند معروف Erwin Schrödinger گرفتهاند که ایدهٔ «آزمایش تئوری گربه» را ارائه کرد.
در واقع، در فیزیک کوانتوم ذرههای کوانتومی، مانند اتمها، میتوانند در دو حالت یا بیشتر وجود داشته باشند ولی شرودینگر پیشنهاد کرد که در موجودیتهای کلاسیکتری مانند حیوانی همچون گربه که از اتمهای بسیاری تشکیل شده، وجود داشتن در دو حالت غیرممکن است. وی یک سناریو را پیشنهاد کرد که در آن یک گربه در داخل جعبهای در بسته همراه با شیشهای با محتوای سَم (که به یک اتم رادیواکتیو متصل است) قرار دارد به طوری که اگر نیمهعمر اتم تمام شود، شیشه شکسته میشود و سم به بیرون نَشت کرده و باعث مسموم شدن گربه و بالتبع مرگش میشود ولی از آنجا که درِ جعبه بسته است هرگز نمیتوان گفت گربه زنده است یا مرده و از همین روی تا زمانی که در جعبه باز نشود، گربه میتواند در دو حالت قرار داشته باشد: زنده یا مرده که در فیزیک کوانتوم، به این وضعیت اصطلاحاً Superposition State میگویند.
انواع باگهای دیگری هم وجود دارند که در قالب این ۴ دسته قرار نمیگیرند که از آن جمله میتوان به باگهای بهاصطلاح Aging-Related اشاره کرد که فقط زمانی رخ میدهند که نرمافزار برای مدت طولانی کار کند!