اكتشاف الاخطاء ( للمبتدئين )

الكاتب : الأنيق   المشاهدات : 1,442   الردود : 8    ‏2003-08-03
      مشاركة رقم : 1    ‏2003-08-03
  1. الأنيق

    الأنيق عضو

    التسجيل :
    ‏2003-07-11
    المشاركات:
    34
    الإعجاب :
    0
    [ALIGN=JUSTIFY]مما لا شكل فيه، فان احد اسباب انتشار الشعرات البيضاء في شعور المبرمجين هو الاخطاء البرمجية. فكم من مبرمج كسر شاشة جهازه بسبب كثرة الاخطاء غير المتداركة في برنامجه، وكم من مبرمج اوقف تكملة مشاريعه بسبب عدم معرفة مصدر الخطأ. كتابة برنامج دون اخطاء شئ يتحقق في الخيال فقط! لكن قد تجد اساليب في هذه المقالة لتخفيف الاخطاء والمشاكل البرمجية في برنامجك.

    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 ويظهر تحديد لمكان السطر الذي وقع فيه الخطأ. مثلا اكتب هذا الكود:



    Code:
    --------------------------------------------------------------------------------


    Dim X As Byte
    X = 256



    --------------------------------------------------------------------------------



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



    Code:
    --------------------------------------------------------------------------------


    Kill “FileName.EXT”



    --------------------------------------------------------------------------------



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



    Code:
    --------------------------------------------------------------------------------


    If Dir$(“FileName.EXT”) Then Kill “FileName.EXT”



    --------------------------------------------------------------------------------



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



    Code:
    --------------------------------------------------------------------------------


    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. راقب هذا المثال:



    Code:
    --------------------------------------------------------------------------------


    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 ستجد فيها الكثير من الخدمات الفعالة كمراقبة قيم المتغيرات وتحديد نقاط الايقاف المؤقت للبرنامج.
     
  2.   مشاركة رقم : 2    ‏2003-08-03
  3. مُجَاهِد

    مُجَاهِد قلم ماسي

    التسجيل :
    ‏2003-05-11
    المشاركات:
    14,043
    الإعجاب :
    0
    رائع::أخي الأنيق..

    وتحياتي لك..
     
  4.   مشاركة رقم : 3    ‏2003-08-08
  5. ألوافـي

    ألوافـي عضو

    التسجيل :
    ‏2003-08-08
    المشاركات:
    46
    الإعجاب :
    0

    أخوك الوافي
     
  6.   مشاركة رقم : 4    ‏2003-08-09
  7. afif hydra

    afif hydra عضو

    التسجيل :
    ‏2003-08-09
    المشاركات:
    4
    الإعجاب :
    0
    سلام رائع يا اخي

    :)شيء رائع يااخي :)
    تحياتي لكم:)
     
  8.   مشاركة رقم : 5    ‏2003-08-24
  9. صلاح البعداني

    صلاح البعداني عضو

    التسجيل :
    ‏2003-08-19
    المشاركات:
    108
    الإعجاب :
    0
    اشكرك اخي الأنيق هذي المشاكل والله صحيح طلعت الشيب في راسي


    واتمنى اكرامنا بمواضيع اخرى
     
  10.   مشاركة رقم : 6    ‏2003-08-24
  11. العمراوي

    العمراوي مشرف سابق

    التسجيل :
    ‏2002-11-24
    المشاركات:
    7,510
    الإعجاب :
    4
    حلو جدا ورائع للغاية .,.,.,.,

    أمثال هذه المواضيع هي التي تفيد بالفعل .,.,.,.,

    مشكور أخي على الموضوع ,’,’,’,’
     
  12.   مشاركة رقم : 7    ‏2003-08-24
  13. ابن الاصول

    ابن الاصول قلم فضي

    التسجيل :
    ‏2003-07-21
    المشاركات:
    2,607
    الإعجاب :
    0
    ممتاز
    المزيد من مواضيعك
     
  14.   مشاركة رقم : 8    ‏2003-08-28
  15. م/ محمد أسد

    م/ محمد أسد قلم فضي

    التسجيل :
    ‏2003-06-05
    المشاركات:
    4,873
    الإعجاب :
    0
    نص مقتبس من رسالة : ابن الاصول
     
  16.   مشاركة رقم : 9    ‏2003-08-28
  17. عاشق الابتسامات

    عاشق الابتسامات مشرف سابق

    التسجيل :
    ‏2003-03-28
    المشاركات:
    5,630
    الإعجاب :
    8
    رائع جدا .. اخي الانيق ..
     

مشاركة هذه الصفحة