بازگشت به دوره

مفهوم اشکال‌زدایی و اهمیت آن

در این فصل به بررسی روش‌های اشکال‌زدایی (Debugging) برنامه‌های جاوا اسکریپت و همچنین روش‌های مدیریت خطا (Error Handling یا Exception Handling) در جاوا اسکریپت می‌پردازیم. البته بحث تست و اشکال‌زادیی نرم‌افزار، بحث نسبتاً پیچیده و مفصلی است. در این فصل قصد وارد شدن به جزئیات این بحث را نداریم و صرفاً به صورت مقدماتی با مبانی اشکال‌زادیی و مدیریت خطا در جاوا اسکریپت آشنا می‌شویم. لازم به ذکر است که در فصل‌های باقی مانده‌ی این کتاب نیز مطالبی در رابطه با این موضوع ارائه خواهد شد و به مرور بحث را تکمیل‌تر خواهیم کرد.

آنچه در این فصل می‌آموزید :  

اهمیت اشکال‌زدایی و مدیریت خطا

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

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

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

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

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

تعریف : اشکال یا "Bug" به معنی وجود یک نقص در کدهای برنامه است. برخی اشکالات به راحتی قابل کشف هستند و برخی دیگر به سختی کشف می‌شوند. توجه کنید که اشکالات، درون کدهای برنامه هستند. یعنی اشکالات در ذات برنامه نهفته‌اند و حتی بدون اجرای برنامه نیز وجود دارند. برخی اشکالات همیشه منجر به وقوع خطا در زمان اجرا می‌شوند. اما برخی اشکالات فقط در شرایط خاص منجر به بروز خطا می‌شوند.

تعریف : اگر در زمان اجرای یک برنامه، به دلیل وجود اشکال در برنامه، مشکلی در روند عادی اجرای برنامه پیش آید، وضعیت پیش آمده را یک "استثنا" یا "Exception" می‌نامیم. حال اگر تدابیر لازم برای مدیریت این استثنا اندیشیده شده باشد، برنامه می‌تواند عکس‌العمل مناسب را نشان داده و از توقف برنامه جلوگیری کند. اما اگر تدابیر لازم برای مدیریت این استثنا اندیشیده نشده باشد، برنامه با خطا یا "Error" مواجه می‌شود که نتیجه‌ی آن توقف اجرای برنامه است. پس می‌توان گفت که هر "خطا" یک "استثنا" است که مدیریت نشده است.

نکته : بر خلاف اشکال‌ها (Bugs)، استثناها و خطاها در زمان اجرای برنامه رخ می‌دهند. به عبارت دیگر وجود اشکال در برنامه، لزوماً به معنی بروز یک استثنا یا خطا در زمان اجرا نیست. بلکه وجود اشکال در برنامه می‌تواند در شرایط خاص منجر به بروز استثنا یا خطا شود.

تعریف : به فرآیند کشف و رفع اشکالات یک برنامه، "اشکال‌زدایی" یا "Debugging" گفته می‌شود. همچنین به فرایند مقابله با استثناها و مدیریت آنها و جلوگیری از بروز خطا در زمان اجرای برنامه، اصطلاحاً "مدیریت استثنا" یا "Exception Handling" و همچنین "مدیریت خطا" یا "Error Handling" گفته می‌شود.

نکته : تعاریف فوق بر اساس نیاز این فصل ارائه شده‌اند و ممکن است در منابع دیگر، با تعاریف متفاوتی مواجه شوید.

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