خطأ منطقي

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

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

أسباب شائعة

يمكن أن يعود الخطأ إلى غلطة في كتابة جملة برمجية (معادلة خاطئة أو غير صحيحة) أو خلل في خوارزمية أو ربما أنه تم اخيار الخوارزمية الخطأ أو غير المناسبة للحالة.

تصحيح الأخطاء المنطقية

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

أمثلة

هذا مثال على دالة (function) مكتوبة بلغة سي (C) هدفها حساب معدل رقمين و هي تحتوي على خطأ منطقي. هنالك أقواس ناقصة في المعادلة، لذا فإن البرنامج يترجم بنجاح و يعمل و لكنه لا يعطي نتائج صحيحة بسبب أولوية العمليات الحسابية في لغة سي (operator precedence in C). أي أن البنامج يبدأ بتقييم القسمة قبل الجمع.

int average(int a, int b)
{
    return a + b / 2;     /* كان يجب أن تكون (a + b) / 2 */
}

مراجع