کنکور کامپیوتر
0
ورود | ثبت نام
نظرات
اشتراک
بالا
علاقه‌مندی

اشتراک
 

معنی باگ چیست | باگ یعنی چه؟ | انواع باگ های نرم افزاری

این مقاله عالی به توضیح معنی باگ (bug)، معرفی انواع باگ های نرم افزاری، توضیح آنکه چگونه از پدید آمدن باگ جلوگیری کنیم؟ و در نهایت نحوه رفع باگ پرداخته

در حوزه‌ی کامپیوتر، به خطا یا Error در یک برنامه ی کامپیوتری، باگ (Bug) می‌گویند. همچنین به فرآیند پیدا کردن یک باگ، دیباگینگ یا اشکال زدایی (Debugging)دیباگ چیست؟ معرفی روش‌‌ها و ابزارهای دیباگینگ(اشکال زدایی)دیباگ چیست؟ معرفی روش‌‌ها و ابزارهای دیباگینگ(اشکال زدایی)این مقاله عالی مفاهیم دیباگ (debug)، دیباگینگ (Debugging) یا همان اشکال زدایی، دیباگر (Debugger) را معرفی و همچنین روش‌‌ها و ابزارهای دیباگینگ را بررسی کرده می‌گویند. عملیات مربوط به دیباگ کردن معمولا بعد از اینکه کد برنامه نوشته شد شروع می‌شود و در طول فرآیند ساخت یک نرم افزار، یعنی وقتی قسمت ها و اجزای مختلف برنامه نویسی شده‌ی نرم افزار، جمع و به هم الحاق می‌شوند ادامه می‌یابد.

باگ‌ها معمولا بعد از عرضه‌ی یک محصول کامپیوتری و یا هنگام تست کردن نسخه‌ی بتا (Beta Testing) کشف می‌شوند. وقتی همچین اتفاقی بی‌افتد، کاربران آن نرم افزار مجبور هستند یک راهی پیدا کنند تا از پدید آمدن مشکل در نرم افزار جلوگیری کنند. البته راه دیگری که وجود دارد این است که توسعه دهندگان نرم افزار، آپدیت هایی در قالب patch منتشر می‌کنند و در این پچ ها، باگ‌ها نیز رفع می‌شوند.

داشتن باگ در برنامه، تنها یک نوع از مشکلی است که یک برنامه می‌تواند داشته باشد. برنامه‌ها می‌توانند بدون داشتن هیچ اشکالی اجرا شوند ولی همچنان استفاده از آن‌ها مشکل باشد و یا در بعضی از عملیات و پردازش‌های سنگین به مشکل بخورند. تست کردن یک نرم افزار با این مشکل، دشوارتر از برنامه‌ای است که دارای باگ (Bug) است. بنابراین فرآیند توسعه‌ی یک نرم افزار از اهمیت بالایی برخوردار است، یک برنامه باید طوری توسعه یابد که به ازای هزاران خط کد، باگ‌های کمتری داشته باشد و فرآیند تولید آن نیز کنترل شده باشد. همچنین در مراحل آزمایش این برنامه نیز بتوان از آن استفاده کرد که به این خاصیت اصطلاحا Usability in Testing می‌گویند.

انواع باگ های نرم افزاری

باگ‌های متفاوتی وجود دارند که باعث بوجود آمدن اختلال در عملکرد کامپیوترها می‌شوند. بعضی از مهم ترین انواع باگ‌ها که بیشتر رخ می‌دهند را در زیر آورده‌ایم:

باگ های نرم افزاری را می‌توان از دیدگاه کاربران نیز دسته بندی کرد. از نظر کاربر دو نوع باگ وجود دارد که به صورت زیر است:

باگ‌ها را همچنین می‌توان بر اساس سطح دشواری که برای کاربر ایجاد می‌کند یا بر اساس شدت آنها نیز طبقه بندی کرد. مثلا:

یکی دیگر از دیدگاه‌ها برای دسته بندی کردن باگ‌ها این است که این باگ‌ها کجا رخ داده‌اند:

در این تصویر انواع باگ های کامپیوتری نشان داده شده است.

چگونه از پدید آمدن باگ جلوگیری کنیم؟

راه حل‌های مختلفی برای جلوگیری از به وقوع پیوستن باگ وجود دارد که بسته به نوع باگ و اینکه چه موقع و کجا این باگ رخ داده است متفاوت است.

