Question book-new.svg
المحتوى هنا ينقصه الاستشهاد بمصادر. يرجى إيراد مصادر موثوق بها. أي معلومات غير موثقة يمكن التشكيك بها وإزالتها. (مارس 2016)

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

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

أسباب شائعةعدل

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

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

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

أمثلةعدل

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

int average(int a, int b)
{
    return a + b / 2;     /* كان يجب أن تكون (a + b) / 2 */
}
 
هذه بذرة مقالة عن الحاسوب أو العاملين في هذا المجال، بحاجة للتوسيع. شارك في تحريرها.