Đối với nhiều người CNTT, kể cả bản thân tôi vài năm trước, quy trình phát triển phần mềm lý tưởng sẽ liên quan đến việc tạo ra các tài liệu thiết kế chi tiết với nhiều sơ đồ UML trước khi một dòng mã được viết. (Điều này trông giống như một mô tả về mô hình thác nước nhưng nó giống với nhanh nhẹn, ngoại trừ việc lặp lại nhỏ hơn.)
Trong hai hoặc ba năm qua, tôi đã thay đổi hoàn toàn suy nghĩ của mình. Tôi vẫn nghĩ rằng một đặc tả yêu cầu chi tiết với các trường hợp thử nghiệm liên quan là hoàn toàn cần thiết. Đối với các dự án lớn, tôi cũng sẽ yêu cầu một phác thảo về kiến trúc tổng thể trước khi bắt đầu viết mã. Nhưng tất cả phần còn lại nên được thực hiện trong mã càng nhiều càng tốt. Trong trường hợp lý tưởng không nên có mô tả về thiết kế phần mềm ngoại trừ chính mã.
Làm thế nào tôi đi đến kết luận này? Dưới đây là một số đối số:
Phản hồi
Các công cụ để viết tài liệu hoặc tạo sơ đồ cung cấp ít phản hồi. Đúng, có các công cụ mô hình hóa thực hiện một số kiểm tra tính nhất quán trên các sơ đồ UML nhưng chúng bị giới hạn và đi kèm với rất nhiều chi phí.
Không có phản hồi thì khó nhận biết và sửa lỗi.
Ngay khi bạn viết mã, bạn sẽ nhận được rất nhiều phản hồi, ví dụ:
- Lỗi và cảnh báo từ trình biên dịch
- Kết quả phân tích mã tĩnh
- Bài kiểm tra đơn vị
Lỗi có thể nhanh chóng được nhận ra và sửa chữa.
Tính nhất quán
Để đảm bảo rằng mã phù hợp với tài liệu của bạn, bạn phải kiểm tra lại nhiều lần. Nếu có những thay đổi thường xuyên, thật khó để giữ đồng bộ mã và tài liệu.
Tái cấu trúc
Có các công cụ và kỹ thuật mạnh mẽ để tái cấu trúc mã trong khi tái cấu trúc các mô tả hoặc sơ đồ văn bản thường khó và dễ bị lỗi.
Có một điều kiện tiên quyết để thực hiện công việc này: Mã phải đủ dễ đọc và hiểu. Điều này có lẽ không thể đạt được với Trình biên dịch, Cơ bản hoặc Fortran nhưng các ngôn ngữ hiện đại (và thư viện) thì biểu cảm hơn nhiều.
Vì vậy, nếu các đối số của tôi là hợp lệ, sẽ có một xu hướng về tài liệu và đặc tả thiết kế phần mềm nhẹ hơn hoặc nhẹ hơn. Có bằng chứng thực nghiệm cho xu hướng này?