AI giúp sinh test và tìm lỗi nhanh, nhưng bạn vẫn là người chạy và kiểm tra kết quả cuối cùng.
- Hiểu kiểm thử đơn vị là gì
- Nhờ AI sinh test và trường hợp biên
- Dùng AI khoanh vùng lỗi
- Tự chạy pytest hoặc Jest để kiểm chứng
- Kiểm thử đơn vị (unit test)
- Đoạn mã nhỏ kiểm tra một hàm cho kết quả đúng.
- Trường hợp biên
- Giá trị ở giới hạn hoặc bất thường: 0, rỗng, âm, rất lớn.
- Hồi quy (regression)
- Lỗi cũ xuất hiện lại sau khi sửa mã.
- Độ phủ (coverage)
- Tỉ lệ mã được test chạy qua.
Khái niệm và lý thuyết
Kiểm thử đơn vị kiểm tra từng hàm nhỏ độc lập bằng cách so sánh kết quả thực với kết quả mong đợi (assert). Bộ test là lưới an toàn: sau mỗi lần sửa mã, chạy lại để biết có làm hỏng chỗ khác không (kiểm thử hồi quy). Một test tốt nhanh, độc lập, lặp lại được và kiểm tra một hành vi.
| Loại ca kiểm thử | Ví dụ cho hàm chia |
|---|---|
| Bình thường | chia(6, 3) = 2 |
| Biên | chia(0, 5), chia(1, 1) |
| Âm, rất lớn | chia(-6, 3), chia(10**12, 10) |
| Lỗi | chia(1, 0) phải báo ValueError |
Gỡ lỗi là quá trình khoa học: quan sát hiện tượng, đặt giả thuyết, kiểm chứng bằng in giá trị hoặc điểm dừng, thu hẹp phạm vi, sửa, rồi kiểm tra lại. AI giúp đề xuất giả thuyết, nhưng bạn phải xác nhận bằng thực nghiệm. Lưu ý AI có thể viết test lặp lại đúng logic sai của mã, nên cần tự tính tay vài ví dụ.
Một test đơn giản
# tinh.py
def chia(a, b):
if b == 0:
raise ValueError("Mẫu số bằng 0")
return a / b
# test_tinh.py
import pytest
from tinh import chia
def test_chia_thuong():
assert chia(6, 3) == 2
def test_chia_cho_0():
with pytest.raises(ValueError):
chia(1, 0)pip install pytest
pytestNhờ AI sinh test
Viết test pytest cho hàm sau, gồm: trường hợp thường, trường hợp biên
(0, số âm, số rất lớn) và trường hợp lỗi. Giải thích vì sao chọn từng test.
[dán hàm]Khoanh vùng lỗi cùng AI
- Mô tả hiện tượng: "Hàm cho kết quả A, tôi mong B".
- Dán hàm và dữ liệu đầu vào làm bằng chứng.
- Hỏi: "Nguyên nhân có thể là gì? Đề xuất cách kiểm chứng từng giả thuyết".
- Tự thêm
printhoặc breakpoint để xác nhận, rồi sửa.
Bạn sửa hàm tính điểm. Có bộ test, chạy pytest thấy 12 test vẫn qua: yên tâm. Không có test thì bạn phải tự kiểm tra thủ công mọi chức năng liên quan.
Viết test cho lỗi trước khi sửa (test đỏ), sửa xong test xanh. Lỗi đó sẽ không bao giờ quay lại âm thầm.
AI có thể viết test sai kết quả mong đợi hoặc test chỉ lặp lại mã. Hãy tự tính tay một vài ví dụ để kiểm tra.
- Viết 5 test cho hàm kiểm tra năm nhuận.
- Nhờ AI bổ sung trường hợp biên mà bạn bỏ sót.
- Cố tình đưa lỗi vào hàm và xem test nào đỏ.
- Test là lưới an toàn khi sửa mã.
- AI giỏi gợi ý trường hợp biên; bạn chạy và xác minh.
- Test lỗi trước, sửa sau.