خطای منطقی Logic error

خطای منطقی یا Logic error چیست؟

خطای منطقی (Logic error) گونه‌ای رایج از خطاهای برنامه نویسی است که منجر به عملکرد نادرست برنامه می‌شود و حاصل آن، خروجی یا رفتاری نامناسب و مخالف انتظار می‌باشد.

برنامه‌ای که صرفا دارای خطای منطقی است از نظر زبان برنامه نویسی، قواعد و ساختار آن کاملا معتبر می‌باشد و ممکن است بدون هیچ خطایی کامپایل (یا تفسیر) و اجرا شود. درنتیجه اساسا این نوع خطاها مانع از اجرای برنامه یا بروز کرش نخواهند شد و طبیعتا زبان برنامه نویسی نیز قادر نخواهد بود آن‌ها را تشخیص دهد.

این نوع خطاها معمولا توسط برنامه نویس و حین تست برنامه شناسایی می‌شوند. خروجی نامناسب و غیرقابل قبول یا به طور کلی بروز هر نوع رفتاری که از برنامه انتظار نمی‌رود می‌تواند نشانه‌ی وجود یک خطای منطقی باشد. با وجود تعریف ساده‌ای که برای این نوع خطاها بیان می‌شود تشخیص آن‌ها امر الزاما ساده‌ای نیست و ممکن است برنامه‌ای که دارای خطای منطقی است در بسیاری از موارد، عملکردی صحیح و مطابق انتظار به نمایش بگذارد. در چنین مواردی معمولا استفاده از ورودی‌های مختلف و متنوع برای تست برنامه و همچنین میزان تخصص و مهارت توسعه دهنده در شناسایی این نوع خطاها اهمیت به‌سزایی دارد. در اغلب موارد، بررسی عبارات محاسباتی و مقادیر متغیرهایی که در خروجی برنامه تأثیر دارند می‌تواند به تشخیص منشأ خطاهای منطقی کمک فراوانی کند.

به عنوان نمونه‌ای ساده از این نوع خطا، تصور کنید تابعی برای محاسبه‌ی حجم کره نوشته شده است که بدون مشکل اجرا می‌شود اما مقدار نادرستی را به عنوان حجم کره‌ای با یک شعاع مشخص برمی‌گرداند (دلیل این نادرستی می‌تواند یک خطای ساده در تایپ فرمول باشد). چنین خطایی در زمره‌ی خطاهای منطقی قرار می‌گیرد که از نظر زبان برنامه نویسی بدون مشکل تلقی می‌شود اما از نظر منطقی یک خطا به شمار می‌رود.

در کد نمونه‌ی زیر که به زبان C++ نوشته شده است نیز به دلیل یک خطای منطقی ناشی از اشتباه برنامه نویس، برای مقادیر زوج n عبارت n is odd (به معنای n فرد است) و برای مقادیر فرد n عبارت n is even (به معنای n زوج است) چاپ می‌شود. با جابجا نمودن دو دستور cout دوم و سوم این خطا برطرف می‌شود.

#include <iostream>
using namespace std;
int main() {
  int n;
  cout << "Enter an integer: ";
  cin >> n;
  if ( n%2 == 0) {
    cout << n << " is odd.";
  }
  else {
    cout << n << " is even.";
  }
  return 0;
}

پیوندهای پیشنهادی تک دیک

لینک واژه در ویکیپدیا

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *