2010-10-21 21 views
6

Tôi đang xây dựng một hệ thống DDD và chúng tôi có tất cả các yêu cầu trên giấy cho hệ thống đã được thiết lập. Có một sự bất đồng về cách chúng tôi đi về xây dựng mô hình miền của chúng tôi mà tôi cần một ý kiến.Có thực hành TDD phù hợp để thiết kế mô hình của bạn trước khi bạn viết các bài kiểm tra hoặc viết các bài kiểm tra thiết kế mô hình của bạn không?

Sở thích của tôi là thực hiện các yêu cầu và phác họa mô hình miền cơ bản với đường viền cho các lớp, thuộc tính và hành vi và mối quan hệ của chúng trên bảng trắng hoặc visio. Sau đó tôi lấy nó và bắt đầu xây dựng các bài kiểm tra đơn vị mà tôi sử dụng để xây dựng và thử nghiệm mô hình của mình từng mảnh một.

Đồng nghiệp của tôi dường như nghĩ rằng đây không phải là thực hành TDD + DDD tốt. Họ nghĩ rằng bạn không nên phác thảo ra bất cứ điều gì và bắt đầu xây dựng kiểm tra, và thiết kế mô hình của bạn khi bạn trải qua "cảm giác" của các bài kiểm tra.

Điều nào được coi là kỹ thuật TDD "đúng" khi xây dựng mô hình DDD?

+0

Kiểm tra trước * mọi thứ *. Nhận một số công cụ cho phép mã đầu tiên (như ReSharper cho Visual Studio) để thực hiện các bài kiểm tra thiết kế mô hình của bạn thực tế hơn để nhận ra. – bzlm

+0

Tôi đồng ý khi nói đến mã. Nhưng làm thế nào để bạn biết những gì để kiểm tra nếu bạn không có những điều cơ bản của mô hình miền của bạn ánh xạ ra một nơi nào đó? – Jason

+0

@ Jason Đây là một câu hỏi rất hay.Tôi định hỏi nó khi tôi thấy nó gợi ý khi tôi đang viết tựa đề. +1 Một số câu trả lời hay được đưa ra. – sfrj

Trả lời

7

Giống như bất kỳ loại câu hỏi kỹ thuật phần mềm nào, câu trả lời thường là "một chút của cả hai". Bạn không thể thực sự viết bất kỳ bài kiểm tra nào trừ khi bạn có một số ý tưởng về nội dung bạn đang thử nghiệm, nhưng bạn cũng có thể sử dụng các bài kiểm tra để ảnh hưởng đến thiết kế mô hình của mình. Có lẽ tất cả điều này xảy ra bên trong bộ não của bạn, hoặc có thể bạn ghi lại quá trình, nhưng (theo ý kiến ​​của tôi) bạn sẽ phải sử dụng cả hai ý tưởng cuối cùng.

Cá nhân, tôi sẽ thực hiện một vài trường hợp sử dụng, thực hiện một cú đâm vào mô hình miền, sau đó viết kiểm tra cho nó và xem những vấn đề thiết kế nào mà các thử nghiệm sẽ phát sinh. Rửa sạch và lặp lại. Tất cả điều này nên được thực hiện cùng với phần còn lại của nhóm.

+0

Vâng, đó là điều tôi đang cố nói. – djna

+0

Bạn có nghĩ rằng sẽ là một thực tế tồi tệ nếu toàn bộ mô hình miền được phác thảo để loại bỏ các phụ thuộc, sau đó viết các bài kiểm tra và thiết kế khuôn mẫu khi bạn hiểu sâu hơn về nó? – Jason

+0

Không, điều đó nghe có vẻ ổn với tôi. –

3

Tôi không thấy cách bạn có thể viết bài kiểm tra mà không có bất kỳ kiến ​​thức nào về các mục dữ liệu bạn đang nói đến.

Thing myThing = getThingById(87); 
assert(Thing is Blue); 

mà không có kiến ​​thức về sự tồn tại của Thing hoặc nó có id và màu mà bạn không thể viết thử nghiệm. Nói cách khác, bằng văn bản ngay cả những thử nghiệm đơn giản nhất bạn có trong đầu của bạn ít nhất là một mô hình dữ liệu phôi thai. Phác họa mô hình không chính thức có thể giúp bạn giải thích về các thử nghiệm của mình.

Bí quyết là tránh bị hút vào thực hiện chi tiết trước khi viết các bài kiểm tra, vì vậy tôi có thể hiểu tại sao mọi người đang đưa ra lời khuyên để chỉ làm bài kiểm tra.

Câu hỏi mà tôi quan tâm - cho rằng các thử nghiệm giống nhau có thể được đáp ứng bởi nhiều Mô hình Dữ liệu khác nhau (suy nghĩ về sự biến đổi) ở giai đoạn nào chúng ta bắt đầu xây dựng Mô hình Dữ liệu tốt hơn?

+0

Vâng, bạn có thể xem xét việc xây dựng mô hình dữ liệu tốt hơn bất cứ khi nào bạn đến giai đoạn 'refactor' của 'đỏ, xanh lá cây, refactor' –

+0

@Grant, vâng tôi đồng ý. Mô hình tốt hơn là một phần của tái cấu trúc. Nó chỉ là cuộc thảo luận này mang về nhà với tôi rằng các bài kiểm tra không nhất thiết phải đánh giá chất lượng thực hiện. Nhu cầu tái cấu trúc mã hoặc mô hình dữ liệu đến từ một số thông tin chi tiết khác. – djna

0

Nếu tôi hiểu chính xác bạn, bạn muốn bắt đầu viết mã trước khi thực hiện bất kỳ thiết kế nào. Đó chỉ là sai. Để phát triển nhanh, bạn cần phải làm một số thiết kế trước khi làm bất cứ điều gì khác. Tất nhiên, nó phải linh hoạt nhất có thể và không nên đi sâu vào chi tiết. Chi tiết được tinh chế thông qua các bài kiểm tra đơn vị.

0

Một trong những lợi ích quan trọng nhất của TDD là nó giúp bạn suy nghĩ về ứng dụng của mình theo những cách bạn có thể không khác, giống như DDD và nhiều thực tiễn khác mà chúng tôi cố gắng phát triển. Suy nghĩ chi tiết, không có nhiều chi tiết, là điều quan trọng nhất.

Các vấn đề liên quan