Tôi có một nắm bắt tốt về kiểm tra đơn vị, DI, mocks, và tất cả sự tốt đẹp chính thiết kế cần phải có gần như mã đầy đủ như con người có thể (chính trách nhiệm duy nhất, suy nghĩ 'làm thế nào tôi sẽ kiểm tra điều này' như tôi mã, v.v ...).thiết kế ứng dụng có kích thước trung bình lớn khi thực hiện TDD?
Ứng dụng gần đây nhất của tôi, tôi không mã thực hiện TDD thực. Tôi đã kiểm tra đơn vị trong tâm trí khi tôi mã hóa, và viết các bài kiểm tra của tôi sau khi viết mã, tái cấu trúc, vv .. Tôi đã làm TDD khi nó 'dễ' để làm ... tuy nhiên tôi đã không nắm bắt tốt như Tôi làm ngay bây giờ ... Đó là dự án đầu tiên tôi sử dụng đầy đủ các khung công tác DI, mocking, vv và lần đầu tiên có toàn bộ mã bảo mật - và tôi đã học được rất nhiều từ nó khi tôi đi cùng. Tôi đang ngứa để được giao cho dự án tiếp theo của tôi vì vậy tôi có thể mã nó hoàn toàn làm TDD từ đầu.
Tôi biết đây là một câu hỏi rộng, và tôi đã ra lệnh TDD bằng ví dụ và XP Unleashed, nhưng tôi hy vọng cho một tổng quan ngắn gọn về cách bạn thiết kế/viết một ứng dụng lớn làm TDD.
Bạn có viết toàn bộ đơn đăng ký, không sử dụng gì ngoài phân tích mã không? (ví dụ: viết tất cả các chữ ký chức năng, giao diện, cấu trúc và viết toàn bộ ứng dụng nhưng không viết bất kỳ triển khai thực tế nào)? Tôi có thể hình dung nó hoạt động ở kích thước nhỏ giữa, nhưng điều này thậm chí có thể trên các ứng dụng lớn?
Nếu không, bạn sẽ viết kiểm tra đơn vị đầu tiên của mình cho hàm mức cao nhất trong hệ thống bằng cách nào? Cho phép nói ví dụ - trên một dịch vụ web, nơi bạn có một chức năng gọi là DoSomethingComplicated (param1, ..., param6) tiếp xúc với thế giới. Rõ ràng, việc viết bài kiểm tra đầu tiên cho một hàm đơn giản như AddNumbers() là tầm thường - nhưng khi hàm ở trên cùng của ngăn xếp cuộc gọi như thế này?
Bạn vẫn thiết kế trước? Rõ ràng bạn vẫn muốn làm thiết kế 'kiến trúc' - ví dụ, biểu đồ luồng hiển thị IE nói chuyện với IIS nói chuyện với một dịch vụ cửa sổ qua WCF nói về Cơ sở dữ liệu SQL ... một ERD hiển thị tất cả các bảng SQL và các trường của chúng, vv ... nhưng những gì về thiết kế lớp học? Tương tác giữa các lớp, v.v. Bạn có thiết kế này lên phía trước, hoặc chỉ tiếp tục viết mã stub, tái cấu trúc các tương tác khi bạn đi cùng, cho đến khi toàn bộ điều kết nối và trông giống như nó sẽ làm việc?
Bất cứ lời khuyên được nhiều đánh giá
Cảm ơn phản hồi tuyệt vời và chi tiết. Nghe có vẻ giống như cách tôi mã hóa ứng dụng cuối cùng của mình .. (ngoại trừ tôi 'lừa' viết bài kiểm tra đầu tiên ở hầu hết các địa điểm) Có lẽ chuyển đổi từ kiểm thử đơn vị sang TDD không thực sự thay đổi cách tôi thiết kế và kiến trúc nhiều như tôi suy nghĩ ... Vì vậy, tôi phải hỏi - là bạn rất nghiêm ngặt với các bài kiểm tra đầu tiên? Bao giờ thấy rằng chỉ đơn giản, nó chỉ dễ dàng hơn để viết mã trước khi thử nghiệm? Nếu vậy, điều này xảy ra như thế nào? Và trong bất kỳ mẫu/tình huống cụ thể nào? – dferraro
Tôi rất nghiêm khắc khi nói đến thử nghiệm đầu tiên, vì tôi thấy rằng giai đoạn * Red * của Red/Green/Refactor là rất quan trọng - Tôi thường viết một bài kiểm tra hóa ra thành màu xanh ngay lập tức, mặc dù ý định ngược lại. Điều này có nghĩa là thử nghiệm không kiểm tra những gì tôi nghĩ rằng nó đã được thử nghiệm, vì vậy nó phải được viết lại. Điều này xảy ra với tôi xấp xỉ. một lần một ngày, nhưng biện pháp bảo vệ này không có sẵn khi bạn viết các bài kiểm tra sau đó. Rất hiếm khi tôi tăng đột biến mà không thử nghiệm, nhưng khi điều đó xảy ra, tôi xóa mã tăng đột biến khi tôi hoàn tất và sau đó thực hiện đúng TDD dựa trên trải nghiệm tăng đột biến của tôi. –