IT nói tiếng người
Kiểm thửMốc 1 · Nói chuyện được

📊 Test Coverage là gì?

Bao nhiêu phần code đã được test chạm tới.

1
Hiểu nó là gì

Test Coverage đo tỉ lệ dòng hoặc nhánh code được test chạy qua. Con số cao không có nghĩa test tốt, vì chạy qua khác với kiểm tra kỹ.

Nói theo đời thường:
Như quét nhà: đi hết mọi phòng chưa chắc đã sạch, nhưng còn phòng chưa bước vào thì chắc chắn chưa quét.

⚠ Chỗ ẩn dụ này hỏng

Quét nhà: đi hết phòng chưa chắc đã sạch. Với coverage thì tệ hơn — chỉ tiêu coverage cao còn khiến người ta viết test dối.

Ép chỉ tiêu 80% thì đội sẽ viết test gọi hàm mà không kiểm tra gì cả, chỉ để dòng code được “chạy qua”. Coverage là chỉ báo, không phải mục tiêu. Nó chỉ nói chắc chắn một điều: phần chưa được chạm tới thì chắc chắn chưa được test.

2
Code trông thế nào
# Đo coverage
npx jest --coverage

File        | % Stmts | % Branch |
------------|---------|----------|
tinhTien.js |   100   |    50    |  ← chạy hết dòng, mới nửa nhánh if

Cột Branch đáng tin hơn cột Stmts nhiều — nó đếm các nhánh if đã đi qua.

3
Khi nào bạn dùng nó

✓ Dùng khi

  • Tìm vùng code chưa ai test
  • Theo dõi xu hướng qua thời gian (đang tăng hay giảm)

✗ Đừng dùng khi

  • Đặt thành KPI ép đội đạt cho bằng được
  • Coi 100% coverage là code không còn bug
Chưa cần biết: mutation testing, coverage theo vùng thay đổi, cổng chặn trong CI.
Để dành tới Mốc 3 — Tự sửa được khi nó hỏng: Test đỏ trên CI mà xanh ở máy bạn, và bạn biết bắt đầu tìm từ đâu.
Dấu hiệu bạn đã cần học nó: Khi coverage 90% mà lỗi production vẫn đều đặn — lúc đó cần mutation testing để biết test có thực sự bắt lỗi không.
4
Đi đâu tiếp

🧪 Thử 2 phút, không cần cài gì

Nghĩ về một hàm có if/else. Viết một ca test đi vào nhánh if. Coverage dòng có thể đã 100%, nhưng nhánh else chưa ai bước vào bao giờ. Đó là khoảng cách giữa hai con số.
← Xem tất cả thuật ngữ