فرآیند توسعه

بهترین راه برای رفع خطا های کد نویسی، جلوگیری از وقوع آن است. استفاده از رویکرد ها یا متدولوژی توسعه ی نرم افزار مانند Agile و DevOps که از معروف ترین متدولوژی های توسعه ی نرم افزار است، می‌تواند از رخ دادن باگ جلوگیری کند. علت آن این امر است که در این متدولوژی‌ها، مرحله‌ای برای تست کیفیت یا Testing for Quality وجود دارد.

یکی از انواع روش‌های توسعه نرم افزار، توسعه آزمایش محور یا به اصطلاح Test-Driven Development است. عملیات آزمایش در این روش باید قبل از ساخت و کد نویسی یک ویژگی برای نرم افزار و استاندارد سازی آن انجام شود.

یک روش خوب دیگر، استفاده از توسعه مبتنی بر رفتار یا Behavior-Driven Development است. در این روش توسعه دهندگان، یک برنامه را بر اساس نحوه‌ی تعامل کاربر با آن برنامه کد نویسی و مستند سازی می‌کنند.

آزمایش نرم افزار 

آزمایش یا تست کردن نرم افزار یکی از راه های کشف باگ است. به طور کلی سه نوع روش تست نرم افزار وجود دارد که در این قسمت آورده شده است:

  1. تست عملکرد (Functional Testing): شامل تست عملکرد بخش‌های اصلی نرم افزار برای رفع خطا ها قبل از رفتن به مرحله‌‌ی تست بعدی می‌شود. با استفاده از این نوع تست، اطمینان حاصل می‌کنیم که قسمت تست شده‌ی برنامه ی ما به درستی عمل می‌کند. 
  2. تست اکتشافی (Exploratory Testing): این نوع تست شامل تکنیک‌هایی است که در تست عملکرد، کمتر یا اصلا بررسی نمی‌شوند. به عنوان مثال یکی از انواع تست‌های اکتشافی، تست پوشش یا Coverage Test است که بررسی می‌کند آیا یک برنامه‌ی کاربردی در دستگاه‌ها و مرورگرها یا سیستم عامل های مختلف درست کار می‌کند یا خیر.
  3. تست رگرسیون (Regression Testing): یکی از پرکاربرد ترین تست‌ها، تست رگرسیون می‌باشد. این تست برای این صورت می‌پذیرد که توسعه دهنده ببیند که آیا تغییراتی که اخیرا در کد اعمال شده، باعث ایجاد مشکلات ناخواسته شده است یا خیر ؟ تست رگرسیون شامل انواع زیر است:

توسعه دهندگان نرم افزار می‌توانند با تست‌های زودهنگام و مکرر، از رسیدن با‌گ‌ها به کاربران جلوگیری کنند. مثلا کدهای همدیگر را بررسی کنند تا مشکلی نداشته باشد. در شرکت‌های توسعه‌‌ی نرم افزاری معمولا از تیم های تضمین کیفیت یا QA برای این مورد استفاده می‌کنند.

تست بنچمارک

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

باگ‌هایی وجود دارد که ممکن است تحت شرایطی وجود نداشته باشند، اما در شرایط دیگر، مشکلات جدی ایجاد کنند. تست بنچمارک می‌تواند به شناسایی چنین باگ‌هایی کمک کند. برخی از انواع تست های بنچمارک به شرح زیر است:

  1. تست بنچمارک بارگذاری (Load Benchmarking): این نوع تست بنچمارک، سیستم‌های نرم افزاری را تحت یک میزان بار خاص ارزیابی می‌کند که اغلب مقدار معمول ترافیک مورد انتظار برای یک نرم افزار است.
  2. تست بنچمارک Spike: در این نوع تست، حجم کار یا میزان بار، به صورت ناگهانی افزایش می‌یابد و سپس عملکرد نرم افزار تحت این شرایط ارزیابی می‌شود.
  3. تست بنچمارک نقطعه انفصال (Breakpoint Benchmarking): در این نوع تست، نرم افزار را به شدت تحت فشار قرار می‌دهیم تا ببینیم قبل از خراب شدن یا به اصطلاح کرش کردن نرم افزار، چقدر می‌تواند استرس یا فشار را تحمل کند.

نحوه رفع باگ

دیباگینگ یا اشکال زدایی

