باگ چیست؟ | انواع Bug در برنامه نویسی
باگ چیست؟ باگ (Bug) یکی از اصطلاحات پر کاربرد در دنیای نرمافزار به خصوص برنامه نویسی است. اگر برنامه نویس نباشید نیز اصطلاح باگ در برنامه نویسی را حتما شنیدهاید. برای مثال اینستاگرام باگ دارد یا فلان برنامه به Bug خورده است که به ذهنتان خطور کرده که واقعا معنی باگ چیست؟ در این مقاله به معنی باگ و انواع Bug در برنامه نویسی میپردازیم.
موضوعاتی که در این مقاله بررسی خواهیم کرد:
- باگ چیست؟ (what is a Bug)
- تاریخچه باگ
- انواع باگ در برنامه نویسی
- دیباگ (Debug) چیست؟
- باگ بانتی (Bug Bounty) چیست؟
- بزرگترین باگ چیست؟
- چگونه بدون باگ برنامه نویسی کنیم؟
باگ چیست؟ (what is a Bug)
باگ چیست؟ باگ به انگلیسی Bug در لغت به معنی حشره است اما در اصطلاح علوم کامپیوتری به خصوص در حوزه نرمافزار به معنی «اشکال» است. باگ باعث به وجود آمدن نتایج اشتباه یا اجرا نشدن برنامه (نرمافزار) میشود. البته برنامه نویسان کامپیوتری برای معادل فارسی Bug از همان واژه باگ استفاده میکنند که منظور از باگ همان «اشکال نرمافزاری» است.
مثلا باگ در ابنستاگرام باعث میشود استوریها دیده نشوند یا برنامه با اشکالاتی روبرو شود. باگ در تلگرام باعث به وجود آمدن مشکلاتی نظیر عدم نمایش لیست چتها و... شود. باگ گوشی موبایل باعث شود برنامهها به درستی کار نکنند. باگ در بازی (Game) باعث به وجود آمدن نتایج غیر منتظره شود.
تاریخچه باگ
در قسمت بالا گفتیم که معنی باگ چیست؟ اما ریشه واژه Bug از کجا به وجود آمده است؟ گفته میشود که Bug اولین بار در سال 1945 توسط خانمی به نام Grace Murray Hopper به کار گرفته شد. خانم گریس هاپر در نیروی دریایی آمریکا کار میکرد و به عنوان یکی از اولین برنامه نویسان زن در دنیا شناخته میشود.
او در دانشگاه هاروارد آمریکا در حال اشکالزدایی (Debug) کامپیوتر Mark II بود که متوجه شد یک حشره (سوسک) وارد پرههای این کامپیوتر شده و عملکرد این کامپیوتر را مختل کرده است. از آن به بعد، هرگونه اشکال نرمافزاری به وجود میآمد از اصطلاح Bug (حشره) استفاده میکردند.
انواع باگ در برنامه نویسی
در قسمتهای بالا درباره باگ چیست؟ و تاریخچه باگ اطلاعاتی کسب کردیم. در این قسمت از مقاله آموزش برنامه نویسی به انواع باگهای برنامه نویسی میپردازیم.
- باگ سینتکسی (Syntax Bug)
- باگ منطقی (Logical Bug)
- باگ محاسباتی (Arithmetic bug)
- باگ منابع (Resource Bug)
- باگ تیمی (Teamwork Bug)
- باگ تعامل (Interfacing Bug)
- باگ چند رشتهای (Multithreading Bug)
باگ سینتکسی چیست؟
از معروفترین باگهای برنامه نویسی، باگ سینتکسی است. Syntax به معنی نحوه نوشتاری یک زبان برنامه نویسی است. علت این باگ چیست؟ اگر نوشتاری یک زبان برنامه نویسی را اشتباه بنویسیم، با باگ سینتکسی مواجه میشویم که معمولا با پیغام Syntax Error نمایان میشود. این باگ ممکن است بخاطر حروف بزرگ به جای حروف کوچک و یا اضافه شدن یا کم شدن یک کارکتر اشتباهی در قواعد آن زبان برنامه نویسی اتفاق بیفتد.
باگ منطقی چیست؟
باگ منطقی زمانی اتفاق میافتد که در منطق زبان برنامه نویسی یک اشتباهی رخ دهد. مثلا نرمافزار داخل حلقه بینهایت (Infinity Loop) قرار بگیرد و در نهایت کرش کند. این باگ نیز از انواع باگهای رایج در برنامه نویسی است.
باگ محاسباتی چیست؟
باگ محاسباتی معمولا در عملیاتی که با ریاضیات سروکار داریم اتفاق میافتد. برای مثال یک عدد را تقسیم بر 0 کنیم (جواب بینهایت) یا نتیجه عملیاتی مورد انتطار دارای خطا نباشد. باگ محاسبی نیز یکی دیگر از انواع باگهای برنامه نویسی به حساب میآید.
باگ منابع چیست؟
یکی دیگر از انواع باگها در برنامه نویسی، باگ منابع است. اما علت این باگ چیست؟ باگ منابع وقتی اتفاق میافتد که در بکارگیری منابع نرمافزاری دچار خطا شویم. برای مثال از یک متغیر (Variable) استفاده کنیم که قبل از استفاده تعریف نشده باشد.
باگ تیمی چیست؟
باگ تیمی نیز یکی دیگر از انواع باگهای برنامه نویسی است. این باگ معمولا در کد نویسی بین اعضای تیم برنامه نویسی اتفاق میافتد. برای مثال تداخل در نامگذاری متغیرها و... که باعث به وجود آمدن خطا یا باگ نرمافزاری میشود.
باگ تعامل چیست؟
از دیگر انواع باگ در برنامه نویسی میتوان به باگ تعامل اشاره کرد. این باگ زمانی اتفاق میافتد که یک نرمافزار در ارتباط با نرمافزار یا سختافزار دیگر دچار خطا شود. برای مثال از یک API نادرست استفاده شود.
باگ چند رشتهای چیست؟
باگ چند رشتهای نیز یکی دیگر از انواع باگهای برنامه نویسی است. علت این باگ چیست؟ این باگ زمانی اتفاق میافتد که اجرای threadها دچار مشکل شوند. مثلا جایی که وظیفه A تا زمانی که وظیفه B تمام نشده باشد، ادامه نخواهد یافت، اما در عین حال، وظیفه B نمیتواند ادامه یابد تا زمانی که کار A تمام شود.
دیباگ (Debug) چیست؟
در مقاله مرتبط درباره دیباگ (Debug) و نحوه دیباگ نرمافزار صحبت کردیم که برای اطلاعات بیشتر حتما آن را مطالعه کنید. به طور خلاصه اشکالزدایی باگ را دیباگ میگویند. برنامه نویسان همیشه باید باگهای احتمالی یک نرمافزار را پیدا کنند و مشکلات آن را بر طرف کنند که این عملیات دیباگ (اشکالزدایی) نام دارد.
باگ بانتی (Bug Bounty) چیست؟
در قسمتهای بالا معنی باگ و انواع باگ در برنامه نویسی را مورد بررسی قرار دادیم. اما در این قسمت به تعریف باگ بانتی (Bug Bounty) در نرمافزار میپردازیم. باگ بانتی چیست؟ شرکتهای نرمافزاری در جهان همیشه در صدد رفع باگ (دیباگ) محصولات نرمافزاری خود هستند. ممکن است یک باگ منجر به آسیبپذیری جبران ناپذیری در نرمافزار شود. برای مثال اطلاعات کاربران لو برود و...
احتمال اینکه باگ از دید تیم نرمافزاری شرکت پنهان بماند زیاد است. برای همین شرکتهای نرمافزاری قبل از اینکه یک باگ منجر به خسارت شود، یک جایزه برای پیدا کردن باگ محصولات نرمافزاری خود ارائه میکنند که هکرها به جای اینکه از این باگ سوء استفاده کنند، باگ را به آن شرکت گزارش دهند و در ازای آن جایزه دریافت کنند.
از معروفترین باگ بانتیها میتوان به باگ بانتی 500 هزار دلاری شرکت گوگل که مسابقات Pwn2Own که به منظور پیدا کردن باگ نرمافزاری است نام برد. از سایر باگ بانتیها میتوان به باگ بانتی 300 هزار دلاری شرکت تلگرام اشاراه کرد که گفته بود اگر شخصی بتواند رمزگذاری تلگرام را بشکند، این جایزه را دریافت خواهد کرد.
بزرگترین باگ چیست؟
ممکن است بعصی ار باگها کوچک به نظر برسند و مشکلی به وجود نیاورند. اما بعضی از باگها خیلی خطرناک هستند و باعث کشته شدن و خسارات جبران ناپذیری در دنیا شدهاند. که از جمله باگهای خطرناک در جهان میتوان به موارد زیر اشاره کرد:
- باگ Y2K: این باگ به خطای سال 2000 (خطای هزاره) مشهور است. در دهه 90 میلادی کامپیوترها تاریخ را به جای 4 رقم، 2 رقم آخر را مینوشتند مثلا برای 1995 مینوشتند 95 که در سال 2000 به جای نوشتن 2000 عدد 00 نوشته شد که با تاریخ 1900 تداخل پیدا میکرد. این باگ باعث شد 300 میلیارد دلار هزینه داشته باشد.
- باگ Therac-25: این باگ مربوط به دستگاه پرتو درمانی Therac-25 بود که توسط آژانس انرژی اتمی کانادا ساخته شده بود. نرمافزار صعیف و سیستمهای توسعه نیافته در این دستگاه باعث شد که اشعه X ناگهانی از این دستگاه ساطع شود و منجر به مرگ حداقل 6 نفر شود.
- باگ AT&T: باگ نرمافزاری و اشتباه در کدها باعث شد شبکه AT&T از کار بیفتد و میلیونها تماس بی پاسخ بمانند که ضررهای زیادی به شرکتهایی که تماس تلفنی برایشان مهم بود، به بار آورد.
- باگ Mariner1: باگ نرمافزاری در کاوشگر Mariner1 که قرار بود برای سفر اکتشافی به مریخ پرتاب شود، منجر به انحراف مسیر آن و در نهایت منفجر شدن کاوشگر شد.
- باگ St. Mary Mercy: این باگ نرمافزاری در سال 2003 باعث شد در بیمارستان St. Mary Mercy به اشتباه 8500 نفر مرده اعلام شوند در حالی که زنده بودند. قطعا خواندن خبر مرگ خودتان وقتی زندهاید شما را مبهوت خواهد کرد. این خطا باعث شد شرکتهای بیمه که مرضهای واجد شرایط را بیمه میکردند، این افراد را از لیست بیمه خارج کنند. این خطا اگر چه منجر به مرگ نشد اما باعث شد 8500 نفر با حذف بیمه آسیب جدی ببینند و به شرکتهای بیمه نیز ضررهای زیادی وارد شود.
چگونه بدون باگ برنامه نویسی کنیم؟
تا به حال هیچ برنامه نویسی در عمر خود بدون باگ نتوانسته کد بزند. برنامه نویسان همه روزه با باگ کدها سرو کار دارند. قطعا بدون باگ نمیشود کد نویسی کرد اما میتوان با رعایت نکات برنامه نویسی در صدد رفع مشکلات نرمافزاری (دیباگ) قدم گذاشت.
ایجاد باگ در برنامه نویسی مربوط به برنامه نویسان مبتدی نیست. حتی برنامه نویسان حرفهای در شرکتهایی مانند متا و تلگرام نیز ممکن است باعث بروز باگ شوند چرا که هر روز یک باگ جدید در اپلیکیشن اینستاگرام، واتساپ، تلگرام، برنامههای موبایل، دسکتاپ، وب و... مشاهده میکنیم اما با ارائه آپدیت و بروزرسانی نرمافزاری این مشکلات بر طرف میشوند.
جمعبندی:
در این مقاله متوجه شدیم که باگ چیست؟ و سپس با بررسی معنی باگ به انواع باگهای برنامه نویسی رسیدیم. باگ در لغت به معنی حشره است اما در اصطلاح علوم کامپیوتری به هرگونه اشکال یا خطای نرمافزاری، باگ (Bug) میگویند. این نامگذاری به دلیل اینکه در گذشته یک حشره (سوسک) وارد یک سیستم کامپیوتری شده و باعث شده که پرههای کامپیوتر دچار مشکل شود که از آن به بعد هرگونه خطای احتمالی در کامپیوتر را باگ نامگذاری کردند. اگر سوالی درباره مفهوم باگ دارید، لطفا در قسمت نظرات اعلام کنید تا پاسخ دهیم.