Bài 33. Tìm lỗi, sửa lỗi và kiểm thử chương trình
Chương trình vừa viết xong hiếm khi chạy đúng ngay từ lần đầu tiên, và đó là chuyện bình thường với bất kì người lập trình nào. Bài học này giúp bạn nhận ra ba loại lỗi thường gặp, biết cách dò tìm nguyên nhân và hình thành thói quen kiểm thử chương trình một cách có hệ thống trước khi tin vào kết quả.
- Cánh DiềuTin học 10 - Chủ đề F · Bài 16. Kiểm thử và gỡ lỗi chương trìnhtr. 110
- Kết nối tri thứcTin học 10 - Bài 29. Nhận biết lỗi chương trìnhtr. 141–144
- Kết nối tri thứcTin học 10 - Bài 30. Kiểm thử và gỡ lỗi chương trìnhtr. 145–148
Bắt đầu bằng một hình dung
Hãy hình dung bạn vừa giải xong một bài toán khó, ra đáp số cuối cùng, nhưng khi so với đáp án ở cuối sách thì lệch nhau. Phản xạ tự nhiên không phải là xoá hết làm lại từ đầu, mà là dò ngược lại từng bước: xem lại đề bài đã chép đúng số liệu chưa, kiểm tra phép tính ở từng dòng, thử thay số vào để phát hiện bước nào cho ra kết quả vô lí. Chỉ cần một dấu cộng bị viết nhầm thành dấu trừ ở một dòng giữa chừng, toàn bộ kết quả phía sau sẽ sai theo, dù hướng làm bài về tổng thể vẫn đúng.
Lập trình cũng vận hành theo đúng tinh thần đó. Một chương trình chỉ vài chục dòng vẫn hoàn toàn có thể chạy sai ngay từ lần gõ đầu tiên, và đó không phải dấu hiệu của người viết kém - mà là chuyện xảy ra với bất kì ai. Điều tạo nên khác biệt là khả năng bình tĩnh dò lại từng phần, xác định đúng chỗ sai, và kiểm tra chắc chắn trước khi tin vào kết quả cuối cùng.
Nội dung bài học
- Ba loại lỗi thường gặp khi lập trình
- Quy trình tìm lỗi, sửa lỗi và kiểm thử
Tóm tắt lý thuyết cần nhớ
- Có ba loại lỗi thường gặp: lỗi cú pháp (sai quy tắc viết lệnh, máy báo ngay, chương trình không chạy được), lỗi khi chạy (runtime, như chia cho 0 hay chỉ số vượt phạm vi, khiến chương trình dừng giữa chừng) và lỗi logic (chương trình chạy trơn tru nhưng kết quả sai).
- Lỗi logic khó phát hiện nhất vì máy không tự báo lỗi gì; phải tự kiểm tra bằng cách tính tay, so sánh và dò lại từng bước mới nhận ra.
- Cách tìm và sửa lỗi hiệu quả: đọc kĩ thông báo lỗi và dòng bị chỉ ra, in giá trị trung gian bằng
print(), và thử riêng từng phần nhỏ của chương trình. - Kiểm thử là chạy chương trình với nhiều bộ dữ liệu mẫu, kể cả các trường hợp đặc biệt như 0, số âm, dữ liệu rỗng, rồi so kết quả với đáp án mong đợi trước khi tin chương trình là đúng.
Thuật ngữ tiếng Anh trong bài
| Tiếng Anh | Đọc là | Nghĩa |
|---|---|---|
| bug | bấc | lỗi (bug) Chỗ chương trình bị sai hoặc chạy không đúng ý em. |
| syntax | SIN-tăx | cú pháp Luật viết đúng của ngôn ngữ lập trình, giống ngữ pháp viết câu. |
| debug | đi-BẤC | gỡ lỗi Đi tìm con bọ (lỗi) đang trốn trong chương trình rồi sửa cho code chạy đúng - như tìm chỗ sai trong bài toán rồi sửa lại. |
| test | tét | kiểm thử Chạy thử chương trình xem có đúng như em muốn không - giống kiểm tra lại bài làm trước khi nộp cho cô. |
Câu hỏi trắc nghiệm có đáp án
Mấy câu mẫu để bạn tự kiểm tra ngay. Trong ứng dụng, bài này có đủ 23 câu, chấm điểm tự động và giải thích từng câu sai.
- Lỗi cú pháp
- Lỗi khi chạy (runtime)
- Lỗi logic
- Lỗi kiểm thử
- Quên dấu hai chấm sau
if - Dùng sai công thức khiến kết quả bị lệch dù chương trình vẫn chạy xong bình thường
- Đặt tên biến không rõ nghĩa
- Chia một số cho 0 ngay khi chương trình đang chạy
trung_binh = diem1 + diem2 + diem3 / 3 cho kết quả sai vì lí do nào?- Vì Python báo lỗi cú pháp nên dòng lệnh không chạy được
- Vì ba biến
diem1,diem2,diem3chưa được gán giá trị trước đó - Vì phép chia
/được thực hiện trước phép cộng+, nên chỉdiem3bị chia cho 3 - Vì lệnh
printkhông thể in ra số thập phân
diem3 / 3 trước rồi mới cộng với diem1 và diem2, khác với ý định cộng cả ba điểm rồi mới chia cho 3. Đây là lỗi logic, không phải lỗi cú pháp, vì chương trình vẫn chạy và in ra kết quả bình thường; ba biến vẫn được gán giá trị đầy đủ ở các dòng trước; lệnh print vẫn in số thập phân bình thường.- a)Lỗi cú pháp thường bị máy phát hiện ngay khi chạy chương trình, trước khi bất kì dòng lệnh nào được thực thi.Đúng
- b)Nếu chương trình chạy xong và in ra một kết quả, điều đó có nghĩa là chương trình chắc chắn không còn lỗi nào.Sai
- c)In giá trị của biến bằng lệnh
print()ở giữa chương trình là một cách hữu ích để kiểm tra xem chương trình đang tính đúng đến đâu.Đúng - d)Kiểm thử chỉ cần thực hiện một lần với một bộ dữ liệu bất kì là đủ để khẳng định chương trình hoàn toàn đúng.Sai
- (a) Đúng - lỗi cú pháp bị phát hiện trước khi chương trình được thực thi, nên không dòng lệnh nào chạy được.
- (b) Sai - chương trình chạy xong và có kết quả vẫn có thể mắc lỗi logic, tức kết quả được in ra nhưng không đúng với điều mong muốn.
- (c) Đúng - in giá trị trung gian bằng
print()là một cách kiểm tra hữu ích, giúp thấy được chương trình đang tính đến đâu và giá trị đó có hợp lí hay không. - (d) Sai - kiểm thử cần thử với nhiều bộ dữ liệu khác nhau, kể cả các trường hợp đặc biệt, một lần thử với một bộ dữ liệu không đủ để khẳng định chương trình luôn đúng.
Thử ngay: minh hoạ từng bước
Bấm từng bước để tự xem cơ chế hoạt động, hoặc bấm “Tự chạy” cho nó tiến mỗi giây một lần. Đổi được dữ liệu đầu vào - không cần đăng nhập.
Học trọn bài này trong ứng dụng
Bài giảng đầy đủ, 23 câu luyện tập chấm tự động, thi thử đúng cấu trúc đề tốt nghiệp (24 trắc nghiệm + 4 Đúng/Sai), bài thực hành máy tự chấm và gia sư AI giải thích chỗ sai.
Phần học miễn phí, không cần tạo tài khoản.
Bài liên quan - Lập trình, Thuật toán & CTDL (KHMT)
Cùng mạch kiến thức với bài này, học nối tiếp cho chắc phần lí thuyết.