Bài 3. Kiểm thử và gỡ lỗi với AI

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.

35 phútTrung cấp
Bạn sẽ học được
  • 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
Thuật ngữ cần biết
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.

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
pytest

Nhờ 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

  1. Mô tả hiện tượng: "Hàm cho kết quả A, tôi mong B".
  2. Dán hàm và dữ liệu đầu vào làm bằng chứng.
  3. Hỏi: "Nguyên nhân có thể là gì? Đề xuất cách kiểm chứng từng giả thuyết".
  4. Tự thêm print hoặc breakpoint để xác nhận, rồi sửa.
Tình huống: Sửa lỗi nhưng sợ hỏng chỗ khác

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.

Mẹo hay

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.

Lưu ý

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.

Thực hành
  1. Viết 5 test cho hàm kiểm tra năm nhuận.
  2. Nhờ AI bổ sung trường hợp biên mà bạn bỏ sót.
  3. Cố tình đưa lỗi vào hàm và xem test nào đỏ.
Tóm tắt bài học
  • 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.