زمانی که وارد مرحله یادگیری علوم کامپیوتر و برنامه نویسی میشوید از جمله واژه هایی که بسیار با آن مواجه خواهید شد باگ (Bug) و دیباگ (Debug) هستند . در این نوشته میخواهیم این مفاهیم را مورد بررسی قرار دهیم.
باگ در علم برنامه نویسی کامپیوتر و مهندسی به معنای خطاهایی است که در برنامه های نرم افزاری رخ میدهد و مانع عملکرد صحیح آن میشود.
دیباگ کردن هم یک فرایند چند مرحله ای شامل یافتن و شناسایی مشکل ، جداسازی منبع مشکل و سپس حل مشکل یا پیدا کردن راهی برای کار کردن روی مشکل است. آخرین مرحله در دیباگ کردن تست این است که آیا مشکل به طور کامل حل شده یا پا همچنان پا برجاست.
تاریخچه و منشا واژه های باگ و دیباگ
واژه های باگ و دیباگ کردن برای نخستین بار در سال ۱۹۴۰ مطرح شد . زمانی که گریس هوپر (Grace Hopper) مشغول کار روی کامپیوتر Mark ll دانشگاه هاروارد بود، دستیاران و همکاران وی با یک پروانه مواجه شدند که به یک رله از این کامپیوتر چسبیده بود و مانع عملکر صحیح آن شده بود ، او در گزارش خود اعلام کرد که آن ها در حال “دیباگ کردن” سیستم هستند.
با این وجود منشا واژه “باگ” در معنای “مشکل تکنیکی” به سال ۱۸۷۸ و زمان توماس ادیسون باز میگردد.
انواع باگ ها یا خطاهای نرم افزاری
معمولا تمام برنامه هایی که به زبان های گوناگون نوشته میشوند در همان ابتدا درست کار نمیکنند و نیازمند به دیباگ کردن یا همان عیب یابی هستند. این خطاها انواع مختلفی دارند ، برخی از آنها به سادگی و در زمان کامپایل کردن برنامه ها توسط کامپایلر شناسایی میشود اما برخی نیازمند صرف زمان بسیار زیاد است تا شناسایی و رفع شود.
در ادامه به انواع این خطاها اشاره میکنیم:
۱ .خطاهای نحوی یا syntax :
هر زبان برنامه نویس قواعد خاص خودش را دارد.شبیه به زبان فارسی یا انگلیسی. به طور مثال در هرکدام از زبان های فارسی و انگلیسی فعال ، فاعل، مفعول و سایر اعضای جمله باید در مکان مشخصی به کار بروند تا از نظر دستور زبان آن زبان جملات درستی تولید شود.
در زبان های برنامه نویسی هم به همین شکل است. به طور مثال در زبان برنامه نویس C یا C++ در انتهای هر جمله یا Statement باید یک ; نوشته شود و در غیر این صورت کامپایلر یک خطای دستوری تشخیص داده و برنامه شما اجرا نخواهد شد . یا به عنوان مثالی دیگر در زبان C شما باید پیش از استفاده از متغیر نوع آن را مشخص کنید(عدد ، رشته ، آرایه و یا…) در حالی که در زبان پایتون شما بدون تعریف نوع متغیر از آن استفاده میکنید.
شما به هر زبانی که برنامه مینویسید باید به قواعد دستوری یا syntax ی آن آشنا باشید تا بروز این خطاها جلوگیری کنید. این خطاها از دسته خطاهایی هستند که با استفاده از IDE مناسب ، به سادگی در زمان کامپایل برنامه شناسایی میشوند و شما میتوانید آن ها را برطرف کنید.
۲٫ خطای منطقی
این خطاها زمانی رخ میدهند که نتایجی که توسط برنامه کامپیوتری تولید میشود با نتایج مورد انتظار شما متفاوت باشد.
این دسته از خطاها در دسته سخت ترین خطاهای برنامه نویسی به شمار میروند و شاید برای یافتن و رفع آن ها نیاز به ماه ها بررسی و تلاش باشد.
به طور مثال شما برنامه ای نوشتید که حاصل ضرب عبارات را محاسبه میکند ، شما انتظار دارید حاصل ضرب ۲ در ۲ عبارت ۴ باشد در حالی که خروجی برنامه عددی غیر از ۴ است . معمولا یافتن محل رخ دادن این خطاها نیاز به بررسی های زیادی دارد.
۳٫ خطای معنایی یا Semantic
این خطاها زمانی رخ میدهند که منطق و قواعد دستوری توسط شما به خوبی رعایت شده است اما نتیجه ای که در انتها به شما نمایش داده میشود مطلوب شما نیست.
این خطاها معمولا به دلیل استفاده نادرست از عبارات و دستور العمل ها به وجود می آیند. به طور مثال در زبان فارسی شما باید فعل را در انتهای جملات به کار ببرید ، اگر به جای اینکه بنویسید علی پسر خوبی است ، بنویسید علی خوبی است پسر ، مرتکب خطای دستوری یا syntax ی شده اید ، اما اگر بنویسید علی درخت است ، با اینکه قواعد دستوری را به درستی رعایت کردید جمله از نظر مفهومی غلط و اشتباه است و شما مرتکیب خطای معنایی یا semantic شده اید.
فرآیند دیباگ کردن (Debugging)
در توسعه نرم افزار ، فرآیند دیباگ کردن یا عیب یابی به معنای یافتن مشکل کدهای برنامه ها و حل آن هاست. این فرآیند بخشی جداناپذیر در توسعه نرم افزار است .
دیباگ کردن از همان ابتدا که کدهای برنامه نوشته میشود شروع میشود و در زمان توسعه کدها و تلفیق آنها با سایر بخش های نرم افزاری نیز ادامه پیدا میکند.در برنامه های بزرگی که هزاران خط کد دارند Debugging میتوانید با انجام دادن استراتژی هایی مانند ، تست واحد ها(unit tests) ، مرور کدها (Code reviews) و برنامه نویسی جفتی (Pair programming) این فرآیند را ساده تر کنید.
زمانی که خطایی در یک برنامه کامپیوتری رخ میدهد ،یافتن محل رخ دادن خطا امری مهم و ضروری است و این کار میتواند به دو شکل انجام شود :
- استفاده از ابزار های دیباگ کردن (Debugger ها )
- با استفاده از نرم افزارهای IDE . این نرم افزارها یک دیباگر هم در کنار سایر ابزارهای خود در اختیار کاربران قرار میدهند.
بسته به زبان برنامه نویسی هر کدام از این ابزارها میتواند متفاوت باشد ، در مقالات بعدی درباره IDE های معروف و قابلیت هایی هر کدام دارند اشاراتی خواهیم داشت.