Tư liệu giáo án Tin 8 KNTT – Chủ đề 5 – Bài 15. Gỡ lỗi
Tư liệu giáo án Tin 8 KNTT – Chủ đề 5 – Bài 15. Gỡ lỗi
Sau bài học này em sẽ:
- Chạy thử, tìm lỗi và sửa được lỗi cho chương trình.
An: Chúng ta đã tạo ra một chương trình máy tính trong Bài 14 và thế là tớ đà biết lập trinh.
Khoa: Chưa xong đâu, chúng ta cần phải thực hiện một việc nữa, đó là gỡ lỗi.
An: Gỡ lỗi là làm những gì? Bạn hãy hướng dẫn cụ thể hơn cho tớ nhé.
1. KIỂM THỬ VÀ PHÂN LOẠI LỖI
Hoạt động 1 Đếm sô lần đoán
Trong trò chơi Đoán số ở Bài 14, ai đoán đúng số bí mật với ít lần đoán hơn sẽ là người thắng cuộc. Ở chương

trình trong Hình 15.1, biến số lần đoán được bổ sung để đếm số lần người chơi đoán và thông báo giá trị này khi người chơi đoán đúng số bí mật.
Trước khi chia sẻ trò chơi của mình, em quyết định kiểm tra xem trò chơi có hoạt động tốt không. Hày cho biết kết quả của việc kiểm tra đó bẳng cách mô tả tình huống chương trình chạy không đúng kịch bản (nếu có).
a) Kiểm thử
Theo kịch bản, trò chơi sẽ thông báo số lần đoán khi người chơi đoán đúng số bí mật. Tuy nhiên, khi chạy thừ chương trình, em sẽ thấy số lần đoán mà máy tính hiển thị luôn kém số lần thực tế mà người chơi đã đoán một đơn vị.
Việc chạy thừ chương trình để kiểm tra (còn gọi là kiểm thử) nhằm phát hiện những tinh huống bất thường (được gọi là lỗi) khi thực hiện chương trinh. Các lỗi cần được loại bỏ trước khi chương trinh được coi là sản phẩm hoàn chinh và có thể chia sẻ với người khác.
Hoạt động 2 Không làm việc hay làm việc sai?
Em hãy cho biết, chương trinh đà cho trong Hlnh 15.1 không hoạt động được hay nó có hoạt động nhưng đã thực hiện không đúng kịch bản?
b) Phân loại lỗi
Khi chạy thử, em nhận ra răng chương trình vẫn hoạt động vì máy tính vẫn hỏi và trả lời theo sự điều khiển của các khối lệnh. Tuy nhiên nó thực hiện không đúng kịch bản vì số lần đoán được hiển thị không đúng với số lần thực tế mà người chơi đã đoán.
Có hai loại lỗi: 1) Lỗi cú pháp xảy ra khi lệnh viết sai so với quy tắc của ngôn ngữ lập trình, làm cho chương trình không hoạt động; 2) Lỗi logic (hay lỗi ngữ nghĩa) xảy ra khi các câu lệnh trong chương trình tuy được viết đúng cú pháp nhưng thực hiện không đúng kịch bản như trong chương trình cúa trò chơi Đoán số.
Cần phải chạy thừ chương trình để phát hiện và loại bỏ lỗi. Có hai loại lỗi: lỗi cú pháp và lỗi lôgic.
– Lỗi cú pháp là lỗi viết câu lệnh sai quy tắc, làm cho chương trình không hoạt động.
– Lỗi lôgic là lỗi câu lệnh, tuy được viết đúng quy tắc nhưng thực hiện sai so với kịch bản
Chọn phát biểu đúng nhất về hoạt động gở lỗi.
- Gở lỗi là phát hiện và loại bỏ lỗi. Trong lập trình, không nhất thiết phải gỡ lỗi.
- Gỡ lỗi là chạy thử chương trình để phát hiện lỗi. Trong lập trình, không nhất thiết phải gở lỗi.
- Gỡ lỗi là chạy thừ chương trình để phát hiện lỗi. Gở lỗi là một phần quan trọng của lập trình.
- Gở lỗi là phát hiện và loại bỏ lỗi. Gở lỗi là một phần quan trọng của lập trình.
PHÁT HIỆN LỖI VẢ SỬA LỖl LOGIC
Hoạt động 3 Gỡ lỗi
Xét tình huống máy tính hiển thị số lần đoán không đúng với số lần đoán thực tế của người chơi. Em hãy trả lời các câu hỏi:
1. Theo kịch bản, biến số lần đoán sẽ thay đổi trong tình huống nào?
2. Những khối lệnh nào làm thay đổi biến số lần đoán?
3. Có điều gì khác nhau giữa kịch bản và những khối lệnh tương ứng
Hầu hết các ngôn ngữ lập trình đều có chức năng chì rõ lỗi cú pháp. Ngôn ngữ lập trình trực quan, thậm chí còn hạn chế những tình huống xảy ra lỗi cú pháp.
Vì vậy lỗi cú pháp dễ dàng được phát hiện và sửa chữa. Tuy nhiên, với lỗi lôgic, việc xác định lệnh nào gây ra lỗi và nó đà hoạt động thế nào để tạo ra lỗi ấy không phải lúc nào cũng đơn giản.
a) Phát hiện lỗi logic
Có hai cách thường được sử dụng để phát hiện lỗi lôgic.
Cách thứ nhất: Dựa vào phân tích lôgic để tìm lỗi. Tập trung vào những khối lệnh liên quan đến lỗi và so sánh với kịch bản xem chúng có được thực hiện đúng yêu cầu hay không.
Chẳng hạn, trong chương trình của trò chơi Đoán số, lỗi được thể hiện ở việc chương trình hiển thị sai giá trị cùa số lần đoán. Các khối lệnh liên quan đến biến này là khởi tạo giá trị (2), thay đổi giá trị (9) và hiển thị giá trị (11).
Theo kịch bản, số lần đoán cần phải tăng 1 đơn vị mỗi khi người chơi nhập một giá trị số (đoán). Điều này xảy ra ở các câu lệnh (4), (7) và (8).
Tuy nhiên, có thể thấy rằng, mặc dù (9) tăng giá trị của số lần đoán sau khi (7) hoặc (8) được thực hiện, nhưng không có lệnh nào như thế sau khối lệnh (4) cả.
Theo cách này, việc phát hiện vị trí xuất hiện lỗi trong chương trình được tìm kiếm bằng cách suy luận lôgic, bắt đầu từ những khối lệnh thực hiện không đúng kịch bản. Hạn chế việc tìm lỗi theo cách dò dòng lệnh.
Cách thứ hai: Chạy thử với dữ liệu mẫu để dò lỗi. Vì là người lập trình, em có thể cho hiện giá trị các biến số bí mật và số lần đoán băng cách đánh dấu 0 vào bên cạnh các biến đó trong nhóm “Các biến số” (Hình 15.2a).
Chạy chương trình với một số đầu vào dự kiến. Chẳng hạn, em có thể nhập số bí mật ngay trong lần đoán đầu tiên. Khi đó, lẽ ra số lần đoán cần nhận giá trị 1 thì nó vẫn chì mang giá trị 0.
Từ đó, em nhận thấy rằng lỗi xảy ra do không tăng giá trị của số lần đoán sau lần nhập giá trị đầu tiên của người chơi ở lệnh (4)7
Lưu ý: Chương trình có thể chạy theo từng bước bằng cách chèn lệnh “đợi… giây” (Hình 15.2b) vào những vị trí cần quan sát dữ liệu.

Theo cách này, người lập trình có thể kết hợp chạy chương trình từng bước với việc theo dõi giá trị của các biến, so sánh chúng với các giá trị tương ứng được tính theo cách thủ công để phát hiện câu lệnh nào gây ra lỗi và cách nó hoạt động để gây ra lỗi đó.
b) Sứa lỗi
Khi đã biết vị trí câu lệnh xảy ra lỗi trong chương trình và cách thức câu lệnh đó tạo ra lỗi, em có thể đưa ra những cách sửa lỗi phù hợp với yêu cầu. Chẳng hạn, tăng giá trị số lần đoán lên 1 đơn vị sau lần đoán đầu tiên băng cách bổ sung lệnh (4a) “thay đổi số lần đoán một lượng 1” giống như lệnh (9) vào sau lệnh (4).
Hai phương pháp phổ biến để phát hiện lỗi lôgic trong chương trình:
- Tập trung vào những khối lệnh trực tiếp gây ra lỗi và những khối lệnh liên quan lôgic đến nó theo các cấu trúc điều khiển.
- Chạy chương trình từng bước, kết hợp theo dõi sự thay đổi của các biến, các giá trị đầu ra và so sánh với các giá trị tính được theo cách thù công.