~/VibeHandbook
PDF miễn phí

Chương 12 · 06

Nguyên nhân gốc rễ so với triệu chứng

Cái bẫy hấp dẫn nhất trong việc gỡ lỗi là bản vá khiến lỗi biến mất mà không sửa nguyên nhân. Nếu user là undefined và bạn "sửa" nó bằng if (user) { ... }, lỗi sẽ dừng lại — nhưng bây giờ việc đăng ký lặng lẽ không làm gì cả, điều này còn tệ hơn: một vụ crash ồn ào ít ra còn cho bạn biết có điều gì đó sai, còn bây giờ thì không có gì báo cả. Câu hỏi thực sự là tại sao user lại là undefined ở đây? Có thể việc truy vấn cơ sở dữ liệu đã thất bại. Có thể một trường đã bị đổi tên. Có thể một await đã bị thiếu ở đâu đó phía trên.

Khi AI đề xuất một bản sửa, hãy hỏi nó:

  • "Việc này đang sửa nguyên nhân hay chỉ che giấu triệu chứng?"
  • "Lý do ban đầu khiến giá trị này bị sai là gì?"
  • "Nguyên nhân gốc rễ này có thể làm hỏng thứ gì khác không?"

Một bản sửa đúng nguyên nhân gốc rễ thường làm cho mã trở nên đơn giản hơn hoặc rõ ràng hơn. Một bản vá triệu chứng thường thêm vào một lớp bảo vệ (guard), một try/catch nuốt chửng lỗi, hoặc một giá trị mặc định che đậy vấn đề thực sự. Hãy nghi ngờ loại thứ hai. Có một dấu hiệu đáng học: nếu một bản sửa thêm vào mã mà công việc duy nhất của nó là ngăn một vụ crash chứ không phải làm điều đúng đắn, thì có lẽ bạn đang vá triệu chứng. Những bản sửa thực sự thường loại bỏ hoàn toàn trạng thái không thể xảy ra, chứ không chỉ sống sót qua nó.

Muốn bản ngoại tuyến?

Tải trọn cuốn sách dưới dạng PDF hoặc EPUB — miễn phí.