در این مطلب، ۴ نوع از باگ‌ها که نام خود را از دانشمندان معروف گرفته‌اند، بررسی می کنیم؛ دسته‌بندی این باگ‌ها بسیار جالب است و خواهیم دید که باگ‌های کدنویسی تا چه اندازه عجیب هستند!

 Jim Gray، در مقاله‌ای معروف، باگ‌ها را به ۲ دستهٔ Bohrbugs و Heisenbugs، براساس نام ۲ دانشمند معروف تقسیم‌بندی کرده است اما امروزه، با باگ‌های بیشتری سروکار داریم؛ بنابراین به ۲ دستهٔ دیگر هم می پردازیم.

Bohrbug

بیشتر باگ‌هایی که با آن‌ها برخورد داریم، مجدداً قابل‌تولید هستند و با عنوان Bohrbugs شناخته می‌شوند؛ این باگ‌ها از نام دانشمندی Niels Bohr گرفته‌ شده اند؛ این دانشمند در سال 1913 یک مدل اتمی ساده و قابل‌درک ارائه داد. در این مدل، مواردی همچون مسیر حرکت و مقدار انرژی یک الکترون در یک اتم، قابل پیش‌بینی اند.

همچنین Bohrbugها نیز قابل پیش‌بینی هستند؛ به‌عبارت دیگر، اگر در همان شرایط قبلی نرم‌افزار را اجرا کنید، دوباره ایجاد می‌شوند. به طور مثال، هنگامی که به‌خاطر این‌که از یک موجودیت null استفاده می‌کنید و در نتیجه آن برنامهٔ شما کرش می‌کند، قطعاً بار دیگر برنامه برای یک ورودی دیگر با مقدار null در همین قسمت کرش خواهد کرد؛ پس روشن می شود که این باگ به‌راحتی قابل تولید مجدد و بالتبع قابل دیباگ کردن است.

 

Heisenbug

تمام دولوپرهای حرفه‌ای زمانی‌که برنامه را دوباره اجرا می‌کنند با این موضوع مواجه می شوند، باگی که باعث شده بود برنامه کرش کند، غیب شده است! صرف‌نظر از تلاش و زمانی که صرف پیدا کردن دوبارهٔ همان باگ می‌کنید، ولی باگ دوباره خود را نشان نمی‌دهد.

این باگ‌ها اسم خود را از دانشمند معروف آقای Werner Heisenberg گرفته‌اند که به‌خاطر «اصل عدم قطعیت» یا Uncertainty Principle شناخته شده است؛ براساس این اصل، در یک زمان مشخص، امکان اندازه‌گیری مکان و سرعت یک الکترون درون یک اتم، وجود ندارد.

هنگام انجام عملیات دیباگینگ، ایزوله‌سازی و یا بررسی دقیق برای پیدا کردن مشکل، باگ‌ها، رفتار متفاوتی از خود نشان می‌دهند، به این نام شناخته می‌شوند؛ به طور مثال، اگر متغیرهایتان را مقداردهی اولیه نکنید، ممکن این اتفاق رخ دهد. هنگام اجرای برنامه، به متغیرهایی که مقداردهی اولیه نشده‌اند دسترسی خواهد داشت و این منجر به ایجاد باگ می‌شود اما این درحالی است که وقتی می‌خواهید برنامه را دیباگ کنید، برنامه احتمالاً درست کار خواهد کرد چراکه بسیاری از دیباگرها، متغیرهایی که مقداردهی اولیه نشده‌اند را با ۰ مقداردهی می‌کنند و همین منجر به برخورد نکردن شما با باگ مورد نظر می شود.

 

Mandelbugs

وقتی علت ایجاد باگ بسیار پیچیده و غیرقابل فهم باشد و باگ رفتاری غیرطبیعی از خود نشان می‌دهد، به آن‌ Mandelbugs می‌گویند. این باگ‌ها نام خود را از نام Benoît Mandelbrot گرفته‌اند که پدر علم هندسه فراکتال است (فراکتال‌ها، ساختارهای پیچیده و شبیه به خود هستند). مثال برای این باگ ها، یک باگ در سیستم‌عامل که به زمان‌بندی وابسته است.

 

Schroedinbug

گاهی‌اوقات به سورس‌کد نگاه می‌اندازید و در می یابید که باگ یا مشکلی وجود دارد که در مرحلهٔ اول اصلاً نباید اجازهٔ اجرا شدن برنامه را می داد؛ وقتی می‌خواهید همین کد را اجرا کنید، این باگ بی‌درنگ ظاهر می‌شود و نرم‌افزار را متوقف می‌کند. هرچند این مورد کمی غیرمعمول به‌نظر می‌رسد،اما گاهی‌اوقات رخ می‌دهند و با نام  Schroedinbug شناخته می‌شوند (معمولاً این نوع باگ‌ها از مراحل اولیهٔ تست‌های کیفیت نرم‌افزار رد می‌شوند و خود را نشان نمی‌دهند).

باگ‌های Schroedinbug، نام خود را از Erwin Schrödinger گرفته‌اند که ایدهٔ «آزمایش تئوری گربه» را ارائه کرد؛ در فیزیک کوانتوم، ذره‌های کوانتوم مانند اتم‌ها، می‌توانند در ۲ حالت یا بیشتر وجود داشته باشند ولی این دانشمند پیشنهاد کرد که در اشیاء کلاسیکتری مانند گربه که از اتم‌های بسیاری تشکیل شده، وجود داشتن در ۲ حالت، ممکن نیست. وی یک سناریو را پیشنهاد می‌کند که در آن یک گربه در داخل جعبه‌ای در بسته، همراه با شیشه‌ای با محتوای سم (که به یک اتم رادیواکتیو متصل است) قرار دارد.

اگر نیمه‌عمر اتم تمام شود، شیشه می شکند و سم به بیرون نشت می‌کند و باعث مرگ گربه می‌شود؛ ولی درِ جعبه بسته است و بنابراین نمی‌توان گفت گربه زنده یا مرده است. از این‌رو، تا زمانی‌که درِ جعبه باز شود، گربه می‌تواند در ۲ حالت قرار داشته باشد: زنده یا مرده. در فیزیک کوانتوم، به این مورد Superposition State می‌گویند، طوری که گربه هم زنده است و هم مرده!

در باگ‌ها؛ صرفاً با مشاهدهٔ مشکل در کد، شما دست به تغییراتی می‌زنید که در این صورت یا نرم‌افزار اجرا می‌شود و یا نمی شود. در نتیجه این نوع از باگ‌ها با عنوان Schroedinbug شناخته می‌شوند.

انواع باگ‌های دیگری هم وجود دارند که در این ۴ دسته قرار نمی‌گیرند که از آن جمله می‌توان به باگ‌های Aging-Related اشاره کرد که تنها زمانی رخ می‌دهند که نرم‌افزار برای مدت طولانی کار کند!

شما چه فکر می‌کنید، آیا باگ‌هایی که تاکنون با آن‌ها برخورد داشته‌اید در این دسته‌بندی قرار می‌گیرند؟ تجربهٔ خود در برخورد با باگ‌های عجیبی که ساعت‌ها شما را درگیر کرده است را می‌توانید با ما درمیان بگذارید.