خطای منطقی 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;
}

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

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

واژه‌های مرتبط

اولویت خروج با عنصر تازه وارد Last In, First Out &... اولویت خروج با عنصر تازه وارد یا Last In, First Out - LIFO چیست؟ اولویت خروج با عنصر تازه وارد (Last In, First Out) یا به اختصار LIFO اصطلاحی است که ...
حلقه Loop حلقه یا Loop چیست؟ حلقه (Loop) در زبان های برنامه نویسی برای اجرای دنباله‌ای از دستورات به صورت تکراری مورد استفاده قرار می‌گیرد. بدنه حلقه (Loop Bod...
لیبل Label لیبل یا Label چیست؟ واژه لیبل (Label) به طور کلی به معنای برچسبی است که برای کمک به توصیف یا شناسایی یک شئ یا محتوای آن به کار می‌رود. با اینحال این ...
صفحه فرود Landing Page صفحه فرود یا Landing Page چیست؟ صفحه فرود یا لندینگ پیج (Landing Page) یک صفحه وب اختصاصی است که معمولا در اثر کلیک روی یک تبلیغ آنلاین به عنوان صفحه...
کرش Crash کرش یا Crash چیست؟ در سیستم‌های رایانه‌ای، کرش (Crash) یا از کار افتادن به حالتی گفته می‌شود که در آن یک برنامه از ادامه‌ی صحیح فعالیت خود باز می‌مان...
لیست پیوندی Linked List لیست پیوندی یا Linked List چیست؟ لیست پیوندی (Linked List) مجموعه‌ای از عناصر داده‌ای است که در آن هر عنصر به عنصر بعدی خود اشاره می‌کند. این عناصر ک...

دیدگاهتان را بنویسید

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