🎯 Mục Tiêu Bài Học
- Biết một số phương pháp kiểm thử (Test) chương trình.
- Biết một số cách gỡ lỗi (Debug) đơn giản.
- Vận dụng để phát hiện và sửa lỗi trong chương trình Python.
I. Kiểm Thử Chương Trình (Testing)
Kiểm thử chương trình là quá trình kiểm tra chương trình để phát hiện lỗi trước khi đưa vào sử dụng.
1. Quan sát lỗi Runtime (Lỗi ngoại lệ)
- Chạy chương trình.
- Nếu xuất hiện thông báo lỗi (Exception), đọc: Tên lỗi, Dòng xảy ra lỗi.
- Phân tích nguyên nhân và sửa lỗi.
b = 0
print(a / b)
Chương trình sẽ báo lỗi vì không thể chia cho 0.
Thông báo lỗi:
Traceback (most recent call last): ... ZeroDivisionError: division by zero
-
a = 5 -
b = 0 -
a / bnghĩa là5 / 0. -
Trong Python (và trong toán học), phép chia cho 0 không được phép, nên Python phát sinh ngoại lệ (
Exception)ZeroDivisionError.
Có thể kiểm tra trước khi chia:
a = 5 b = 0 if b != 0: print(a / b) else: print("Không thể chia cho 0")
Kết quả:
Không thể chia cho 0
2. Kiểm thử bằng dữ liệu Test
Thử chương trình với nhiều bộ dữ liệu khác nhau để kiểm tra tính đúng đắn.
Nên có:
- Bộ dữ liệu thông thường
- Bộ dữ liệu ngẫu nhiên
- Bộ dữ liệu biên (0, 1, số lớn, giá trị đặc biệt...)
Ví dụ – Chương trình tính tổng:
3. In các giá trị trung gian
Thêm lệnh print() để quan sát giá trị biến trong quá trình chương trình chạy.
print(sum)
print(m, n)
Giúp: Theo dõi thuật toán • Phát hiện bước sai • Dễ sửa lỗi.
Code trên có ý nghĩa như sau:
-
print(i): In ra giá trị hiện tại của biếni. -
print(sum): In ra giá trị của biếnsum(thường dùng để lưu tổng). -
print(m, n): In ra đồng thời giá trị của hai biếnmvàn, cách nhau bởi một khoảng trắng.
i = 5 sum = 20 m = 8 n = 12 print(i) print(sum) print(m, n)
Kết quả:
5 20 8 12
Lưu ý: Không nên đặt tên biến là
sumvìsumlà một hàm có sẵn (built-in) của Python. Nên dùng các tên nhưtong,totalhoặcsđể tránh ghi đè hàmsum().
4. Sử dụng Breakpoint
Breakpoint (Điểm dừng) là công cụ của phần mềm lập trình. Khi chạy, chương trình dừng tại vị trí đã chọn, cho phép quan sát giá trị các biến và thực hiện từng bước (Step).
Breakpoint giúp kiểm tra chương trình chính xác hơn so với chỉ dùng print().
II. Ví Dụ Minh Họa – Tính ƯCLN
Bài toán: Tính ƯCLN của hai số m và n bằng phương pháp trừ liên tiếp. Để kiểm tra, ta in giá trị m và n sau mỗi vòng lặp hoặc đặt Breakpoint.
n = int(input())
while m != n:
if m > n:
m = m - n
else:
n = n - m
print("m =", m, ", n =", n)
print("UCLN =", m)
Chương trình sử dụng thuật toán Euclid bằng phép trừ để tìm Ước chung lớn nhất (UCLN) của hai số nguyên dương m và n.
-
Nhập hai số
mvàn. -
Khi
mkhácn:-
Nếu
m > nthì thaym = m - n. -
Ngược lại thay
n = n - m. -
In giá trị mới của
mvàn.
-
Nếu
-
Khi
m == n, giá trị đó chính là UCLN.
Input
24 18
Output
m = 6 , n = 18 m = 6 , n = 12 m = 6 , n = 6 UCLN = 6
Độ phức tạp của thuật toán này lớn hơn thuật toán Euclid dùng phép chia dư (m % n), nhưng nguyên lý hoạt động rất dễ hiểu.
III. Gỡ Lỗi (Debug)
IV. Những Lỗi Thường Gặp
| Lỗi | Nguyên nhân |
|---|---|
ZeroDivisionError | Chia cho 0 |
NameError | Biến chưa khai báo |
SyntaxError | Sai cú pháp |
TypeError | Sai kiểu dữ liệu |
ValueError | Giá trị nhập không hợp lệ |
V. Ghi Nhớ
- ✅ Chương trình không báo lỗi chưa chắc đã chạy đúng.
- ✅ Luôn kiểm thử bằng nhiều bộ dữ liệu.
- ✅ Nên có bộ dữ liệu biên và dữ liệu ngẫu nhiên.
- ✅ Dùng print() để theo dõi giá trị các biến.
- ✅ Sử dụng Breakpoint để kiểm tra từng bước thực hiện chương trình.
- ✅ Sau khi sửa lỗi phải kiểm thử lại để bảo đảm chương trình hoạt động đúng.
Sơ Đồ Tư Duy
Kiểm thử
- Quan sát Runtime Error
- Bộ dữ liệu Test
- In biến trung gian
- Breakpoint
Gỡ lỗi
- Xác định lỗi
- Phân tích
- Sửa lỗi
- Kiểm thử lại
Ghi nhớ
- Test nhiều bộ dữ liệu
- Có dữ liệu biên
- Dùng print()
- Dùng Breakpoint
- Chạy lại sau khi sửa
📌 Ghi Nhớ Trọng Tâm (Ôn Tập)
Kiểm thử (Testing) giúp phát hiện lỗi trước khi sử dụng chương trình. Có 4 phương pháp cơ bản: (1) Quan sát lỗi Runtime, (2) Kiểm thử với nhiều bộ dữ liệu test, (3) In các giá trị trung gian bằng print(), (4) Sử dụng Breakpoint để theo dõi từng bước thực hiện chương trình. Sau khi sửa lỗi (Debug), cần kiểm thử lại để đảm bảo chương trình hoạt động chính xác.
