الدرس الخامس: تصنيف واكتشاف أخطاء البرمجة (Syntax, Runtime, Logic Errors) واستراتيجيات تصحيحها
يُعد اكتشاف الأخطاء البرمجية وتصحيحها (Debugging & Testing) من أهم المهارات الاحترافية التي تميز المبرمج البارع عن غيره. لا يوجد برنامج يخلو من الأخطاء في مسودته الأولى، ولكن الفارق يكمن في القدرة التحليلية على تصنيف الخطأ ومعرفة مصدره وكيفية معالجته. تنقسم الأخطاء البرمجية في هندسة البرمجيات إلى ثلاثة أصناف معيارية: أولاً، الأخطاء اللغوية والنحوية (Syntax Errors) التي تنشأ عن مخالفة قواعد لغة البرمجة ويكتشفها المترجم فوراً قبل التنفيذ. ثانياً، أخطاء وقت التشغيل (Runtime Errors) التي تظهر فجأة أثناء عمل البرنامج وتؤدي لانهياره مثل القسمة على صفر أو نفاد الذاكرة. ثالثاً وأخطرها، الأخطاء المنطقية (Logic Errors) التي يمر فيها البرنامج دون أي توقف لكنه يعطي نتائج حسابية خاطئة كاستخدام علامة الجمع بدلاً من الضرب، والتي تستوجب استخدام بيانات الاختبار وجدولة التتبع لاكتشافها وتصحيحها وفق المعايير الوزارية والوطنية المعتمدة.
1. الأنواع الثلاثة للأخطاء البرمجية
| نوع الخطأ | وقت الاكتشاف | السبب النموذجي | مثال |
|---|---|---|---|
| أخطاء لغوية (Syntax Errors) | أثناء كتابة الكود أو ترجمته (Compile-time) | مخالفة قواعد هجاء وصياغة لغة البرمجة | كتابة Prnt بدلاً من Print أو نسيان قوس |
| أخطاء تشغيلية (Runtime Errors) | أثناء تشغيل وتنفيذ البرنامج (Run-time) | طلب عملية حسابية مستحيلة أو خطأ في موارد النظام | القسمة على صفر، أو إدخال حروف لمتغير رقمي |
| أخطاء منطقية (Logic Errors) | عند مقارنة النتائج الفعلية بالمتوقعة | كتابة صياغة رياضية أو شرطية غير صحيحة فكرياً | كتابة Area = L + W بدلاً من L × W |
2. لماذا تُعد الأخطاء المنطقية هي الأخطر؟
- صمت المترجم: المترجم لا يصدر أي رسالة تحذير أو خطأ، لأن الكود مكتوب بقواعد نحوية صحيحة 100%.
- استمرار البرنامج: البرنامج يعمل بسلاسة كاملة وينتهي بنجاح ظاهري ولكن كل نتائجه وأرقامه مغلوطة تماماً.
- طريقة الاكتشاف الوحيدة: تتطلب إخضاع البرنامج لاختبار صارم ببيانات اختبار (Test Data) معلومة النتائج مسبقاً وتتبع المتغيرات بجدول التتبع.
3. أدوات واستراتيجيات تصحيح الأخطاء (Debugging Techniques)
نقاط التوقف (Breakpoints)
إيقاف مؤقت لتنفيذ البرنامج عند سطر معين لفحص قيم المتغيرات في الذاكرة في تلك اللحظة.
التنفيذ خطوة بخطوة (Step-By-Step)
تشغيل أسطر الكود سطراً تلو الآخر لمراقبة مسار التفرع وتغير قيم العدادات مباشرة.
معالجة الاستثناءات (Try-Catch)
اعتراض أخطاء التشغيل برمجياً ومنع انهيار البرنامج وعرض رسالة إرشادية مهذبة للمستخدم.
تمرين 1: تصنيف خطأ إملائي
المسألة: كتب مبرمج السطر Dim X As Intger فرفض المترجم ترجمة الكود، ما نوع هذا الخطأ؟
• هذا خطأ لغوي نحوي (Syntax Error).
• السبب: كتابة الكلمة المحجوزة
Integer بشكل إملائي خاطئ Intger مما يخالف القواعد الصارمة للغة البرمجة.
تمرين 2: تصنيف خطأ معادلة المحيط
المسألة: كتب مبرمج لحساب محيط المستطيل: Perimeter = L + W * 2، فكانت النتيجة خاطئة، ما نوع الخطأ؟
• هذا خطأ منطقي (Logic Error).
• السبب: بسبب أولويات العمليات الحسابية تم ضرب W في 2 أولاً ثم جمع L.
• التصحيح بوضع الأقواس:
Perimeter = (L + W) * 2.
تمرين 3: تصنيف توقف مفاجئ للبرنامج
المسألة: أثناء تشغيل آلة حاسبة، أدخل المستخدم الرقم صفر كمقام، فتوقف البرنامج وأغلق فجأة، ما نوع هذا الخطأ؟
• هذا خطأ وقت التشغيل (Runtime Error).
• السبب: محاولة تنفيذ عملية حسابية غير معرفة رياضياً (Division by zero) أثناء التنفيذ الفعلي للبرنامج.
تمرين 4: تصنيف إدخال نص في حقل رقمي
المسألة: برنامج يطلب العمر كرقم صحيح، فأدخل المستخدم كلمة "عشرين"، ما الخطأ المتوقع؟
• خطأ وقت التشغيل (Runtime Error) ويسمى خطأ عدم تطابق نوع البيانات (Data Type Mismatch).
تمرين 5: خطأ في شرط النجاح
المسألة: مبرمج كتب If Degree > 50 Then Print "ناجح"، فحصل الطالب الحاصل على 50 على "راسب"، ما نوع الخطأ؟
• هذا خطأ منطقي (Logic Error).
• التصحيح: إضافة علامة المساواة
Degree >= 50 لأن درجة 50 تعتبر درجة نجاح رسمياً.
تمرين 6: مقارنة بين Syntax Error و Logic Error
المسألة: قارن بين الخطأ اللغوي والخطأ المنطقي من حيث سهولة الاكتشاف.
• الخطأ اللغوي: سهل الاكتشاف جداً، لأن المترجم يحدده فوراً ويشير إلى رقم السطر وسبب الخطأ.
• الخطأ المنطقي: صعب الاكتشاف ويتطلب مراجعة شاملة وتتبعاً للمتغيرات لأن البرنامج لا يظهر أي رسائل خطأ.
تمرين 7: نسيان إغلاق الأقواس
المسألة: الكود: Average = (A + B + C / 3 ، ما نوع الخطأ الحادث؟
• خطأ لغوي نحوي (Syntax Error) لعدم إغلاق القوس المفتوح، ويرفض المترجم تشغيل البرنامج.
تمرين 8: دور بيانات الاختبار
المسألة: كيف تسهم بيانات الاختبار (Test Data) في كشف الأخطاء المنطقية الخفية؟
• بتزويد البرنامج بمدخلات معروفة النتائج مسبقاً، عند مقارنة النتيجة الصادرة بالنتيجة الصحيحة يتضح فوراً وجود خطأ منطقي في حال اختلافهما.
اضغط على أي بطاقة لاكتشاف المعنى الدقيق، واضغط على أيقونة الصوت للاستماع للنطق:
اضغط على الإجابة لتتحقق من فهمك وتكتشف التفسير النموذجي فورياً: