Lý thuyết Tin học 10 Bài 16 (Cánh diều 2024): Kiểm thử và gỡ lỗi chương trình

5.3 K

Với tóm tắt lý thuyết Tin học lớp 10 Bài 16: Kiểm thử và gỡ lỗi chương trình sách Cánh diều hay, chi tiết giúp học sinh nắm vững kiến thức trọng tâm, ôn luyện để học tốt môn Tin học 10.

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

Lý thuyết Tin học 10 Cánh diều Bài 16: Kiểm thử và gỡ lỗi chương trình (ảnh 1)

Hình 1a: Chương trình cần kiểm thử và tìm lỗi

Lý thuyết Tin học 10 Cánh diều Bài 16: Kiểm thử và gỡ lỗi chương trình (ảnh 2)

Để 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).

Lý thuyết Tin học 10 Cánh diều Bài 16: Kiểm thử và gỡ lỗi chương trình (ảnh 3)

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

Lý thuyết Tin học 10 Cánh diều Bài 16: Kiểm thử và gỡ lỗi chương trình (ảnh 4)

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à:

Lý thuyết Tin học 10 Cánh diều Bài 16: Kiểm thử và gỡ lỗi chương trình (ảnh 5)

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.

Lý thuyết Tin học 10 Cánh diều Bài 16: Kiểm thử và gỡ lỗi chương trình (ảnh 6)

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.

Lý thuyết Tin học 10 Cánh diều Bài 16: Kiểm thử và gỡ lỗi chương trình (ả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)  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.

Đá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.

Kiểm thử và gỡ lỗi chương trình

 

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.

Đá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

Đá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.

Đá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.

Đá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.

Đá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.

Đá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.

Đá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.

Đá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.

Đá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ì.

Đá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.

Đá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.

Đá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.

Đá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.

Đánh giá

0

0 đánh giá