BÀI 30: KIỂM THỬ VÀ GỠ LỖI CHƯƠNG TRÌNH
A. YÊU CẦU CẦN ĐẠT
- Biết được một vài phương pháp đơn giản kiểm thử chương trình.
- Biết được một vài cách gỡ lỗi đơn giản một chương trình.
- Hiểu được cách sử dụng công cụ in biến trung gian để kiểm tra giá trị trong chương trình.
- Nắm được cách sử dụng bộ dữ liệu test để phát hiện lỗi.
- Biết cách sử dụng breakpoint để dừng chương trình và kiểm tra lỗi.
B. NỘI DUNG BÀI HỌC
1. Một Vài Phương Pháp Kiểm Thử Chương Trình
Có rất nhiều phương pháp và công cụ khác nhau để kiểm thử chương trình. Các công cụ này không những có mục đích tìm ra lỗi (hay bug) của chương trình mà còn có tác dụng phòng ngừa và ngăn chặn các lỗi phát sinh tiếp trong tương lai.
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 (tức là đang chạy bị dừng lại), cần quan sát các mã lỗi (mã lỗi 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.
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ác bộ test có thể có đầu vào theo các tiêu chí khác nhau như độ lớn và tính đa dạng của dữ liệu. Cần chú ý một số điểm sau:
- Cần có nhiều bộ test (theo các tiêu chí khác nhau như độ lớn, tính đa dạng của dữ liệu.)
- Cần có bộ test ngẫu nhiên. 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 nếu có.
- 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 ≤ x, y ≤ 1. Khi đó cần kiểm tra chương trình với bộ dữ liệu biên là (0; 0). (0, 1). (1; 0) và (1; 1).
c) In Các Thông Số Trung Gian
Bổ sung các lệnh print() để in ra các biến trung gian, qua đó kiểm tra thuật toán có đúng không.
d) Sử Dụng Công Cụ Breakpoint (Điểm Dừng)
Công cụ breakpoint 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 lại tại các “điểm dừng” giúp kiểm tra dữ liệu trung gian.
2. Một Số Ghi Nhớ Quan Trọng
- Sử dụng công cụ in các biến trung gian.
- Sử dụng công cụ sinh các bộ dữ liệu test.
- Sử dụng công cụ điểm dừng trong phần mềm soạn thảo lập trình.
- Quan sát các mã lỗi của chương trình nếu phát sinh.
C. Ví Dụ Minh Họa
Ví dụ 1: Bắt Lỗi Ngoại Lệ Khi Nhập Dữ Liệu
try:
n = int(input("Nhập một số nguyên: "))
print("Số bạn vừa nhập là:", n)
except ValueError:
print("Lỗi! Bạn phải nhập một số nguyên.")
Ví dụ 2: Kiểm Thử Với Bộ Dữ Liệu Biên
def chia_hai_so(a, b):
try:
return a / b
except ZeroDivisionError:
return "Lỗi! Không thể chia cho 0."
# Kiểm thử với bộ dữ liệu biên
print(chia_hai_so(10, 2)) # Kết quả đúng
print(chia_hai_so(10, 0)) # Kiểm tra lỗi chia cho 0
Ví dụ 3: In Biến Trung Gian Để Kiểm Tra Lỗi
n = 5
s = 0
for i in range(n):
print(f"Giá trị của i: {i}") # In giá trị trung gian
s += i
print("Tổng là:", s) # Kết quả sai do i chạy từ 0 đến 4
Ví dụ 4: Sử Dụng Breakpoint Trong Python
def tinh_tong(n):
s = 0
for i in range(1, n+1):
s += i
return s
import pdb; pdb.set_trace() # Điểm dừng debug
print(tinh_tong(5))
Các phương pháp trên giúp phát hiện lỗi sớm, đảm bảo chương trình chạy chính xác