Luôn có nguy cơ lạm dụng thiết kế TDD hoặc thiết kế trả trước. Vì vậy, câu trả lời là nó phụ thuộc. Tôi thích bắt đầu với một bài kiểm tra câu chuyện/chấp nhận người dùng là cơ sở của yêu cầu mà các bài kiểm tra của tôi sẽ hỗ trợ trong quá trình sản xuất. Chỉ sau khi tôi đã thiết lập được điều đó, tôi bắt đầu viết các bài kiểm tra đơn vị chi tiết theo kiểu TDD. Nếu thiết kế duy nhất và suy nghĩ bạn làm là thông qua TDD, thì bạn có nguy cơ quá nhiều cách tiếp cận từ dưới lên, điều này có thể cung cấp cho bạn các đơn vị và lớp học tuyệt vời trong sự cô lập, nhưng khi bạn cố gắng tích hợp chúng vào câu chuyện của người dùng có thể ngạc nhiên vì đã làm tất cả sai. Để có thêm cảm hứng về điều này, hãy xem att BDD.
A great "debate" about this has been recorded giữa Robert C. Martin và James Coplien, nơi trước đây là người ủng hộ TDD và người thứ hai đã tuyên bố rằng nó phá hỏng thiết kế của hệ thống. Đây là những gì Robert nói về TDD và thiết kế:
"Hiện đã có một cảm giác trong cộng đồng Agile từ khoảng '99 rằng kiến trúc là không thích hợp, chúng tôi không cần làm kiến trúc, tất cả chúng ta cần phải làm là viết một lô kiểm tra và làm rất nhiều câu chuyện và làm nhanh lặp và mã sẽ lắp ráp bản thân một cách kỳ diệu, và điều này đã luôn được ngựa shit. tôi thậm chí còn nghĩ rằng hầu hết những người ủng hộ Agile gốc sẽ đồng ý rằng đó là một sự silliness."
James Coplien khẳng định rằng chỉ đơn thuần là lái xe thiết kế của bạn từ TDD có một nguy cơ rất lớn:
" Một trong những điều chúng ta thấy rất nhiều, trong rất nhiều của dự án, được rằng các dự án đi về phía nam về lần chạy nước rút thứ 3 của họ và chúng bị hỏng và ghi vì chúng không thể tiến xa hơn nữa, bởi vì chúng đã tự dồn vào chân tường về mặt kiến trúc. Và bạn không thể cấu trúc lại theo cách của bạn ra khỏi điều này bởi vì refactoring có được qua lớp loại, qua phân cấp lớp, và bạn không còn có thể có bất kỳ sự bảo đảm về việc có cùng chức năng."
Ngoài ra ông đưa ra một ví dụ tuyệt vời của một tài khoản ngân hàng có lẽ sẽ trông như thế nào nếu bạn kiểm tra lái xe nó so với sử dụng kiến thức trả trước của bạn để lái xe các kiến trúc:
"tôi nhớ khi tôi đang nói chuyện với Kent o nce, về trong những ngày đầu tiên khi ông đề xuất TDD, và điều này là theo ý nghĩa của YAGNI và làm điều đơn giản nhất có thể có thể làm việc và ông nói: 'Ok. Hãy tạo một tài khoản ngân hàng , một tài khoản tiết kiệm. ' Tài khoản tiết kiệm là gì? Đó là số và bạn có thể thêm vào số và bạn có thể trừ số đó. Vì vậy, tài khoản tiết kiệm là gì, là một máy tính . Hãy tạo một máy tính, và chúng tôi có thể cho thấy rằng bạn có thể thêm vào số số dư và trừ khỏi số dư . Đó là điều đơn giản nhất có thể có thể hoạt động, mọi thứ khác là một sự tiến hóa của điều đó.
Nếu bạn làm một hệ thống ngân hàng thực tế, một tài khoản tiết kiệm không phải là thậm chí một đối tượng và bạn sẽ không refactor theo cách của bạn đến kiến trúc ngay từ rằng một. Tài khoản tiết kiệm là gì, là một quá trình thực hiện lặp lại qua đường dẫn kiểm tra của cơ sở dữ liệu giao dịch, tiền gửi và lãi các cuộc tụ họp và các thay đổi khác của tiền. Nó không giống như tài khoản tiết kiệm là một số tiền ngồi trên một giá đỡ ở một nơi nào đó, mặc dù đó là góc nhìn người dùng và bạn chỉ cần biết rằng có cấu trúc tương đối phức tạp này trong cơ sở của hệ thống ngân hàng để hỗ trợ người thuế và chuyên gia truyền thông và tất cả những người khác này, mà bạn không thể truy cập theo cách gia tăng . Vâng, bạn có thể, vì tất nhiên ngành ngân hàng đã đến sau 40 năm. Bạn muốn cho mình 40 năm? Đó là không nhanh nhẹn. "
Điều thú vị ở đây là cả người đề xuất TDD và đối thủ TDD đều nói rằng bạn cần thiết kế trước.
Nếu bạn có thời gian, hãy xem video. Đó là một cuộc thảo luận tuyệt vời giữa hai chuyên gia có ảnh hưởng lớn và chỉ dài 22 phút.
Điều gì tùy thuộc vào khuôn khổ không được thiết kế để được kiểm tra thân thiện? Tôi thích TDD và tự mình luyện tập nhưng tôi thường thấy sự cần thiết cho một sơ đồ nhanh ở góc bàn để chắc chắn rằng tôi đã nhận được tất cả các quyền – Jean
Đối với mã cũ, đó là một câu chuyện hoàn toàn khác nhau hoàn toàn. : D –
Có một nhu cầu tiềm ẩn để có một số thiết kế cơ bản ... bạn cần điều đó để có thể viết các bài kiểm tra đầu tiên của bạn. Mối quan tâm không phải là chống lại thiết kế lên phía trước, đó là về thiết kế BIG lên phía trước trước khi thiết kế tốt nhất cho các tính năng/nhiệm vụ cụ thể được đến. –