آشنایی با مفهوم باگ و دیباگ در پایتون

امیرحسین بیگدلو 5 ماه قبل

 #  مفهوم اشکال زدایی

برنامه نویسی یک فرآیند پیچیده است. از آنجایی که این کار توسط انسان انجام می شود، اغلب ممکن است اشتباهاتی رخ دهد. خطاهای برنامه نویسی را باگ(bug) می نامند و به فرآیند ردیابی و اصلاح آنها اشکال زدایی(debugging) می گویند. در زبان انگلیسی bug به معنی حشره است. برخی ادعا می کنند که در سال 1945، یک پروانه مرده باعث ایجاد مشکل در رله شماره 70، پانل F، یکی از اولین رایانه های هاروارد شد و از آن زمان، اصطلاح باگ همچنان استفاده می شود. برای اطلاعات بیشتر در مورد این رویداد تاریخی، اولین باگ را ببینید.

 

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

 

دوره پیشنهادی: دوره آموزش پایتون (python)

 

 +  خطای نحوی

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

 

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

 

 

 +  خطای زمان اجرا

خطای نوع دوم، خطای زمان اجرا(runtime) است، به این دلیل که تا زمانی که برنامه را اجرا نکنید، خطا ظاهر نمی شود. به این خطاها استثنا(exception) نیز می گویند زیرا معمولاً نشان می دهند که اتفاقی استثنایی (و بد) رخ داده است. خطاهای زمان اجرا در برنامه های ساده نادر است، بنابراین ممکن است مدتی طول بکشد تا با آن مواجه شوید.

 

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

 

 

 +  خطای معنایی

سومین نوع خطا، خطای معنایی(semantic) است. خطاهای معنایی برنامه را متوقف نکرده و هیچ پیغام خطایی ایجاد نمیکند. با این حال، برنامه به درستی کار نخواهد کرد و کاری که شما انتظار داشتید را انجام نمیدهد.

 

مشکل اینجاست که برنامه ای که نوشتید برنامه ای نیست که می خواستید بنویسید. معنای برنامه (معناشناسی آن) اشتباه است. شناسایی خطاهای معنایی می‌تواند مشکل باشد، زیرا شما را ملزم می‌کند که به دقت و مرحله به مرحله کدی که نوشته‌اید را بخوانید و آزمایش کنید.

 

 

 #  اشکال زدایی تجربی

یکی از مهم ترین مهارت هایی که به دست می آورید اشکال زدایی است. اگرچه ممکن است اینکار خسته کننده باشد، اشکال زدایی یکی از غنی ترین، چالش برانگیزترین و جالب ترین بخش های برنامه نویسی است.

 

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

 

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

 

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

 

به عنوان مثال، لینوکس یک هسته سیستم عامل است که حاوی میلیون ها خط کد است، اما به عنوان یک برنامه ساده که لینوس توروالدز برای کاوش تراشه اینتل 80386 استفاده کرد، شروع شد. به گفته لری گرینفیلد، یکی از پروژه های قبلی لینوس برنامه ای بود که بین نمایش AAAA و BBBB تغییر می کرد. این بعداً به لینوکس تبدیل شد.

مطالب مشابه



مونگارد