Tin học lớp 10 Bài 16: Kiểm thử và gỡ lỗi chương trình
Phần 1. Lý thuyết Tin học 10 Bài 16: Kiểm thử và gỡ lỗi chương trình
1. Lỗi trong chương trình và kiểm thử
Quá trình xác định lỗi và sửa lỗi được gọi là gỡ lỗi. Các lỗi thường gặp như sau:
– Lỗi cú pháp là lỗi câu lệnh viết không theo đúng quy định của ngôn ngữ, lỗi thông báo cụ thể, rõ ràng về đặc trưng lỗi và nơi xảy ra lỗi.
Ví dụ: Thiếu hoặc thừa dấu ngoặc trong biểu thức, tên biến sau quy cách, …
– Lỗi ngoại lệ là lỗi Runtime, xảy ra khi chương trình đang chạy, một lệnh nào đó không thực hiện được, lỗi sẽ thông báo trên màn hình.
– Lỗi ngữ nghĩa là lỗi logic, dù viết đúng quy định của ngôn ngữ nhưng sai trong thao tác xử lí nào đó. Viết nhầm dấu phép tính, nhầm tên biến, … là lỗi khó phát hiện nhất.
Ví dụ: Xét chương trình ở Hình 16.1a, chương trình này thực hiện yêu cầu nhập hai số nguyên p, q và danh sách a gồm các số nguyên, sau đó đưa ra max{|ai|, i = p, p + 1, …, q}. Biết rằng các phần tử của danh sách a được đánh chỉ số bắt đầu từ 0 và 0 ≤ p ≤ q < len(a).
Hình 1a: Chương trình cần kiểm thử và tìm lỗi
Để kiểm tra tính đúng đắn của chương trình so với yêu cầu đề bài, chuẩn bị các bộ dữ liệu vào.
Dữ liệu kiểm thử phải phù hợp với các ràng buộc đã cho và chia thành ba nhóm:
– Kiểm thử những trường hợp thường gặp trong thực tế.
– Kiểm thử những trường hợp đặc biệt.
– Kiểm thử những trường hợp các tham số nhận giá trị lớn nhất có thể.
2. Truy vết và cách bổ sung câu lệnh theo dõi kết quả trung gian
– Bổ sung vào chương trình những câu lệnh đưa ra các kết quả trung gian nhằm truy vết các xử lí của chương trình.
– Sau khi chỉnh sửa xong, cần xóa đi các câu lệnh đã thêm để truy vết hoặc biến chúng thành dòng thông tin chú thích.
– Sai sót có thể xảy ra ngay khi nhập dữ liệu vào, đây cũng là chỗ cần quan tâm khi tìm lỗi.
– Câu lệnh để đưa ra các phần tử tham gia tìm kiếm max như sau:
print (“i = “, I, “max= “ , max)
Câu lệnh này có thể đặt trước hay sau câu lệnh đưa ra kết quả của chương trình.
3. Truy vết với công cụ gỡ lỗi ngôn ngữ lập trình
Để kích hoạt chế độ gỡ lỗi, cần thực hiện lần lượt thao tác sau:
– Trên cửa sổ Shell, mở file chương trình cần gỡ lỗi, kết quả là chương trình này xuất hiện ở cửa sổ Code.
– Chọn Debug trên cửa sổ Shell và chọn Debugger (Hình 3). Kết quả là cửa sổ Debug Control sẽ xuất hiện (Hình 4).
– Bắt đầu thực hiện chương trình tiến hành bình thường chọn Run Module (hoặc nhấn phím F5) trong cửa sổ Code.
– Chọn Step để thực hiện câu lệnh hiển thị phía dưới, lệnh vào – ra dữ liệu nháy chuột một số lần.
Hình 5: Sự thay đổi của biến khi một câu lệnh được thực hiện
4. Thực hành gỡ lỗi chương trình
Bài toán: Cho a là danh sách các số nguyên. Em hãy tạo danh sách b có các phần tử ở vị trí lẻ bằng phần tử ở vị trí tương đương của a, các phần tử ở vị trí chẵn bằng phần tử ở vị trí tương ứng của a cộng thêm 1, tức là:
So sánh số lượng các phần tử giá trị chẵn ở a với số lượng các phần tử giá trị chẵn b, đưa ra thông báo. Gọi p là số lượng các phần tử giá trị chẵn ở a, q là số lượng các phần tử giá trị chẵn ở b và đưa ra thông báo “a ít hơn nếu p < q, “b ít hơn” nếu p > q và “Bằng nhau” trong trường hợp còn lại.
Nhiệm vụ: Chương trình ở Hình 6 giải bài toán đã nêu nhưng còn có lỗi và cần được gỡ lỗi. Em hãy áp dụng các phương pháp truy vết để xác định lỗi và đề xuất cách sửa một số ít nhất các câu lệnh để có chương trình đúng.
Hướng dẫn:
– Phương pháp dùng công cụ gỡ lỗi (Debug)
Để gỡ lỗi cần chuẩn bị một danh sách số nguyên, ví dụ: [5, 3, 2, 2, 1, 2]. Chọn Debugger sau đó chọn Step để thực hiện từng bước các câu lệnh, quan sát giá trị hai danh sách a và b, Sau một vài lần thực hiện câu lệnh trong vòng lặp:
for i in range (0, n, 2) :
b[i] = b[i] + 1
Ta thấy a và b đồng thời thay đổi giá trị, mặc dù trong vòng lặp chỉ chứa câu lệnh thay đổi giá trị của danh sách b. Ví dụ, sau khi i=2 ta có kết quả như Hình 7.
Hình 7: Minh họa kết quả của phương pháp dùng công cụ gỡ lỗi
Điều này nói lên rằng chương trình chưa tạo ra bản sao của danh sách a mà chỉ tạo ra một tên mới cho cùng một danh sách a. Vậy câu lệnh sai trong chương trình là b = a. Cần thay nó bằng câu lệnh b= [] + a. Đây là một lỗi mà nếu chỉ đọc chương trình sẽ rất khó phát hiện.
– Phương pháp bổ sung vào chương trình các câu lệnh truy vết
Ta có thể thêm các câu lệnh print (a) và print (b) để xuất ra giá trị các danh sách a và b sau mỗi vòng lặp. Dễ dàng nhận thấy a và b cùng đồng thời thay đổi, từ đó rút ra được kết luận như đã nêu ở phương pháp dùng công cụ gỡ lỗi.
Phần 2. Bài tập trắc nghiệm Tin học 10 Bài 16: Kiểm thử và gỡ lỗi chương trình
Câu 1. Cho đoạn chương trình sau:
a=int(input()
print(a)
Lỗi trong chương trình trên là lỗi:
A. Cú pháp.
B. Ngữ nghĩa
C. Ngoại lệ
D. Tất cả các lỗi trên.
Hướng dẫn giải
Đáp án đúng là: A
Đoạn chương trình trên sai do thiếu dấu ngoặc ở câu lệnh 1. Vì vậy đây là lỗi cú pháp.
Câu 2. Chọn khẳng định đúng nhất?
A. Lỗi ngoại lệ (Exception Error) là lỗi phát sinh khi đang thực thi chương trình (Runtime error).
B. Lỗi cú pháp (Syntax Error) cũng là một ngoại lệ.
C. Lỗi ngoại lệ được Python dùng để loại bỏ một khối code khỏi chương trình.
D. Tất cả các đáp án trên đều đúng.
Hướng dẫn giải
Đáp án đúng là: A
Lỗi ngoại lệ là lỗi phát sinh khi đang chạy chương trình, một lệnh nào đó không thể thực hiện được.
Câu 3. Để kiểm thử chương trình có bao nhiêu nhóm dữ liệu khác nhau cần tạo ra:
A. 1
B. 2
C. 3
D. 4
Hướng dẫn giải
Đáp án đúng là: C
Có 3 nhóm dữ liệu khác nhau cần tạo ra để kiểm thử chương trình:
– Kiểm thử những trường hợp thường gặp trong thực tế.
– Kiểm thử những trường hợp đặc biệt.
– Kiểm thử những trường hợp các tham số nhận giá trị lớn nhất có thể.
Câu 4. Lỗi nào khó phát hiện nhất?
A. Lỗi cú pháp.
B. Lỗi ngữ nghĩa.
C. Lỗi ngoại lệ.
D. Cả ba lỗi trên.
Hướng dẫn giải
Đáp án đúng là: B
Các lỗi ngữ nghĩa khó phát hiện hơn, chỉ có thể đoán nhận và tìm thấy thông qua quan sát kết quả thực hiện chương trình với các bộ dữ liệu vào khác nhau.
Câu 5. Thư viện PDB là thư viện dùng để:
A. Cung cấp các thủ tục vào ra của chương trình.
B. Cung cấp hàng loạt các hàm dùng cho việc giao tiếp với hệ điều hành
C. Hỗ trợ trực tiếp các định dạng nén và lưu trữ dữ liệu.
D. Cung cấp các dịch vụ gỡ lỗi.
Hướng dẫn giải
Đáp án đúng là: D
Python trang bị một thư viện riêng cùng các dịch vụ gỡ lỗi, đó là thư viện PDB.
Câu 6. Phát biểu nào sau đây là đúng về lỗi cú pháp?
A. Là lỗi câu lệnh viết không theo đúng quy định của ngôn ngữ.
B. Là lỗi xảy ra khi chương trình đang chạy, một lệnh nào đó không thể thực hiện.
C. Là lỗi mặc dù các câu lệnh viết đúng quy định của ngôn ngữ nhưng sai trong thao tác xử lí nào đó.
D. Tất cả các lỗi trên.
Hướng dẫn giải
Đáp án đúng là: A
Lỗi cú pháp là lỗi câu lệnh viết không theo đúng quy định của ngôn ngữ.
Ví dụ thiếu hay thừa ngoặc, tên biến sai quy cách…
Câu 7. Phát biểu nào sau đây là đúng về lỗi ngoại lệ?
A. Là lỗi câu lệnh viết không theo đúng quy định của ngôn ngữ.
B. Là lỗi xảy ra khi chương trình đang chạy, một lệnh nào đó không thể thực hiện.
C. Là lỗi mặc dù các câu lệnh viết đúng quy định của ngôn ngữ nhưng sai trong thao tác xử lí nào đó.
D. Tất cả các lỗi trên.
Hướng dẫn giải
Đáp án đúng là: B
Lỗi ngoại lệ là lỗi xảy ra khi chương trình đang chạy, một lệnh nào đó không thể thực hiện. Lỗi này sẽ được hiển thị ngay trên màn hình.
Câu 8. Phát biểu nào sau đây là đúng về lỗi ngữ nghĩa?
A. Là lỗi câu lệnh viết không theo đúng quy định của ngôn ngữ.
B. Là lỗi xảy ra khi chương trình đang chạy, một lệnh nào đó không thể thực hiện.
C. Là lỗi mặc dù các câu lệnh viết đúng quy định của ngôn ngữ nhưng sai trong thao tác xử lí nào đó.
D. Tất cả các lỗi trên.
Hướng dẫn giải
Đáp án đúng là: C
lỗi ngữ nghĩa là lỗi mặc dù các câu lệnh viết đúng quy định của ngôn ngữ nhưng sai trong thao tác xử lí nào đó.
Ví dụ nhầm dấu, nhầm tên biến…
Câu 9. Công cụ Debug dùng để:
A. Chạy chương trình.
B. Lưu chương trình.
C. Mở chương trình.
D. Gỡ lỗi.
Hướng dẫn giải
Đáp án đúng là: D
Ngôn ngữ lập trình Python cung cấp công cụ Debug để gỡ lỗi .
Câu 10. Khẳng định nào sau đây là sai?
A. Lỗi ngữ nghĩa là lỗi khó phát hiện nhất.
B. Ngôn ngữ lập trình Python cung cấp công cụ Debug để gỡ lỗi .
C. Lỗi ngoại lệ là lỗi xảy ra khi chương trình đang chạy, một lệnh nào đó không thể thực hiện. Lỗi này sẽ được hiển thị ngay trên màn hình.
D. Truy vết để tìm lỗi là một quá trình vô cùng đơn giản, không tốn thời gian.
Hướng dẫn giải
Đáp án đúng là: D
Truy vết để tìm lỗi là một quá trình khá khó khăn và phức tạp, đôi khi mất khá nhiều thời gian.
Câu 11. Để kiểm thử những trường hợp thường gặp trong thực tế ta chọn bộ dữ liệu như thế nào?
A. Có kích thước đủ nhỏ.
B. Có kích thước lớn.
C. Có kích thước lớn nhất có thể.
D. Có kích thước bất kì.
Hướng dẫn giải
Đáp án đúng là: A
Dữ liệu kiểm thửnhững trường hợp thường gặp trong thực tế ta chọn bộ dữ liệu có kích thước đủ nhỏ để ta có thể kiểm chứng các kết quả do chương trình đưa ra.
Câu 12. Khẳng định nào sau đây là sai?
A. Môi trường lập trình bậc cao nói chung và Python nói riêng có công cụ hỗ trợ cho người dùng tìm lỗi.
B. Việc đọc kĩ chương trình để tìm lỗi chỉ thích hợp với các chương trình ngắn, đơn giản.
C. Lỗi ngoại lệ hay còn gọi là lỗi Runtime.
D. Lỗi ngữ nghĩa là lỗi dễ phát hiện.
Hướng dẫn giải
Đáp án đúng là: D
Lỗi ngữ nghĩa là lỗi khó phát hiện vì trong rất nhiều trường hợp chương trình vẫn được thực hiện trọn vẹn nhưng kết quả đưa ra không phù hợp hoặc kết quả sai với một số bộ dữ liều vào nào đó.
Câu 13. Muốn truy vết để tìm lỗi ta nên:
A. Sử dụng công cụ gỡ lỗi của chương trình lập trình hoặc đưa thêm các câu lệnh xuất ra kết quả trung gian của quá trình tính toán.
B. Sử dụng thêm câu lệnh nhập.
C. Lưu lại chương trình.
D. Gõ lại chương trình.
Hướng dẫn giải
Đáp án đúng là: A
Muốn truy vết để tìm lỗi ta có thể sử dụng công cụ gỡ lỗi của chương trình lập trình hoặc đưa thêm các câu lệnh xuất ra kết quả trung gian của quá trình tính toán.
Câu 14. Để xem giá trị các biến sau khi thực hiện một câu lệnh ta dùng:
A. Lệnh intput().
B. Các phép tính toán.
C. Công cụ Debug.
D. Thư viện PDB.
Hướng dẫn giải
Đáp án đúng là: C
Để xem giá trị các biến sau khi thực hiện một câu lệnh ta dùng công cụ Debug để chạy từng bước và quan sát sự thay đổi của các biến (trong cửa sổ Debug control).
Câu 15. Điều gì sẽ xảy ra nếu bạn cố mở một file không tồn tại?
A. Python tự động tạo một file mới dưới tên bạn đang gọi ra.
B. Không có gì xảy ra vì file không tồn tại.
C. Gây ra một lỗi ngoại lệ.
D. Không có đáp án nào đúng.
Hướng dẫn giải
Đáp án đúng là: C
Vì mở 1 file không tồn tại nên lệnh mở file không thể thực hiện gây ra lỗi ngoại lệ
Xem thêm các bài tóm tắt Lý thuyết Tin học lớp 10 Cánh diều hay, chi tiết khác:
Lý thuyết Bài 15: Thực hành với dữ liệu kiểu danh sách
Lý thuyết Bài 16: Kiểm thử và gỡ lỗi chương trình
Lý thuyết Bài 17: Thực hành lập trình giải bài toán trên máy tính
Lý thuyết Bài 18: Lập trình giải quyết bài toán trên máy tính
Lý thuyết Bài 1: Nhóm nghề thiết kế và lập trình
Lý thuyết Bài 2: Dự án nhỏ: Tìm hiểu về nghề lập trình web, lập trình trò chơi và lập trình cho thiết bị di động