كاتب الموضوع : أحمد جمال

هي مجموعة من الدروس والمقالات التي كانت موجودة منذ مدة في المنتديات ولكنها ضاعت مع ضياع قاعدة البيانات ، هذه واحدة منها :
اعداد : الأستاذ : تركي العسيري .
عنوان الموضوع : الأخطاء البرمجية .


مما لا شك فيه، فان احد اسباب انتشار الشعرات البيضاء في شعور المبرمجين هو الاخطاء البرمجية. فكم من مبرمج كسر شاشة جهازه بسبب كثرة الاخطاء غير المتداركة في برنامجه، وكم من مبرمج اوقف تكملة مشاريعه بسبب عدم معرفة مصدر الخطأ. كتابة برنامج دون اخطاء شئ يتحقق في الخيال فقط! لكن قد تجد اساليب في هذه المقالة لتخفيف الاخطاء والمشاكل البرمجية في برنامجك.

1 - فكرة عامة
تصنف الاخطاء في أي لغة برمجة الى قسمين على اساس وقت حدوثها اما في وقت التصميم او وقت التنفيذ. هذه الاخطاء تسبب انهيار برنامجك وانهاء تنفيذه. بالاضافة الى ذلك، يوجد نوع من الاخطاء التي لا تظهر لك بشكل مباشر تعرف بالشوائب. لنلقي نظرات الى هذه الانواع:
اخطاء وقت التصميم Design Time Errors
وقد تسمى ايضا بالاخطاء النحوية Syntax Errors وهي اسهل انواع الاخطاء اكتشافا واصلاحا. وقت حدوث هذه الاخطاء يكون في مرحلة التصميم او الترجمة للبرنامج. سببها الرئيسي في طريقة كتابة العبارات البرمجية الخاطئة. فمثلا قد تكتب اسم دالة ليست موجودة، او تنشئ حلقة For بدون اقفالها باستخدام Next.
توفر لك بيئة التطوير المتكاملة لـ Visual Basic اداة في قمة الروعة هدفها قنص هذه الاخطاء تلقائيا بمجرد الوقوع فيها وذلك بعد الضغط على المفتاح ENTER. مثلا، قم بكتابة X == 4 واضغط مفتاح الادخال ستلاحظ ظهور رسالة توضح لك الخطأ وقد قلب لون السطر بالاحمر. تعرف هذه الميزة بالتدقيق النحوي التلقائي Auto Syntax Check والتي تستطيع الغاء عن طريق الاختيار Auto Syntax Check الموجود في خانة التبويب Editor في نافذة الخيارات Options. لا اعتقد انك ستلغيها يوما من الايام اليس كذلك؟!

اخطاء وقت التنفيذ Run Time Errors
وقت ظهور هذه الاخطاء مختلف. فلن تظهر الرسالة المزعجة وقت كتابة الكود وانما في وقت التنفيذ (أي بعد الضغط على F5). عندما يصل المفسر عند سطرصحيح نحويا لكنه خاطئ منطقيا ستظهر رسالة مفيدة بعنوان Run Time Error ويظهر تحديد لمكان السطر الذي وقع فيه الخطأ. مثلا اكتب هذا الكود:



كود:
Dim X As Byte
X = 256

من الواضح ان الصيغة النحوية لهذا الكود صحيحة لكن منطقيا خطأ! جرب تنفيذ البرنامج وستلاحظ ظهور رسالة خطأ OverFlow بسبب ان القيمة القصوى التي يحملها أي متغير من نوع Byte هي 255. طبعا اخطاء وقت التنفيذ كثيرة جدا جدا، فانت عندما تصمم البرنامج تتوقع ان كل الاحتمالات الخارجية كما هي في حالة تصميم البرنامج. مثلا لو وجد في احد سطور برنامج امر يقوم بمسح ملف معين وكتبت هذا الكود:



كود:
Kill “FileName.EXT”

قد عمل معك بالشكل المطلوب، لكن افترض ان الملف لم يكن موجود؟ فان رسالة الخطأ سيكون لها نصيب من عمر تنفيذ البرنامج. فلو كنت ذكيا ستتأكد من وجود الملف باستخدام دالة Dir ومن ثم حذفه:


كود:
If Dir$(“FileName.EXT”) Then Kill “FileName.EXT”

يبدو ان ذكائك خارق جدا يا قارئ هذه السطور لكن مهلا كاتب هذه السطور لديه شئ اخر ليخبرك. ماذا لو كان الملف موجود لكن خاصية ReadOnly مدعومة به أي انه غير قابل للحذف؟؟ ارأيت رسالة الخطأ ستظهر من جديد. اذا ستستخدم ذكائك الخارق وتتأكد من وجود الملف ومن ثم من عدم وجود خاصية ReadOnly:



