0 من 15 يومًا نسبة الإنجاز: 0%
الأسبوع الثالث - اليوم الثالث عشر

المنهجية في اكتشاف الأخطاء وإصلاحها (Debugging)

⏱ ساعة واحدة ⚙ نظري وعملي
مخرجات التعلم
  • شرح أهمية استخدام خطوات منهجية لاكتشاف الأخطاء وإصلاحها (Debugging) في تطوير البرمجيات.
  • عزل اللبنات البرمجية الخاطئة عن طريق تقسيم المقاطع المعقدة إلى أجزاء صغيرة قابلة للاختبار.
  • اكتشاف وإصلاح ما لا يقل عن 3 أخطاء برمجية (Bugs) مجهزة مسبقاً في مشروع معطل.
  • التحقق من صحة الإصلاحات عن طريق اختبار "الحالات المتطرفة" (Edge Cases) لضمان استقرار الأداء.

1. أهمية المنهجية في اكتشاف الأخطاء وإصلاحها

في عالم البرمجة، تُعرف الأخطاء باسم (Bugs)، وتُسمى عملية البحث عنها وإصلاحها (Debugging). عندما يفشل المشروع في العمل بشكل صحيح، يكون التخمين العشوائي بطيئاً وغير فعّال. لذا، يستخدم المبرمجون منهجية واضحة: أولاً، ملاحظة السلوك الخاطئ؛ ثانياً، تحديد المقطع البرمجي المسؤول؛ ثالثاً، عزل اللبنات البرمجية واختبارها؛ رابعاً، إصلاح الخطأ المنطقي؛ وخامساً، إعادة الاختبار للتأكد من نجاح الإصلاح. تُعلّم هذه الخطوات مهارات التفكير المنطقي وحل المشكلات بفعالية.

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

Systematic Debugging Cycle
الشكل 13.1: مخطط انسيابي يمثل دورة اكتشاف الأخطاء وإصلاحها المنهجية.

2. عزل اللبنات البرمجية الخاطئة لاختبارها

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

يساعد فصل اللبنات عن بعضها في عزل مسارات التنفيذ. فمثلاً، إذا كانت الشخصية تقفز، وتدور، وتشغل الموسيقى، ولكنها تعلق في الهواء ولا تنزل، يمكنك فصل لبنات الدوران والصوت مؤقتاً. سيسمح لك اختبار مقطع "القفز" وحده بالتحقق من صحة حسابات الإحداثيات (س وص) قبل إعادة إضافة السلوكيات الأخرى.

Block Unsnapping for Code Isolation
الشكل 13.2: مثال مرئي لفصل اللبنات عن بعضها لعزل المقاطع البرمجية الخاطئة.

3. اكتشاف وإصلاح الأخطاء المنطقية في الأكواد

عادةً ما تنتج الأخطاء البرمجية عن أخطاء منطقية بسيطة في اختيار أو تركيب اللبنات. من الأخطاء الشائعة: استخدام غيّر الموضع س بمقدار بدلاً من غيّر الموضع ص بمقدار للحركة الرأسية، أو استخدام لبنة اجعل [النتيجة] مساوياً 1 بدلاً من غيّر [النتيجة] بمقدار 1 لزيادة النقاط، أو وضع اللبنة خارج الحلقة التكرارية عندما يُفترض أن تتكرر باستمرار. تصحيح هذه الأخطاء يعيد الكود للعمل بشكل سليم.

يبني منطق اكتشاف الأخطاء وعياً عميقاً بأساسيات البرمجة. يجب عليك قراءة الكود كما يفعل الحاسوب: أمراً تلو الآخر. التحقق من تفاصيل المعاملات (Parameters)، القوائم المنسدلة، وحدود الحلقات التكرارية يكشف عن الأخطاء الخفية ويضمن تنفيذ البرنامج الصحيح.

Edge Case Value Matrix
الشكل 13.3: مصفوفة توضح الفرق بين القيم العادية والحالات المتطرفة (Edge Cases) لاختبار استقرار الكود.

