Các loại lỗi trong lập trình

Trong các ngôn ngữ lập trình nói chung, dù là một lập trình viên chuyên nghiệp hay mới vào nghề đều có thể gặp những loại lỗi này trong lập trình. Tuỳ theo khả năng của từng lập trình viên mà có thể mắc lỗi nhiều hay ít. Đối với lập trình viên đã đi theo nghiệp lập trình, chắc chắn sẽ gặp lỗi, quan trọng là khi gặp lỗi, chúng ta sẽ giải quyết lỗi đó như thế nào. Tìm ở đây giúp các bạn phân biệt các loại lỗi và cách xử lý, hạn chế tối đa những lỗi này.
Các loại lỗi trong lập trình

1. Lỗi cú pháp (Syntax Error)

Hay còn gọi là lỗi biên dịch (Compiler error) Đây là loại lỗi sơ đẳng nhất trong lập trình. Thường là do bạn gõ sai cấu trúc của ngôn ngữ (ví dụ như thiếu dấu kết thúc một câu lệnh, một số ngôn ngữ từ khoá phân biệt chữ hoa, chữ thường thì lại  gõ chữ hoa, v.v. gọi nôm na là lỗi chính tả). Chương trình sẽ không thể biên địch được khi gặp lỗi này. Các trình biên dịch sẽ khi biên dịch code, khi gặp lỗi ở dòng code nào thì sẽ báo lỗi. Các trình soạn thảo (Editor) hoặc các IDE tiên tiến hiện nay như Visual Studio, Eclipse, Android Studio, NetBean, v.v. đều hỗ trợ cho người lập trình một cách trực quan để xử lý lỗi này. Một vài ví dụ cho lỗi này:

Ví dụ 1


if (a==b) then a+=b;

Lỗi cú pháp vì trong C++ lệnh if phải viết là


if (a==b) a+=b;

Ví dụ 2


class SV
{
   int ma sv; //Lỗi viết sai tên biến, khai báo biến không được có khoảng trắng
   void nhap() {
     for (i=0; i<=2; i++) // lỗi chưa khai báo biến i 
        cin>>i;
   }
} //lỗi thiếu dấu ;

void main //lỗi thiếu dấu () sau hàm main()
{
}

2. Lỗi thực thi (Runtime error)

Xảy ra bất ngờ khi chương trình đang chạy Loại lỗi này thường xảy ra do người lập trình viết code ẩu, không lường hết các trường hợp xảy ra, khiến chương trình đang chạy thì bị lỗi treo màn hình, thoát khỏi chương trình hoặc thoát luôn chương trình, v.v. Lỗi này có thể dễ dàng phát hiện bằng cách Debug.

Ví dụ 1


float s=0;
for (int i=0; i<=10; i++) 
s=s+1/(i-3); 

Lỗi trên xảy ra khi i nhận giá trị = 3 thì 1/(i-3)=1/0: lỗi chia cho 0. hoặc


float t, x; cout<<"x="; cin>>x;
t=sqrt(x);

cout<<t;

nếu nhập x nhỏ hơn 0 thì sqrt(x) không tính được (không có căn bậc 2 của số âm).

Ví dụ 2


while(true)
{
//vòng lặp vô tận
}

Ví dụ 3


int[] array = new int[10];
array [12] = 7; //lỗi truy cập vùng nhớ chưa cấp phát

Cách khắc phục

  • Phải kiểm tra các điều kiện, dự đoán trước khả năng có thể gây lỗi khi thực thi, chẳng hạn kiểm tra x lớn hơn 0 trước khi tính căn bậc 2, …
  • Các ngôn ngữ tiên tiến như C#, Java, VB.Net bổ xung cấu trúc xử lý ngoại lệ try … catch … finally…

3. Lỗi logic

Đây là lỗi do tư duy sai, thuật toán sai dẫn đến sai kết quả Ví dụ sinh viên không biết viết thuật toán tìm ước số chung lớn nhất, không biết viết công thức nghiệm giải phương trinh bậc 2, thực hiện sai giải thuật…

Phát hiện lỗi LOGIC

  • Đây là loại lỗi khó phát hiện nhất, thường người dùng phải sử dụng chương trình, thậm chí là dùng lâu mới phát hiện ra được. Việc debug lỗi này cũng là một việc tốn khá nhiều thời gian và công sức. Để phát hiện lỗi này thì chương trình cần chạy nhiều lần với nhiều kết quả để xem nó có phù hợp hay không.
  • Các IDE tiên tiến hiện nay đều cung cấp chức năng Debug vào từng dòng lệnh, sau đó lập trình viên sẽ chạy từng bước để biết được lỗi mình gặp ở đâu (xem video bên dưới)

Xem video về cách xử lý các lỗi gặp phải trong lập trình

Có thể bạn sẽ thích…

Trả lời

EnglishVietnamese