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

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 ngắn gọn, chi tiết sách Cánh diều sẽ giúp học sinh nắm vững kiến thức trọng tâm, ôn luyện để học tốt Tin học 10.

1 3782 lượt xem


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

B. Trắc nghiệm Tin học 10 Bài 16 (Cánh diều 2023) có đáp án: Kiểm thử và gỡ lỗi chương trình

Câu 1. 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 2. 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 3. 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 4. Để 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 5. 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 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. 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.

Xem thêm tóm tắt lý thuyết Tin học 10 sách Cánh diều hay, chi tiết khác:

Lý thuyết Bài 13: Thực hành dữ liệu kiểu xâu

Lý thuyết Bài 14: Kiểu dữ liệu danh sách - Xử lí danh sách

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

1 3782 lượt xem


Xem thêm các chương trình khác: