FresherKỹ thuậtKiểm thử Backend
Con số code coverage 90 phần trăm cho bạn biết điều gì, và nó che giấu điều gì?
Thử trả lời trước
Đáp án mẫu
Nó cho biết 90 phần trăm số dòng, hoặc số nhánh, đã được thực thi khi chạy test. Nó không nói gì về việc kết quả có được kiểm tra hay không.
def is_adult(age):
return age >= 18
def test_runs_but_checks_nothing():
is_adult(20) # 100% line coverage, zero assertions
Những gì coverage che giấu:
- Thiếu assertion, như ví dụ trên. Được thực thi không có nghĩa là được kiểm chứng.
- Thiếu code: một đoạn validation bạn quên viết thì không có dòng nào để phủ.
- Line so với branch: một dòng có
ifcó thể được chạy trong khi một nhánh không bao giờ được đi qua, nên branch coverage nghiêm ngặt hơn. - Chất lượng đầu vào: giá trị biên và các trường hợp lỗi có thể không bao giờ chạy.
Chỗ nó hữu ích: 10 phần trăm chưa được phủ rất đáng xem, vì nó chỉ ra code mà không test nào chạm tới. Các công cụ như coverage.py, JaCoCo và go test -cover đều báo cáo điều này.
Dùng coverage để tìm khoảng trống, còn đánh giá độ mạnh của test thì dùng code review hoặc mutation testing.
Ý chính
- Coverage đo code được thực thi, không phải hành vi được kiểm chứng
- Branch coverage nghiêm ngặt hơn line coverage
- Code còn thiếu không thể được phủ
- Code chưa được phủ chỉ ra các khoảng trống
Câu hỏi nối tiếp thường gặp
- Pipeline có nên fail khi coverage thấp hơn một ngưỡng không?
Lỗi thường gặp
- Coi con số coverage cao là bằng chứng của test tốt
- Viết test không có assertion để tăng con số