Tôi hiểu sự phát triển dựa trên thử nghiệm cho đến nay bạn chỉ được phép viết mã sản xuất khi bạn có một bài kiểm tra đơn vị (màu đỏ) không thành công.
Không. Bạn chỉ được phép viết mã đơn giản nhất có thể để thay đổi thông báo của bài kiểm tra. Nó không nói bất cứ điều gì về loại thử nghiệm.
Trên thực tế, bạn có thể sẽ bắt đầu bằng cách viết một bài kiểm tra chấp nhận thất bại (màu đỏ) cho một tiêu chí chấp nhận, chính xác hơn, bạn viết bài kiểm tra chấp nhận đơn giản nhất có thể thất bại; Sau đó, bạn chạy thử nghiệm, xem nó thất bại và xác minh rằng nó thất bại vì lý do đúng đắn. Sau đó, bạn viết một bài kiểm tra chức năng thất bại cho một lát chức năng của tiêu chí chấp nhận đó, một lần nữa, bạn viết bài kiểm tra chức năng đơn giản nhất có thể thất bại, chạy nó, xem nó thất bại và xác minh rằng nó không đúng lý do. Sau đó, bạn viết một bài kiểm tra đơn vị thất bại, bài kiểm tra đơn vị đơn giản nhất có thể thất bại, chạy nó xem nó thất bại, xác minh rằng nó thất bại vì lý do đúng.
Bây giờ , bạn viết mã sản xuất đơn giản nhất có thể thay đổi thông báo lỗi. Chạy thử nghiệm một lần nữa, xác minh rằng thông báo lỗi đã thay đổi, rằng nó đã thay đổi theo đúng hướng và mã đã thay đổi thông báo cho đúng lý do. (Lý tưởng nhất là thông báo lỗi sẽ biến mất ngay bây giờ và bài kiểm tra sẽ vượt qua, nhưng thường xuyên hơn là không, tốt hơn là thực hiện các bước nhỏ thay đổi thông báo thay vì cố gắng vượt qua bài kiểm tra trong một lần - đó là lý do tại sao các nhà phát triển khung kiểm tra dành quá nhiều nỗ lực cho các thông báo lỗi của họ!)
Khi bạn vượt qua bài kiểm tra đơn vị, bạn sẽ cấu trúc lại mã sản xuất của mình dưới sự bảo vệ của các bài kiểm tra. (Lưu ý rằng tại thời điểm này, thử nghiệm chấp nhận và thử nghiệm chức năng vẫn không thành công, nhưng không sao, vì bạn chỉ tái cấu trúc các đơn vị riêng lẻ được bao phủ bởi các thử nghiệm đơn vị.)
Bây giờ bạn tạo thử nghiệm đơn vị tiếp theo và lặp lại ở trên, cho đến khi thử nghiệm chức năng cũng vượt qua. Dưới sự bảo vệ của kiểm tra chức năng, bây giờ bạn có thể thực hiện tái cấu trúc trên nhiều đơn vị.
Chu kỳ giữa này bây giờ lặp lại cho đến khi thử nghiệm chấp nhận vượt qua, tại thời điểm đó bạn có thể thực hiện tái cấu trúc trên toàn bộ hệ thống.
Bây giờ, bạn chọn tiêu chí chấp nhận tiếp theo và chu trình bên ngoài bắt đầu lại.
Kent Beck, "người phát hiện" TDD (anh ấy không thích thuật ngữ "nhà phát minh", anh ấy nói rằng mọi người đã làm điều này suốt, anh ấy chỉ đặt tên cho nó và viết một cuốn sách về nó) sử dụng một sự tương tự từ nhiếp ảnh và gọi đây là "phóng to và thu nhỏ".
Lưu ý: bạn không phải lúc nào cũng cần ba cấp độ kiểm tra. Có lẽ, đôi khi bạn cần nhiều hơn. Thường xuyên hơn, bạn cần ít hơn. Nếu các phần chức năng của bạn nhỏ và các bài kiểm tra chức năng của bạn nhanh, thì bạn có thể nhận được mà không cần (hoặc với các bài kiểm tra đơn vị ít hơn). Thông thường, bạn chỉ cần kiểm tra chấp nhận và kiểm tra đơn vị. Hoặc, tiêu chí chấp nhận của bạn rất tốt đến nỗi các bài kiểm tra chấp nhận của bạn là các bài kiểm tra chức năng.
Kent Beck nói rằng nếu anh ta có một bài kiểm tra chức năng nhanh, nhỏ và tập trung, trước tiên anh ta sẽ viết các bài kiểm tra đơn vị, để cho các bài kiểm tra đơn vị lái mã, sau đó xóa (một số) đơn vị kiểm tra lại bao gồm mã cũng được bao phủ bởi các bài kiểm tra chức năng nhanh. Hãy nhớ rằng: mã kiểm tra cũng là mã cần được duy trì và tái cấu trúc, càng ít có thì càng tốt!
Tuy nhiên, tôi tự hỏi nếu cách tiếp cận dựa trên thử nghiệm cũng có thể được áp dụng cho các hình thức thử nghiệm khác.
Bạn không thực sự áp dụng TDD cho các bài kiểm tra. Bạn áp dụng nó cho toàn bộ quá trình phát triển của bạn. Đó là những gì phần "thúc đẩy" của Test- Driven -Development có nghĩa là: tất cả sự phát triển của bạn được điều khiển bởi các bài kiểm tra. Các thử nghiệm không chỉ lái xe mã bạn viết, họ cũng lái xe gì mã để viết, mà mã để viết tiếp theo. Họ lái thiết kế của bạn. Họ nói với bạn khi bạn hoàn thành. Họ nói với bạn những gì để làm việc tiếp theo. Họ cho bạn biết về các lỗi thiết kế trong mã của bạn (khi các bài kiểm tra khó viết).
Keith Braithwaite đã tạo ra một bài tập mà anh gọi là TDD As If You Mete It . Nó bao gồm một bộ quy tắc (dựa trên Ba quy tắc TDD của chú Bob Martin , nhưng chặt chẽ hơn nhiều) mà bạn phải tuân thủ nghiêm ngặt và được thiết kế để hướng bạn áp dụng TDD chặt chẽ hơn. Nó hoạt động tốt nhất với lập trình cặp (để cặp của bạn có thể đảm bảo bạn không vi phạm các quy tắc) và một người hướng dẫn.
Các quy tắc là:
- Viết chính xác một bài kiểm tra mới, bài kiểm tra nhỏ nhất mà bạn có thể chỉ ra theo hướng của một giải pháp
- Thấy nó thất bại; thất bại biên dịch được tính là thất bại
- Làm cho bài kiểm tra từ (1) vượt qua bằng cách viết mã thực hiện ít nhất bạn có thể trong phương thức kiểm tra .
- Tái cấu trúc để loại bỏ trùng lặp, và nếu không theo yêu cầu để cải thiện thiết kế. Hãy nghiêm ngặt về việc sử dụng các động thái này:
- bạn muốn có một phương thức mới, hãy đợi cho đến khi tái cấu trúc thời gian, sau đó, bạn tạo ra các phương thức mới (không thử nghiệm) bằng cách thực hiện một trong những phương thức này và không có cách nào khác:
- ưa thích: thực hiện Phương thức trích xuất trên mã thực hiện được tạo theo (3) để tạo một phương thức mới trong lớp thử nghiệm, hoặc
- nếu bạn phải: di chuyển mã triển khai theo (3) sang một phương thức triển khai hiện có
- bạn muốn có một lớp mới chờ đợi cho đến khi tái cấu trúc thời gian, sau đó, bạn tạo các lớp không thử nghiệm để cung cấp đích cho Phương thức di chuyển và không vì lý do nào khác
- Tạo các lớp triển khai với các phương thức bằng cách thực hiện Phương thức di chuyển và không có cách nào khác
Những quy tắc này có nghĩa là để thực hiện TDD. Chúng không có nghĩa là thực sự làm TDD trong sản xuất (mặc dù không có gì ngăn bạn thử nó). Họ có thể cảm thấy bực bội vì đôi khi dường như bạn sẽ thực hiện hàng ngàn bước nhỏ xíu mà không có tiến bộ thực sự.