Phát triển dựa trên đặc tả (Spec-Driven Development) là gì?
Hầu hết việc lập trình bằng AI đều bắt đầu theo cùng một cách. Bạn đưa cho một agent một câu lệnh (prompt) ngắn. Bạn quan sát nó viết mã. Trông có vẻ nhanh chóng. Sau đó, bạn nhận ra agent đã xây dựng sai thứ bạn cần. Bạn mất cả tiếng đồng hồ để sửa nó.
Agent không gặp khó khăn khi viết mã. Nó gặp khó khăn trong việc hiểu ý định của bạn.
Phát triển dựa trên đặc tả (Spec-driven development) khắc phục điều này. Thay vì yêu cầu viết mã ngay, bạn tạo một bản đặc tả (spec) trước. Bản đặc tả này là một kế hoạch bằng văn bản. Bạn chỉnh sửa kế hoạch cho đến khi nó chính xác. Chỉ sau đó, bạn mới để agent bắt đầu xây dựng.
Các công cụ mới như AWS Kiro và GitHub spec-kit giúp việc này trở nên dễ dàng. Nhưng ý tưởng này đã có từ lâu. Đó đơn giản là kỹ thuật tốt.
Một bản đặc tả tốt có ba phần:
• Yêu cầu (Requirements): Tính năng đó làm gì và cách đo lường sự thành công. Điều này mô tả hành vi, không phải mã nguồn. • Thiết kế (Design): Kế hoạch kỹ thuật. Điều này bao gồm kiến trúc, mô hình dữ liệu và các ràng buộc. • Nhiệm vụ (Tasks): Các đơn vị nhỏ, có thể kiểm thử được. Chúng đủ đơn giản để một agent có thể hoàn thành trong một lần thực hiện.
Mỗi phần sẽ cung cấp đầu vào cho phần tiếp theo. Yêu cầu dẫn dắt thiết kế. Thiết kế tạo ra các nhiệm vụ. Các nhiệm vụ dẫn dắt agent.
Trước đây, viết mã rất chậm. Việc viết đặc tả cảm giác như một sự lãng phí thời gian. Giờ đây, AI viết mã chỉ trong vài phút. Điểm nghẽn không còn là việc gõ phím nữa. Điểm nghẽn là việc quyết định chính xác cần phải xây dựng cái gì.
Một bản đặc tả chuyển các sai lầm của bạn sang một nơi "rẻ" hơn. Một câu văn sai trong tài liệu rất dễ sửa. Một lỗi triển khai sai trong mã nguồn thì rất tốn kém để khắc phục.
Kiểm duyệt mã (Reviewing code) rất khó. Bạn phải phân tích ngược lại ý định của người viết. Kiểm duyệt một bản đặc tả thì dễ dàng. Bạn thống nhất về ý định trước khi bất kỳ dòng mã nào được tạo ra.
Phương pháp này cũng giúp bạn mở rộng quy mô. Bạn có thể giao các nhiệm vụ khác nhau cho các agent khác nhau. Bản đặc tả đóng vai trò như một bản hợp đồng để giữ cho chúng hoạt động đồng nhất.
Cách tiếp cận này không phải lúc nào cũng là câu trả lời duy nhất.
- Nó là quá mức cần thiết cho các lỗi nhỏ. Đừng viết đặc tả cho một thay đổi chỉ có một dòng mã.
- Đặc tả có thể bị lỗi thời. Nếu mã thay đổi nhưng đặc tả không đổi, đặc tả sẽ trở thành một lời nói dối.
- Agent không phải lúc nào cũng tuân thủ. Đặc tả giúp giảm bớt sự mơ hồ, nhưng bạn vẫn phải kiểm duyệt kết quả đầu ra.
Hãy sử dụng đặc tả để làm rõ ý định của bạn. Hãy dùng nó để bắt lỗi khi chúng vẫn còn chỉ là những con chữ.
Nguồn: https://dev.to/jcamarate/what-is-spec-driven-development-with-ai-coding-agents-56mc
Cộng đồng học tập tùy chọn: https://t.me/GyaanSetuAi