Tin Học KHMT
Ôn tập Tin học THPT › Tin học 10 › Bài 33
Tin học 10

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ả.

Chủ đề F · Lập trình, Thuật toán & CTDL (KHMT) - đọc khoảng 12 phút · 23 câu luyện tập trong ứng dụng

Tương ứng sách giáo khoa
  • 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
Xem bảng đối chiếu cả bộ →

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

  1. Ba loại lỗi thường gặp khi lập trình
  2. 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
bugbấclỗi (bug)
Chỗ chương trình bị sai hoặc chạy không đúng ý em.
syntaxSIN-tăxcú 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ẤCgỡ 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.
testtétkiể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.

Câu 1 · Nhận biết
Loại lỗi nào khiến chương trình bị dừng ngay lập tức, không chạy được dòng lệnh nào, do người viết vi phạm quy tắc viết lệnh của ngôn ngữ lập trình?
  1. Lỗi cú pháp
  2. Lỗi khi chạy (runtime)
  3. Lỗi logic
  4. Lỗi kiểm thử
Đáp án: A - Lỗi cú pháp là lỗi do viết sai quy tắc của ngôn ngữ lập trình (chẳng hạn thiếu dấu hai chấm, thiếu ngoặc đóng); máy phát hiện ngay khi vừa chạy nên chương trình dừng lại từ đầu, không thực thi được dòng nào. Lỗi khi chạy chỉ xuất hiện sau khi chương trình đã chạy được một đoạn; lỗi logic thì chương trình vẫn chạy xong nhưng cho kết quả sai; ‘lỗi kiểm thử’ không phải một loại lỗi được nhắc tới trong bài.
Câu 2 · Nhận biết
Đâu là một ví dụ về lỗi khi chạy (runtime error)?
  1. Quên dấu hai chấm sau if
  2. 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
  3. Đặt tên biến không rõ nghĩa
  4. Chia một số cho 0 ngay khi chương trình đang chạy
Đáp án: D - Chia cho 0 là ví dụ điển hình của lỗi khi chạy: cú pháp hoàn toàn hợp lệ, chương trình chạy bình thường đến một bước thì gặp phép toán không thể thực hiện nên dừng đột ngột. Quên dấu hai chấm là lỗi cú pháp; dùng sai công thức khiến kết quả lệch dù vẫn chạy xong là lỗi logic; đặt tên biến không rõ nghĩa là thói quen viết code chưa tốt, không phải một loại lỗi khiến chương trình chạy sai.
Câu 3 · Thông hiểu
Trong ví dụ tính điểm trung bình ba môn của bài học, dòng lệnh trung_binh = diem1 + diem2 + diem3 / 3 cho kết quả sai vì lí do nào?
  1. Vì Python báo lỗi cú pháp nên dòng lệnh không chạy được
  2. Vì ba biến diem1, diem2, diem3 chưa được gán giá trị trước đó
  3. Vì phép chia / được thực hiện trước phép cộng +, nên chỉ diem3 bị chia cho 3
  4. Vì lệnh print không thể in ra số thập phân
Đáp án: C - Trong Python, phép chia được thực hiện trước phép cộng, nên máy tính diem3 / 3 trước rồi mới cộng với diem1diem2, 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.
Câu Đúng/Sai (Phần II) · Thông hiểu
Cho biết mỗi phát biểu sau đúng hay sai:
  • 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
Vì sao:
  • (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.

Mở bài 33 trong ứng dụng

Phần học miễn phí, không cần tạo tài khoản.