Tin học lớp 10 Bài 30: Kiểm thử và gỡ lỗi chương trình
A. Lý thuyết Tin học 10 Bài 30: Kiểm thử và gỡ lỗi chương trình
1. Một vài phương pháp kiểm thử chương trình
a) Quan sát mã lỗi Runtime và bắt lỗi ngoại lệ
Nếu chương trình có lỗi Runtime (đang chạy mà dừng lại), cần quan sát các mã lỗi để kiểm tra vị trí dòng lệnh sinh lỗi này. Từ đó tìm và sửa lỗi.
b) Kiểm thử chương trình với các bộ dữ liệu test
– Chương trình cần được thử với một số bộ dữ liệu test gồm đầu vào tiêu biểu phụ thuộc đặc thù của bài toán và kết quả đầu ra đã biết trước.
– Cần chú ý:
+ Cần có nhiều bộ test (theo các tiêu chí khác nhau).
+ Cần có bộ test ngẫu nhiên.
+ Cần có bộ test dữ liệu ở vùng biên. Ví dụ dữ liệu đầu vào là cặp (x, y) xác định trên miền [0, 1]. Khi đó cần kiểm tra với bộ dữ liệu biên (0, 0), (0; 1), (1; 0), (1; 1). Thực tế cho thấy lỗi thường phát sinh tại vùng biên hoặc lân cận của biên.
c) In các thông số trung gian
– Bổ sung vào giữa các dòng lệnh câu lệnh print() để in ra biến trung gian, kiểm tra quy trình hay thuật toán.
– Giả sử chương trình có đầu vào là (x1, x2) đầu ra là (a1, a2) nhưng sử sụng biến trung gian (y1, y2). Khi đó bổ sung thêm các dòng lệnh để in ra các giá trị trung gian, từ đó sẽ dễ tìm lỗi hơn.
d) Sử dụng công cụ break point (điểm dừng)
– Công cụ break point cho phép tạo ra các điểm dừng bên trong chương trình. Khi chạy, chương trình sẽ tạm dừng tại các điểm dừng cho phép người kiểm thử có thể quan sát các thông tin khác bên trong chương trình, kiểm tra tính đúng đắn của chương trình.
2. Ví dụ minh họa
Ví dụ: Nhập từ bàn phím hai số tự nhiên m, n. Tìm UCLN của hai số này.
Hướng dẫn:
Gọi gcd(m, n) là UwCLN của hai số tự nhiên m, n.
– Thuật toán:
1) gcd(m, m) = m
2) Nếu n > m thì gcd(m, n) = gcd (m, n – m)
3) Nếu n < m thì gvd(m, n) = gcd (m – n, n)
Phần cơ bản nhất của chương trình sẽ là một vòng lặp while, vòng lặp sẽ kết thúc khi m = n.
Chương trình như sau:
– Tiến hành kiểm thử chương trình
Cách 1: In ra giá trị trung gian để kiểm soát chương trình
Bổ sung biến k và hai lệnh print() như sau:
Việc bổ sung thêm biến k và hai lệnh print() để in các giá trị trung gian k, m, n.
Kết quả:
Cách 2: Sử dụng công cụ break point tại dòng 4
Khi chạy, chương trình sẽ dừng lại trước mỗi vòng lặp, chúng ra sẽ ghi lại các giá trị m, n vào một bảng sau. Khi kết thúc hết vòng lặp thì kết quả chính là giá trị m.
B. Bài tập trắc nghiệm Tin học 10 Bài 30: Kiểm thử và gỡ lỗi chương trình
Câu 1. Chương trình chạy phát sinh lỗi ngoại lệ ZeroDivision, nên xử lí như thế nào?
A. Kiểm tra lại giá trị số chia.
B. Kiểm tra lại chỉ số trong mảng.
C. Kiểm tra giá trị của số bị chia.
D. Kiểm tra kiểu dữ liệu nhập vào.
Hướng dẫn giải
Đáp án đúng là: A
Lỗi ngoại lệ ZeroDivision xảy ra khi lệnh thực hiện phép chia cho giá trị 0 nên cần kiểm tra lại giá trị số chia.
Câu 2. Chương trình sau bị lỗi ở dòng lệnh thứ bao nhiêu ?
>>> fruits = [‘Banana’, ‘Apple’, ‘Lime’]
>>> loud_fruits = [fruit.upper() for fruit in fruits]
>>> print(loud_fruits)
>>> list(enumerate(fruits))
A. 2.
B. 3.
C. 4.
D. Không phát sinh lỗi
Hướng dẫn giải
Đáp án đúng là: D
Chương trình đúng không có lỗi.
Câu 3. Chương trình sau phát sinh lỗi gì?
>>> 1 / 0
0.5
>>> 2 ** 3
8
A. NameError.
B. TypeError.
C. ZeroDivisionError.
D. Syntax Error.
Hướng dẫn giải
Đáp án đúng là: C
ZeroDivisionError: câu lệnh chia cho số 0.
Câu 4. Chương trình chạy phát sinh lỗi ngoại lệ IndexError, nên xử lí như thế nào?
A. Kiểm tra lại giá trị số chia.
B. Kiểm tra lại chỉ số trong mảng.
C. Kiểm tra giá trị của số bị chia.
D. Kiểm tra kiểu dữ liệu nhập vào.
Hướng dẫn giải
Đáp án đúng là: B
Lỗi ngoại lệ IndexError xảy ra khi lệnh cố gắn truy cập phần tử của danh sách nhưng chỉ số vượt giới hạn.
Câu 5. Chương trình sau có lỗi ở dòng lệnh nào?
n = int(input(“Nhập số tự nhiên n: “))
s = “”
for i in range(10):
s = s + i
A. 1.
B. 2.
C. 3.
D. 4.
Hướng dẫn giải
Đáp án đúng là: D
Sai cấu trúc ngữ pháp ở dòng 4: s = s + i.
Câu 6. Hoàn thành phát biểu sau: “Có rất nhiều công cụ và phương pháp khác nhau để kiểm thử chương trình. Các công cụ có mục đích … của chương trình và …, … các lỗi phát sinh trong tương lai”
A. Tìm ra lỗi, phòng ngừa, ngăn chặn.
B. Tìm ra lỗi, phòng ngừa, xử lí.
C. Phòng ngừa, ngăn chặn, xử lí lỗi.
D. Xử lí lỗi, phòng ngừa, ngăn chặn.
Hướng dẫn giải
Đáp án đúng là: A
Có rất nhiều công cụ và phương pháp khác nhau để kiểm thử chương trình. Các công cụ có mục đích tìm ra lỗi của chương trình và phòng ngừa, ngăn chặn các lỗi phát sinh trong tương lai.
Câu 7. Đâu không là công cụ để kiểm thử chương trình?
A. Công cụ in biến trung gian.
B. Công cụ sinh các bộ dữ liệu test.
C. Công cụ thống kê dữ liệu
D. Công cụ điểm dừng trong phần mềm soạn thảo lập trình.
Hướng dẫn giải
Đáp án đúng là: C
Một số công cụ để kiểm thử chương trình như Công cụ in biến trung gian, công cụ sinh các bộ dữ liệu test, công cụ điểm dừng trong phần mềm soạn thảo lập trình,…
Câu 8. Trong các phát biểu sau, phát biểu nào chưa chính xác về kiểm thử chương trình?
A. Hiện nay, có ít phương pháp và công cụ khác nhau để kiểm thử chương trình.
B. Chương trình cần được thử với một số bộ dữ liệu test gồm đầu vào tiêu biểu và kết quả đầu ra biết trước.
C. Các bộ test phụ thuộc vào các tiêu chí khác nhau.
D. Các bộ test dữ liệu nên có nhiều bộ test ngẫu nhiên,…
Hướng dẫn giải
Đáp án đúng là: A
Có nhiều phương pháp và công cụ khác nhau để kiểm thử chương trình
Câu 9. Phát biểu nào sau đây đúng nhất khi nói về các bộ dữ liệu test khi kiểm thử chương trình?
A. Các bộ test có thể có đầu vào theo các tiêu chí khác nhau.
B. Các bộ test có đầu vào theo một số tiêu chí nhất định.
C. Các bộ test có thể có đầu vào theo các tiêu chí khác nhau như độ lớn, tính đa dạng của dữ liệu.
D. Các bộ test có đầu vào phải theo các tiêu chí về độ lớn, tính đa dạng của dữ liệu.
Hướng dẫn giải
Đáp án đúng là: C
Các bộ test có thể có đầu vào theo các tiêu chí khác nhau như độ lớn, tính đa dạng của dữ liệu.
Câu 10. Số phát biểu đúng trong các phát biểu sau:
1) Cần chú ý nên có nhiều bộ test khi test các bộ dữ liệu.
2) Việc sinh ngẫu nhiên dữ liệu đầu vào trong miền xác định của chương trình làm tăng khả năng tìm lỗi.
3) Thực tế cho thấy ít khi phát sinh lỗi tại các vùng biên hoặc lân cận biên.
4) Không thể sử dụng các lệnh print() để in ra các biến trung gian.
A. 2.
B. 3.
C. 1.
D. 4.
Hướng dẫn giải
Đáp án đúng là: A
Thực tế cho thấy thường khi phát sinh lỗi tại các vùng biên hoặc lân cận biên.
⇒ 3) Sai.
Có thể sử dụng các lệnh print() để in ra các biến trung gian.
⇒ 4) Sai
Câu 11. Chương trình chạy phát sinh lỗi ngoại lệ TypeError, nên xử lí như thế nào?
A. Kiểm tra lại chỉ số trong mảng.
B. Kiểm tra lại giá trị số chia.
C. Kiểm tra giá trị của số bị chia.
D. Kiểm tra kiểu dữ liệu nhập vào.
Hướng dẫn giải
Đáp án đúng là: D
Lỗi ngoại lệ TypeError xảy ra khi xuất hiện lỗi kiểu dữ liệu.
Câu 12. Chương trình sau mắc lỗi gì?
def func(n)
a, b = 0, 1
while a < n:
print(a, end=’ ‘)
a, b = b, a+b
print()
print(func(1000))
A. TypeError.
B. ZeroDivisionError.
C. Syntax Error.
D. NameError.
Hướng dẫn giải
Đáp án đúng là: C
Thiếu dấu hai chấm sau tên hàm
Câu 13. Để tính giá trị trung bình của một danh sách số A, người lập trình đã dùng lệnh gttb = sum(A) / len(A). Những mã lỗi ngoại lệ nào có thể xảy ra ?
A. NameError.
B. ZeroDivisionError.
C. Không thể xảy ra lỗi
D. Có thể xảy ra cả hai lỗi trên.
Hướng dẫn giải
Đáp án đúng là: D
NameError: chưa khai báo biến A
ZeroDivisionError: danh sách A rỗng.
Câu 14. Chương trình chạy phát sinh lỗi ngoại lệ NameError, nên xử lí như thế nào?
A. Kiểm tra lại chỉ số trong mảng.
B. Kiểm tra lại tên các biến và hàm.
C. Kiểm tra giá trị của số bị chia.
D. Kiểm tra kiểu dữ liệu nhập vào.
Hướng dẫn giải
Đáp án đúng là: B
Lỗi ngoại lệ NameError xảy ra không tìm được tên biến hoặc tên hàm
Câu 15. Chương trình sau nên sửa như thế nào. Chọn phương án đúng nhất.
fruits = [‘Banana’, ‘Apple’, ‘Lime’]
print(fruits[4])
A. Thay đổi kiểu dữ liệu của từng phần tử trong mảng.
B. Kiểm tra chỉ số của mảng khi thực hiện lệnh.
C. Thay đổi tên mảng.
D. Chương trình không có lỗi.
Hướng dẫn giải
Đáp án đúng là: B
Danh sách có 3 phần tử nên trong lệnh print() cần thay đổi chỉ số của danh sách.
Xem thêm các bài tóm tắt lý thuyết Tin học lớp 10 Kết nối tri thức hay, chi tiết khác:
Lý thuyết Tin học 10 Bài 29: Nhận biết lỗi chương trình
Lý thuyết Tin học 10 Bài 30: Kiểm thử và gỡ lỗi chương trình
Lý thuyết Tin học 10 Bài 31: Thực hành viết chương trình đơn giản
Lý thuyết Tin học 10 Bài 32: Ôn tập lập trình Python
Lý thuyết Tin học 10 Bài 33: Nghề thiết kế đồ họa máy tính