Bộ test của bạn đã xanh hết, làm sao biết nó thật sự bảo vệ được code, và CI giúp gì thêm?
Gợi ý trả lời
Người phỏng vấn muốn biết bạn hiểu test xanh chỉ nói rằng các ca đã viết đều qua, không nói rằng những ca quan trọng đã được viết. Họ cũng muốn thấy bạn biết CI làm gì và không làm gì.
Cách trả lời tốt bắt đầu bằng một thí nghiệm: làm hỏng code có chủ đích. Bạn sửa một chỗ nhỏ (đổi < thành <=, bỏ một lần trim(), cho phép thêm một ký tự) rồi chạy test. Nếu không test nào đỏ, lỗi đó có thể vào code thật mà không ai biết. Người ta gọi kỹ thuật này là mutation testing, và có công cụ tự sinh hàng loạt lỗi như vậy. Thường lỗi lọt qua nằm ở ranh giới (254 hay 255 ký tự, đúng 1,5 giây) và ở ca đặc biệt (hai dấu @, chuỗi toàn khoảng trắng), nên viết test ngay hai bên ranh giới là cách sửa rẻ nhất.
Về CI: nó chạy cùng bộ lệnh trên một máy sạch mỗi lần có code mới, nên không phụ thuộc việc người đẩy code có nhớ chạy hay không. Bạn nên nhắc npm ci thay vì npm install (cài đúng theo lockfile và báo lỗi khi lệch), việc hủy lượt chạy cũ khi cùng nhánh có lượt mới, và giới hạn quyền của token. Quan trọng không kém là quy tắc của nhóm: CI đỏ thì không merge, vì nếu ai cũng bỏ qua thì CI chỉ là đồ trang trí.
Điểm cộng: nói được rằng Git hook trên máy cá nhân có thể bị bỏ qua bằng --no-verify, nên kiểm tra phải chạy lại ở CI, và rằng CI chỉ cho biết code không phá những gì đã kiểm, chưa cho biết trang thật có chạy ổn hay không.