رمز تصحيح الأخطاء

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

استخدامات كود التصحيح

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

يُستخدم في البرمجة

يمكن إضافة عبارات قصيرة إلى الكود لتحديد وجود الأخطاء ومواقعها داخل البرنامج. كما يمكن استخدامها لتوفير مدخلات اختبار لمحاكاة حالات الاستخدام المحتملة التي قد يحتاجها البرنامج. ويمكن استخدامها أيضًا كمساحة مؤقتة للكود الذي لا يزال قيد التطوير.

يُستخدم في ألعاب الفيديو

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

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

أمثلة على كود تصحيح الأخطاء

يستخدم تصحيح الأخطاء باستخدام الطباعة عبارات الطباعة للعثور على الأخطاء وعزلها في البرنامج. ويمكن استخدامه لتتبع تدفق قيم البيانات في جزء من التعليمات البرمجية. لهذا النوع من تعليمات التصحيح بعض العيوب الواضحة، فهو مؤقت ويُزال عادةً عند حل الخطأ. كما أن كثرة استخدام عبارات الطباعة قد تؤثر على المخرجات الفعلية للبرنامج وتُبطئ وقت التشغيل، وذلك بحسب عدد مرات استدعاء هذه العبارات. في بعض الحالات، لا تُساعد عبارات الطباعة في تحديد المشكلة، فمثلاً، يحتوي الإخراج القياسي (stdout) في لغة C++ على مُخرجات مُخزنة مؤقتًا ، وأحيانًا تُفقد محتويات المخزن المؤقت، مما يؤدي إلى معلومات تصحيح غير صحيحة. [ 3 ]

مثال بلغة C++

void TestFunction ( int timesToRun ) { cout << "يجب أن تعمل الخوارزمية " << timesToRun << " مرات" << std :: endl ; for ( int i = 0 ; i <= timesToRun ; i ++ ) { // تشغيل الخوارزمية algorithm (); // طباعة تصحيح الأخطاء cout << "تم تشغيل الخوارزمية " << i ++ << " مرات." << std :: endl ; } }

يوجد خطأ في الكود أعلاه. عند إدخال القيمة 5، يجب أن يطبع البرنامج ما يلي على وحدة التحكم.

ينبغي تشغيل الخوارزمية 5 مرات تم تشغيل الخوارزمية مرة واحدة. تم تشغيل الخوارزمية مرتين. تم تشغيل الخوارزمية 3 مرات. تم تشغيل الخوارزمية 4 مرات. تم تشغيل الخوارزمية 5 مرات. 

الناتج الفعلي هو التالي، وهو غير صحيح.

ينبغي تشغيل الخوارزمية 5 مرات تم تشغيل الخوارزمية مرة واحدة. تم تشغيل الخوارزمية مرتين. تم تشغيل الخوارزمية 3 مرات. تم تشغيل الخوارزمية 4 مرات. تم تشغيل الخوارزمية 5 مرات. تم تشغيل الخوارزمية 6 مرات. 

يتم تشغيل دالتنا من خلال الخوارزمية مرة إضافية، وعند الفحص الدقيق يتضح أن حلقتنا مشفرة بشكل خاطئ.

تأكيد العبارات

عادةً ما يكون أفضل وقت لإصلاح خطأ برمجي هو قبل تشغيل البرنامج. ويمكن القيام بذلك عن طريق إدراج عبارات تأكيد في الكود. في لغة C، يمكن استخدام الأمر assert() لهذا الغرض. يتحقق الأمر assert() من أن البرنامج يعمل وفقًا للشروط الصحيحة في هذه المرحلة من البرنامج. [ 4 ]

أمثلة بلغة C

int i , a [ 10 ]; for ( i = 0 ; i < 10 ; ++ i ) { a [ i ] = 10 - i ; } for ( i = 0 ; i < 10 ; ++ i ) { a [ a [ i ]] = a [ i ]; }

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

#include <assert.h> int i , a [ 10 ]; for ( i = 0 ; i < 10 ; ++ i ) { assert ( 0 <= i && i < 10 ); a [ i ] = 10 - i ; } for ( i = 0 ; i < 10 ; ++ i ) { assert ( 0 <= i && i < 10 ); assert ( 0 <= a [ i ] && a [ i ] < 10 ); a [ a [ i ]] = a [ i ]; }

وحدة مشتركة

JUnit هو إطار عمل بسيط يُستخدم لكتابة اختبارات قابلة للتكرار، وهو متاح للغة جافا، ويتيح للمبرمجين إنشاء اختبارات الوحدة الخاصة بهم. اختبار الوحدة هو عبارة عن كود يُكتب لتنفيذ دالة محددة في الكود المراد اختباره، وعادةً ما يستهدف وحدة صغيرة من الكود، مثل دالة أو فئة واحدة. باستخدام مجموعة من عبارات التأكيد وعبارات الاختبار الأخرى، يستطيع المبرمجون إنشاء مجموعات من حالات الاختبار للتأكد من تنفيذ دالة أو طريقة ما بشكل صحيح. [ 5 ]

مراجع

  1. "نسخة مؤرشفة" . مؤرشفة من الأصل بتاريخ 2010-04-02 . تم الاطلاع عليها بتاريخ 2010-03-26 .{{cite web}}: CS1 maint: archived copy as title ( link )
  2. مجلة غيمر، بي سي (10 نوفمبر 2021). "أوامر وحدة تحكم سكايرم: كن عملاقًا، أو شبحًا، أو إلهًا حيًا" . بي سي غيمر .
  3. "تقنيات تصحيح الأخطاء" . oopweb.com . مؤرشف من الأصل بتاريخ 17-08-2002.
  4. "بطاقة عمل إلكترونية" .
  5. "الصفحة الرئيسية" . junit.org .