4. التحقق من الإصلاحات باختبار "الحالات المتطرفة" (Edge Cases)

يكون الإصلاح ناجحاً فقط إذا كان يعمل تحت جميع الظروف، وليس فقط أثناء اللعب العادي. يقوم المبرمجون باختبار الحالات المتطرفة (Edge Cases) وهي ظروف قاسية أو غير معتادة قد تؤدي إلى انهيار الكود. تتضمن الأمثلة: اختبار ما يحدث عندما تنخفض النتيجة إلى أقل من الصفر، عندما يلامس الكائن عدة جدران في نفس الوقت، أو عندما ينقر المستخدم على الأزرار بشكل جنوني وسريع، مما يضمن أن يكون الكود الخاص بك مستقراً وقوياً.

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

نشاط عملي

تطبيق عملي: تصحيح أخطاء مقطع برمجي معطل للحركة

  1. قم ببناء هذا المقطع البرمجي "المعطل" عمداً على كائن: [عند النقر على العلم الأخضر]، [اجعل (النتيجة) مساوياً 0]. [كرِّر باستمرار]: [غيّر الموضع س بمقدار 5]، وبداخله شرط: [إذا ملامس للون الخلفية] إذن [غيّر (النتيجة) بمقدار 0] (بدلاً من 1).
  2. قم بتشغيل المقطع البرمجي. لاحظ أن الكائن يتحرك للأمام تلقائياً، ويعلق في الجدران، ولا تزداد النتيجة عند ملامسة الهدف.
  3. افصل لبنات التصادم وتسجيل النقاط عن الحلقة التكرارية لعزل كود الحركة واختباره.
  4. إصلاح الخطأ 1: عدّل لبنات الحركة بحيث يتحرك الكائن فقط عند الضغط على مفاتيح الأسهم.
  5. إصلاح الخطأ 2: غيّر لبنة تحديث النتيجة الخاطئة غيّر [النتيجة] بمقدار 0 إلى غيّر [النتيجة] بمقدار 1.
  6. إصلاح الخطأ 3: أضف مقطعاً للتراجع عن خطوة الحركة (خدعة الارتداد) لمنع الكائن من العلوق داخل الجدار.
  7. اختبر "الحالات المتطرفة" عن طريق توجيه الكائن مباشرة إلى زاوية الشاشة للتحقق من أن الإصلاحات تعمل بكفاءة.
إرشادات الإجابة النموذجية (بعد التصحيح)
  1. تحديد الأخطاء: الكائن يتحرك بدون إدخال المستخدم، يعلق في الجدران، والنتيجة لا تزداد.
  2. العزل: افصل الأجزاء البرمجية (الحركة، التصادم، وتسجيل النقاط) لتشخيص المشكلة خطوة بخطوة.
  3. إصلاح الخطأ الأول (حركة غير منضبطة): ضع أمر الحركة داخل شرط للتحكم: [إذا <مفتاح (السهم الأيمن) مضغوط؟> إذن] -> [غيّر الموضع س بمقدار (5)].
  4. إصلاح الخطأ الثاني (اختراق الجدران): أضف شرط التراجع فوراً بعد أمر الحركة: [إذا <ملامس للون (الأسود)؟> إذن] -> [غيّر الموضع س بمقدار (-5)].
  5. إصلاح الخطأ الثالث (خلل في تسجيل النقاط): تأكد من تحديث النتيجة بشكل صحيح عند لمس الهدف وإعادة اللاعب: [إذا <ملامس لـ (الهدف)؟> إذن] -> [غيّر (النتيجة) بمقدار (1)] -> [اذهب إلى الموضع س: (-200) ص: (0)].
  6. قم بتشغيل المشروع واختبر عناصر التحكم للتأكد من أن الكائن يتحرك بسلاسة، ولا يمر عبر الجدران، ويقوم بتحديث النتيجة بشكل صحيح!