وقتی در یک نرم افزار، یک باگ پیدا شد، باید آن باگ را رفع کرد. عملیات مربوط به رفع باگ یا دیباگینگ، از سه مرحله‌ی زیر تشکیل شده است:

  1. ایزوله کردن باگ
  2. پیدا کردن منشا اصلی باگ
  3. رفع باگ و حل کردن مشکل

برای برنامه نویسان، بررسی کردن کدهایی که نوشته‌اند و مرور مجدد کد هایشان که بسیار هم زیاد است ممکن است سخت باشد. یکی از راه های جالب رفع باگ‌ها، برنامه‌های پاداش محور یا Bug Bounty Pogram هستند. در این روش، به کسانی که مشکلات نرم افزاری را پیدا کنند یا باگی را گزارش دهند، پاداش داده می‌شود. پیدا کردن این موارد معمولا به دست محققان امنیت نرم افزار یا هکرهای قانونمند انجام می‌شود.

پیشرفت مداوم

سازمان هایی که به دنبال این هستند که باگ های نرم افزاری را به حداقل برسانند، باید بین تعداد عرضه‌ها و بازگرداندن نسخه‌های نرم افزاری یا همان تعداد Rollout ها و Rollback هایی که انجام می‌دهند، تعادل ایجاد کنند. با انجام این کار، اطمینان حاصل می‌شود تا هیچ خللی در فرآیند برنامه‌ریزی انتشار نرم افزار وارد نمی‌شود. در سازمان هایی که از متدولوژی Agile استفاده می‌کنند این کار صورت می‌گیرد.

در این تصویر هشت روش برای برطرف کردن باگ نام برده شده است.

 با این وجود، برخی از باگ ها در محصول منتشر شده نیز همچنان وجود دارند. تیم های توسعه دهنده می‌توانند انتشار یک نرم افزار را به عنوان یک فرایند دیباگینگ در نظر بگیرند و به حل مشکلات آن و ایجاد بهبود در نرم افزار بپردازند.

یک تیم یا یک فرد در تیم توسعه ی نرم افزار ممکن است هر روز یک زمان ثابتی را به رفع باگ ها اختصاص دهد. به این ترتیب جمع آوری داده ها در مورد باگ ها و خود فرایند دیباگینگ به بخشی از برنامه روزانه تبدیل می‌شود. یک تیم می‌تواند از این داده های جمع آوری شده برای تخمین مدت زمانی که یک اصلاح باگ طول می‌کشد استفاده کند و برنامه های خود را بر اساس این زمان ها سازماندهی کند.

رفع تمامی باگ ها به یکباره، تقریبا غیر ممکن است و جمع آوری داده های مورد نیاز برای تخمین زدن زمان حدودی برای وقوع و رفع باگ نیز زمانبر است. برنامه نویسان در سطح مهارت برنامه نویسی و قابلیتشان، با هم تفاوت دارند و نحوه و زمان مورد نیاز برای رفع باگ ها در بین برنامه نویسان نیز متفاوت است. با گذشت زمان، یک تیم می‌تواند ببیند که چه تعداد باگ را می‌تواند در یک ماه رفع کند.

لازم است بگوییم که دیباگینگ پایان ماجرا نیست. باگ های جدید همواره ظاهر می‌شوند. هدف تیم های توسعه دهنده باید رفع این باگ ها به صورت کارآمد باشد تا هم در زمان و هم در هزینه صرفه جویی شود و انتشار نسخه های مختلف نرم افزار به درستی انجام شود.

تاریخچه باگ های نرم افزاری

کلمه‌ی باگ اصطلاحی است که در حوزه‌ی مهندسی استفاده می‌شود. کاربرد این اصطلاح به گریس هاپر (Grace Hopper) که از اولین برنامه نویسان کامپیوتری بود نسبت داده می‌شود. در سال 1944، هاپر یک افسر جوان نیروی دریایی بود که در هاروارد بر روی کامپیوتر Mark کار می‌کرد. هاپر توضیح داد که در آن موقع یک مشکلی برای کامپیوتر بوجود آمده بود. با بررسی کامپیوتر و قطعات الکتریکی آن، متوجه شدند که یک حشره (باگ در زبان فارسی به معنای حشره است) در واقع یک نوع پروانه بین دو رله‌ی الکتریکی گیر کرده و باعث اتصال کوتاه شده است. نیروی دریایی این پروانه‌ها سال‌ها به نمایش گذاشته بود. این پروانه اکنون در موزه‌ی Smithsonian نگهداری می‌شود.

اگرچه باگ کامپیوتری معمولا آزار دهنده است، اما در بعضی مواقع تاثیر آنها می‌تواند جدی‌تر باشد. در سال 2005 مقاله ی Wired در مورد 10 تا از بدترین باگ های نرم افزاری در تاریخ گزارش داده بود که باگ های نرم افزاری باعث انفجار های عظیم، فلج کردن کاوشگرهای فضایی و حتی کشته شدن افراد شده است. به عنوان مثال در سال 1982، یک سیستم که گفته می‌شود توسط CIA جاسازی شده بود تا خط لوله گاز ترانس سیبری را کنترل کند، باعث بوجود آمدن بزرگترین انفجار غیر هسته‌ای در تاریخ شد.

در این مقاله همچنان نوشته شده است که بین سال های 1985 تا 1987، وجود یک باگ با نام Race Condition در یک دستگاه پرتودرمانی، منجر به ارسال دوزهای کشنده ی پرتو شد که باعث کشته شدن پنج نفر و مجروج شدن چند نفر دیگر شد. همچنین در سال 2005، کمپانی خودرو سازی تویوتا، 160 هزار خودروی پریوس را باز خواند، زیرا یک باگ باعث روشن شدن چراغ های هشدار (Warning) و خاموش شدن موتور بدون هیچ دلیلی شده بود.

از دیگر باگ‌های قابل توجه، وجود یک باگ در سیستم Autopilot ماشین تسلا در سال 2016 بود. یک خودروی تسلا نتوانست یک تریلر تراکتور سفید رنگ را که در حال عبور از بزرگراه بود در مقابل آسمان روشن تشخیص دهد. این باگ باعث تصادف خودرو شد که منجر به مرگ نیز شد.

جمع بندی

باگ‌ها یکی آزاردهنده ترین پدیده‌هایی هستند که داخل یک نرم افزار بوجود می‌آیند. مراحل پیدا کردن و اشکال زدایی (Debugging)دیباگ چیست؟ معرفی روش‌‌ها و ابزارهای دیباگینگ(اشکال زدایی)دیباگ چیست؟ معرفی روش‌‌ها و ابزارهای دیباگینگ(اشکال زدایی)این مقاله عالی مفاهیم دیباگ (debug)، دیباگینگ (Debugging) یا همان اشکال زدایی، دیباگر (Debugger) را معرفی و همچنین روش‌‌ها و ابزارهای دیباگینگ را بررسی کرده ، بسیار فرآیند زمانبر و هزینه‌بری است. ابزار های زیادی برای رفع این باگ‌ها پدید آمده است که دائما در حال بروز رسانی و پیشرفته‌تر شدن هستند. در این مقاله به طور کلی به بررسی انواع باگ‌ها و دسته بندی آنها و همچنین راههای مختلف برای رفع آن‌ها پرداختیم.

باگ چیست؟

باگ یک اصطلاح مهندسی برای وجود یک خطا در کد نویسی یک نرم افزار یا سخت افزار است. وجود باگ در یک برنامه، باعث بوجود آمدن اختلال در عملکرد نرم افزار می‌شود.

آیا باگ ها یک بد افزار یا ویروس هستند؟

خیر، احتمالا در خبرها شنیده‌اید که وجود یک باگ یا یک خطا باعث رخدادن اتفاق های ناگوار مثل انفجار یا تصادف شده است. اما این خطاها ناخواسته بوده اند و به دلیل اشتباه نوشتن یک قسمت از کد بوجود می‌آید. اما بد افزار یا ویروس، ناخواسته نیستند و هدف آنها، مختل کردن سیستم مورد نظر است.

آیا باگ مربوط به نرم افزار می‌شود یا سخت افزار؟

باگ‌ها هم می‌توانند در نرم افزار باشند و هم در سخت افزار. باگ های نرم افزاری، به علت کد نویسی ناصحیح بوجود می‌آیند و باگ های سخت افزاری، به دلیل پیاده سازی ناصحیح مدار ها، طراحی نادرست یا در عملکرد آن‌ها بوجود می‌آیند.

امتیازدهی5 1 1 1 1 1 1 1 1 1 15.00 امتیاز (3 رای)
اشتراک
بارگذاری نظرات
تلگرام اینستاگرام