Thứ Ba, 11 tháng 1, 2011

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

Trong lập trình nói chung có ba loại lỗi thường xảy ra nhất, đó là:

a. Lỗi cú pháp (Syntax Error)
: Còn được 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 ngôn ngữ (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.
Lỗi này bộ soạn thảo mã (Editor) có thể bắt được trực tiếp hoặc nếu IDE có một trình trợ giúp (assistance) như Visual Assist X cho VC++ hay Resharper cho .Net thì chúng sẽ hoàn toàn được loại bỏ.
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
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()

{
}


b. 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 (đứng yên, don't send, treo máy...)
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 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<

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


- 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. Lỗi logic: Lỗi do tư duy 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.


dựa theo Trần Nguyên Hương

Không có nhận xét nào: