𝗦𝗽𝗲𝗰 𝗗𝗲𝗯𝘁 𝗗𝗼𝗲𝘀𝗻't 𝗗𝗶𝘀𝗮𝗽𝗽𝗲𝗮𝗿 𝗪𝗵𝗲𝗻 𝗬𝗼𝘂 𝗙𝗶𝘅 𝗜𝘁. 𝗜𝘁 𝗠𝗶𝗴𝗿𝗮𝘁𝗲𝘀.

Sửa một vấn đề không phải lúc nào cũng triệt tiêu được nó. Đôi khi, bạn chỉ đang chuyển nó sang một nơi khác.

Gần đây tôi đã kiểm tra (audit) một dự án để tìm nợ đặc tả (spec debt). Đây là những lỗ hổng trong các chỉ dẫn dẫn đến lỗi (bugs) hoặc hành vi AI không mong muốn. Tôi đã sửa bảy mục cụ thể. Sau khi sửa, các bài kiểm tra (tests) đều vượt qua. Mọi thứ đều hiển thị màu xanh (green).

Nhưng nợ đặc tả không hề biến mất. Nó đã chuyển dịch từ các tệp tính năng (feature files) sang các định nghĩa bước (step definitions).

Dưới đây là những gì tôi học được từ việc sửa các mục này:

  • Sự chính xác là yếu tố then chốt. Thay vì nói "phản hồi nhanh", hãy nói "phản hồi trả về trong vòng 12 giây kể từ khi gửi đơn hàng". Điều này giúp cố định mốc thời gian.
  • Tránh sự mơ hồ. "Thử lại 2 lần" là không rõ ràng. Điều đó có nghĩa là tổng cộng 2 lần thử hay là 3 lần? Hãy dùng "không quá tổng cộng 2 yêu cầu thanh toán" để đảm bảo chắc chắn.
  • Gọi tên cơ chế. Nói "kho hàng được giải phóng" là mơ hồ. Hãy chỉ rõ rằng "dịch vụ kho hàng (inventory service) nhận được một yêu cầu giải phóng cho mặt hàng X."
  • Loại bỏ các đảm bảo giả tạo. Nếu một bước vượt qua chỉ vì một tính năng chưa tồn tại, hãy xóa bước đó đi. Một bài kiểm tra vượt qua cho một luồng (flow) chưa tồn tại là một sự dối trá.
  • Định nghĩa thế nào là "đúng". Đừng bao giờ dùng các từ như "đúng" hoặc "hợp lệ" mà không có các giá trị cụ thể. Hãy dùng "chứa order_id 123" thay vì "chứa đúng id."

Tôi đã xây dựng một khung làm việc (framework) để tìm ra những vấn đề này. Hãy đặt ra 5 câu hỏi sau cho mỗi kịch bản (scenario):

  • Ai là người chịu trách nhiệm cho kịch bản này?
  • Điều này để ngỏ những quyết định nào?
  • Tất cả các thuật ngữ ở đây đã được định nghĩa chưa?
  • Điều này đang mô tả hành vi hay cách triển khai (implementation)?
  • Còn thiếu gì trong mô tả này?

Cạm bẫy lớn nhất chính là khoảng cách giữa văn bản và mã nguồn. Bạn có thể viết một chỉ dẫn hoàn hảo và chính xác trong đặc tả của mình. Nhưng nếu mã nguồn bên dưới sử dụng một lối tắt (shortcut) để vượt qua bài kiểm tra đó, bạn vẫn đang mắc nợ.

Đặc tả ghi là "tạo một đơn hàng thông qua API." Nhưng thực tế mã nguồn chỉ chèn trực tiếp một đơn hàng vào cơ sở dữ liệu để tiết kiệm thời gian. Bài kiểm tra vượt qua, nhưng nợ đã chuyển từ yêu cầu sang phần triển khai (implementation).

Đừng cố gắng viết những bản đặc tả hoàn hảo ngay từ lần đầu tiên. Hãy viết chúng, kiểm tra chúng và sửa chúng.

Source: https://dev.to/diyaburman/spec-debt-doesnt-disappear-when-you-fix-it-it-migrates-d25

Optional learning community: https://t.me/GyaanSetuAi