Giải Tin học 10 Bài 16: Kiểm thử và gỡ lỗi chương trình
Khởi động trang 110 Tin học lớp 10: Có những chương trình còn lỗi vì khi thực hiện cho ra kết qua sai. Theo em, việc biết giá trị của một số biến ngay sau khi mỗi câu lệnh được thực hiện có thể giúp tìm ra lỗi của chương trình hay không?
Trả lời:
Theo em, việc biết giá trị của một số biến ngay sau khi mỗi câu lệnh được thực hiện có thể giúp tìm ra lỗi của chương trình.
1. Lỗi trong chương trình và kiểm thử
Hoạt động 1 trang 110 Tin học 10: Trong những phần trước, các bài tập và bài thực hành không quá phức tạp. Đã lần nào em soạn chương trình và thực hiện được ngay từ lần đầu tiên chưa?
Trả lời:
Với các bài tập, có bài lần đầu tiên thực hiện chương trình sẽ không chạy được do lỗi
2. Truy vết với cách bổ sung câu lệnh theo dõi kết quả trung gian
Hoạt động 2 trang 112 Tin học 10: Tại sao rất khó phát hiện lỗi nếu chỉ dùng biện pháp đọc kĩ lại chương trình?
Trả lời:
Nếu chỉ đọc kĩ lại chương trình, em thường chỉ phát hiện được lỗi sai cú pháp, mà không phát hiện được lỗi do thuật toán và thường áp dụng cho các chương trình ngắn, đơn giản, và mất khá nhiều thời gian mới có thể phát hiện lỗi,...
Vận dụng (trang 116)
Vận dụng trang 116 Tin học 10: Em hãy soạn thảo chương trình dưới đây, sau đó áp dụng biện pháp theo dõi từng bước thực hiện chương trình để quan sát sự thay đổi của các biến
Trả lời:
s = 0
for i in range(1, 4):
s = s + i * i
print(s)
print("s = ", s)
Ta có thể thêm câu lệnh print(s) để theo dõi kết quả của s ra màn hình.
Bước 1:
Bước 2:
Bước 3:
Bước 4:
Câu hỏi tự kiểm tra
Câu 1 trang 116 Tin học 10: Em hãy nêu một vài lỗi thuộc nhóm lỗi cú pháp và một vài lỗi thuộc nhóm lỗi ngữ nghĩa.
Trả lời:
Lỗi cú pháp: thừa dấu ngoặc, thiếu dấu hai chấm trong câu điều kiện if, viết sai từ khoá else,…
Lỗi ngữ nghĩa: Viết nhầm dấu phép tính, gọi sai tên biến, gọi chỉ số của phần tử danh sách vượt quá phạm vi,…
Câu 2 trang 116 Tin học 10: Tại sao phải tạo nhiều bộ dữ liệu vào khác nhau để kiểm thử chương trình?
Trả lời:
Các lỗi ngữ nghĩa thì 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 khác nhau.
Câu 3 trang 116 Tin học 10: Có bao nhiêu nhóm dữ liệu khác nhau cần tạo ra để kiểm thử chương trình?
Trả lời:
Có 3 nhóm dữ liệu khác nhau:
- 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 tham số nhận giá trị lớn nhất có thể.
Câu 4 trang 116 Tin học 10: Có thể xem giá trị các biến sau khi thực hiện một câu lệnh ở đâu?
Trả lời:
Ta có thể sử dụng công cụ Debugger sau đó chọn Step để thực hiện từng bước các câu lệnh, quan sát giá trị các biến. Hoặc ta cũng có thể chèn thêm các câu lệnh print để in ra giá trị của các biến.
Xem thêm các bài giải SGK Tin học lớp 10 Cánh diều hay, chi tiết khác:
Bài 14: Kiểu dữ liệu danh sách - Xử lí danh sách
Bài 15: Thực hành với kiểu dữ liệu danh sách
Bài 17: Thực hành lập trình giải bài toán trên máy tính
Bài 18: Lập trình giải quyết bài toán trên máy tính
Bài 1: Nhóm nghề thiết kế và lập trình
Câu hỏi liên quan
Chương trình không thông báo lỗi khi chạy nhưng sẽ cho kết quả không đúng. Khi nhập m,n không chỉ rõ kiểu dữ liệu thì mặc định m, n sẽ có kiểu dữ liệu xâu kí tự. Khi đó m+n được hiểu là phép ghép xâu, không phải tính tổng m và n. Do đó sửa lại chương trình như sau:
n=int(input("Nhập n:"))
m=int(input("Nhập m:"))
print("Tổng 2 số đã nhập là:",m+n)
Xem thêm
Lỗi ngoại lệ ZeroDivisionError là lỗi chia cho số 0.
Xử lý: Kiểm tra số chia để loại bỏ trường hợp có giá trị bằng 0
Xem thêm
Ta có thể sử dụng công cụ Debugger sau đó chọn Step để thực hiện từng bước các câu lệnh, quan sát giá trị các biến. Hoặc ta cũng có thể chèn thêm các câu lệnh print để in ra giá trị của các biến.
Xem thêm
Các lỗi ngữ nghĩa thì 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 khác nhau.
Xem thêm
Lỗi cú pháp: thừa dấu ngoặc, thiếu dấu hai chấm trong câu điều kiện if, viết sai từ khoá else,…
Lỗi ngữ nghĩa: Viết nhầm dấu phép tính, gọi sai tên biến, gọi chỉ số của phần tử danh sách vượt quá phạm vi,…
Xem thêm
Có 3 nhóm dữ liệu khác nhau:
- 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 tham số nhận giá trị lớn nhất có thể.
Xem thêm
- Quan sát mã lỗi Runtime và bắt ngoại lệ: kiểm tra vị trí dòng lệnh sinh ra lỗi này, từ đó phân tích, tìm và sửa lỗi
- Sử dụng nhiều bộ test dữ liệu: phát hiện ra lỗi, nguyên nhân bị lỗi với từng bộ test cụ thể
- In các thông số trung gian: kiểm tra các quy trình hay thuật toán được viết có đúng không.
- Tạo các điểm dừng để quan sát thông tin khác bên trong chương trình: Các điểm dừng sẽ 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, từ đó kiểm tra tính đúng đắn của chương trình
Xem thêm
Chương trình không thông báo lỗi nhưng kết quả đưa ra không đúng.
Vị trí lỗi:
1) range(len(A)-1): Khoảng này không duyệt hết được các phần tử của A
2) while j>1: Do i chạy từ 0 nên j phải lớn hơn 0, nếu j>1 sẽ bỏ sót phần tử đầu tiên (A[0])
Chương trình viết lại như sau:
A=[10,1,5,2,8,0,4]
for i in range(len(A)):
j=i
while j>0 and A[j]
Xem thêm
Với các bài tập, có bài lần đầu tiên thực hiện chương trình sẽ không chạy được do lỗi
Xem thêm
Cần sử cụng các công cụ hỗ trợ của python để kiểm tra lỗi.
Xem thêm
Xem tất cả hỏi đáp với chuyên mục: Kiểm thử và gỡ lỗi chương trình
Được cập nhật 12/09/2023
529 lượt xem