كود:
If Dir$(“FileName.EXT”) Then
If Not (GetAttr("FileName.EXT”) And vbReadOnly) Then
Kill “FileName.EXT”
End If
End If

حسنا يا قارئي الفاضل. لك مني فائق التقدير والاحترام على محاولتك الرائعة لتجنب الخطأ لكن مع ذلك فهناك احتمال اخر لوقوع الخطأ!!! افترض ان الملف FileName.EXT يتم استخدامه من قبل برنامج اخر Process وكانت عليه خاصية الاقفال (أي مسموح للبرنامج الذي يستخدمه فقط) فانك لن تستطيع فتح الملف وستظهر رسالة الخطأ التي اخبرتك بها واكون قد غلبتك في هذا التحدي.
القضية ليست من يغلب من، فكلنا مبرمجين ننسى كثيرا. لكن لابد من أي مبرمج وضع جميع وكافة الاحتمالات الممكنة لتفادي وتجنب الاخطاء كما سنرى لاحقا.

الشوائب Bugs
قد يكون الكود سليم من ناحية نحوية ولا توجد به أي اخطاء في وقت التنفيذ لكن به شوائب. لا يوجد برنامج الا وبه شوائب. الشوائب هي اخطاء في سلوك تنفيذ البرنامج لكنها لا تسبب في ايقافه، وهي صعبة الايجاد والاكتشاف. لذلك، تجد غالبا في البرامج التجارية الكبيرة صدور نسخ تجريبية Beta توزع على اشخاص وشركات معينة الهدف منها تجربة البرنامج والتحقق من واكتشاف الشوائب الموجودة فيه. من اكبر الاخطاء الذي يقع فيها المبرمج هي محاولة اكتشاف الشوائب بنفسه! والصحيح لن تستطيع اكتشاف الشوائب الا عن طريق غيرك. ففي حالة تجربة برامجك الشخصية فانك اكثر من يعرف طريقة التعامل معها، لكن في حالة وجود نسخة من البرنامج عند شخص اخر فالوضع يختلف، وتبدأ الشوائب بالظهور لديه.

Visual Basic به شوائب!!! هناك الكثير من الشوائب التي تكتشف شهريا وتصدر شركة Microsoft تقارير عنها تجدها بشكل دوري في مكتبة MSDN، بعضها تم اصلاحه وبعض لا. المقصد من هذا الكلام، انه مهما كان مستواك في البرمجة لابد من وجود شوائب في برنامجك.
يوجد الكثير من الكتب التي تناقش مسألة الشوائب البرمجية وكيفية تفاديها اقصد الاقلال منها. احاول في نهاية هذه المقالة اعطاءك تلميحات شخصية قد تفيدك لتجنب الشوائب.

2 - تفادي الاخطاء
الكائن Err
عودا الى موضوع اخطاء وقت التشغيل وبالتحديد في مثال الملف FileName.EXT، بدلا من كتابة عشرات الاسطر للتأكد من قابلية حذف الملف، استخدم كائن الخطأ Err. قبل تطبيق هذا الكائن لا بد من معرفة أي كل خطأ من اخطاء وقت التشغيل له رقم خاص فيه ووصف. وعند حدوث الخطأ يتم وضع هذه البيانات (الخاصة بالخطأ) في الكائن Err. عند رغبتك في الاستمرار في عملية تنفيذ البرنامج حتى عند وقوع الخطأ لابد من كتابة التعليمة On Error Resume Next عند بداية كل اجراء حتى يستمر في تنفيذ سطور البرنامج وهي افضل من On Error Goto X. راقب هذا المثال:



كود:
 
On Error Resume Next
Kill “FileName.EXT”
If Err Then
MsgBox Err.Description
Err.Clear
End If

هنا سنقوم بمحاولة حذف الملف. ان لم يستطع البرنامج فعل ذلك فان الكائن Err سيحتوي على خصائص تتعلق بذلك الخطأ. كما تلاحظ، سنظهر رسالة توضح وصف الخطأ. من المهم التأكد من تنظيف الكائن Err عن طريق استدعاء الطريقة Clear حتى تخبر البرنامج اننا انتهينا من قنص الخطأ وانه لا يوجد خطأ اخر.

طريقة مفيدة لتجنب الشوائب
تجنب الشوائب يحتاج الى كتب لا نهاية لها! الا انني ساعرض لك طريقة معروفة لمحاولة معرفة اسباب حدوث الشوائب واصلاحها وهي التنفيذ خطوة خطوة! المقصد تنفيذ سطر تلو الاخر عن طريق الضغط على مفتاح F8 للانتقال الى تنفيذ السطر التالي او Shift + F8 لتنفيذ اجراء كامل. من المهم ان اذكر هنا، ان بعض الاحداث كـ KeyUp و غيرها لن يتم تنفيذها بالشكل الصحيح. بالاضافة الى ذلك، اجعل قيمة الخاصية Interval لاداة المؤقت Timer مساوية للصفر حتى لا تزعك كثرة الانتقال الى كود الاداة. ايضا الق نظرة الى قائمة Debug ستجد فيها الكثير من الخدمات الفعالة كمراقبة قيم المتغيرات وتحديد نقاط الايقاف المؤقت للبرنامج.

خاتمة
ناقشت في هذه المقالة موضوع الاخطاء وصنفتها حسب وقت حدوثها. كما تطرقت الى موضوع الشوائب وهو موضوع كبير لا نهاية له وطريقة التنفيذ خطوة خطوة لمعرفة اسباب حدوثها.