2009-02-26 24 views
8

Tôi thấy lợi ích của TDD, và tôi đang cố gắng học cách quấn đầu quanh nó. Tôi cũng đọc thêm về DDD và muốn bắt đầu áp dụng cả hai dự án này vào các dự án phần mềm của tôi.Bạn nên áp dụng TDD bao xa?

Tôi đã mua một vài cuốn sách lập trình "bằng tay", có nghĩa là những cuốn sách thảo luận về một ứng dụng thế giới thực với các giải pháp thực như trái ngược với các đoạn nhỏ) và tôi nhận thấy rằng chúng thường bắt đầu xác định tầng "cơ sở hạ tầng" của ứng dụng theo kiểu mã truyền thống đầu tiên, trái ngược với việc sử dụng TDD; cả hai cuốn sách đều đi ra ngoài để thảo luận về TDD tốt như thế nào và cách nghiên cứu tình huống sẽ sử dụng nó như thế nào.

Ví dụ: trong một trong các cuốn sách, Mạng xã hội ASP.NET 3.5, toàn bộ chương thứ hai phát triển lớp trình bao bọc nhật ký, lớp trình bao bọc email, lớp trình bao bọc Cache và phiên (và giao diện được liên kết) mà không cần chạm theo một bài kiểm tra đơn vị. Một cuốn sách khác, .NET Domain Driven Design với C#: Sự cố, Thiết kế, Giải pháp cũng tương tự, và tạo một lớp cơ sở và mã khung kho lưu trữ đầu tiên trước khi chạm vào mã "thực".

Tôi hiểu rằng bạn nên kiểm tra logic và chức năng thực tế của các lớp miền của bạn. Tôi đã nghĩ rằng "không kiểm tra đường ống dẫn nước" mã chỉ áp dụng cho mã mà bạn không viết (ví dụ như built-in. NET lớp học), nhưng những gì tôi đang đọc dường như chỉ ra/đề nghị rằng bạn chỉ nên kiểm tra mã mà thực sự phải làm với ứng dụng của bạn và không phải là hệ thống ống nước mà bạn viết để cung cấp nền tảng.

Đây có phải là cách chấp nhận được áp dụng TDD không?

Trả lời

2

Điều này có thể phụ thuộc vào các yếu tố khác về cách bạn dự định xây dựng dự án của mình.

Nếu bạn đang theo dõi các hoạt động nhanh nhẹn khác, chẳng hạn như lặp lại và giao hàng nhỏ, bạn sẽ không có nhiều kiến ​​trúc hoặc cơ sở hạ tầng ngay từ đầu, bởi vì bạn sẽ không có thời gian để phát triển nhiều triển khai và phân phối một vài tính năng đầu tiên. Dù sao, tại sao lại dành thời gian cho Big Design Up Front, khi bạn thực sự không biết mã sẽ cần gì?

Vì vậy, bạn sẽ xây dựng mã kiểm tra đầu tiên và qua một số lần lặp lại. Phạm vi kiểm tra có nghĩa là bạn có thể cấu trúc lại để cải thiện thiết kế của bạn, cái mà (theo lý thuyết) cho phép chính xác cơ sở hạ tầng xuất hiện cho ứng dụng khi nó tồn tại bất kỳ lúc nào. Ron Jeffries explains it well here. Nếu không có các bài kiểm tra, bạn có thể sẽ đạt đến một điểm mà bạn cần phải dừng lại và tìm ra cấu trúc nên là gì, sẽ mất thời gian tốt hơn để xây dựng các tính năng hữu ích và bạn sẽ phải kiểm tra ở cuối anyway.

Nếu bạn chắc chắn 100% bạn có thể vạch ra thiết kế chính xác trước khi bạn viết bất kỳ mã nào, thì đó là lựa chọn của bạn để làm như vậy. Tuy nhiên, hãy nhớ dành nhiều thời gian trong dự án để thử nghiệm. Tôi nghĩ mọi người nên xây dựng ít nhất một tác phẩm quan trọng cho cả quá trình Thác "truyền thống" và chỉ cần lặn vào và viết mã để có một số kinh nghiệm đặt các thực hành Agile vào ngữ cảnh. Nếu không, bạn có nguy cơ biết "cái gì" mà không biết "tại sao", và điều đó làm cho những bài học khó học hơn.

1

Tôi không có chuyên gia nào ở đây.

Nhưng nếu bạn đang phát triển các thành phần hệ thống ống nước, cần kiểm tra.
Nếu tôi hiểu chính xác, với TDD, mã được viết dựa trên giao diện & khi không có các thành phần hệ thống ống nước, mọi người sử dụng các đối tượng Mock.

0

Tôi đã tham gia điều này tại một số độ dài trong another question. Về cơ bản, điểm của việc sử dụng TDD và mocks và tất cả những thứ đó là để phát triển sự tự tin hơn.

+0

Đó sẽ là điểm kiểm tra đơn vị, vâng. Tuy nhiên, điểm TDD là để cho các bài kiểm tra của bạn thúc đẩy thiết kế. Thiết kế thực sự cải thiện nếu bạn viết bài kiểm tra đầu tiên bởi vì nó làm cho bạn phát triển mã có thể kiểm thử và bạn phải suy nghĩ về thiết kế một cách có hệ thống trước khi bạn bắt đầu viết. – tvanfosson

+0

Và hãy tưởng tượng, nếu bạn đã theo dõi liên kết, bạn đã thấy tôi tiếp tục với độ dài tuyệt vời nói chính xác điều đó. –

+0

Mặc dù tôi thực sự thấy TDD là một phương pháp kỹ thuật nghiêm ngặt hơn. –

6

Khi học TDD, hãy áp dụng mọi thứ. Sau đó, áp dụng những gì bạn cần.

5

Nếu bạn đang viết hệ thống ống nước từ đầu thì bạn nên kiểm tra xung quanh. Nếu bạn chỉ sử dụng một vài giao diện và các lớp để trừu tượng hóa các cuộc gọi linq2sql của bạn thì không, tôi sẽ không nhất thiết phải kiểm tra đơn vị xung quanh đó.

Để báo người thông minh hơn tôi:

Tôi không tôn giáo về TDD. Tôi coi đó là kỷ luật có giá trị sau đây. Trước hết, tôi không viết tất cả các bài kiểm tra của mình . Một số ít người trong số họ là chỉ đơn giản là thuận tiện hơn để viết sau khi mã. Thậm chí có một số mã I hoàn toàn không viết bài kiểm tra, bởi vì nó không đáng giá. Nhưng những trường hợp đó là ngoại lệ đối với quy tắc. Phần lớn mã tôi viết là , trước tiên tôi viết thử nghiệm .

-uncle bob martin qua: http://www.infoq.com/news/2009/02/spolsky-vs-uncle-bob

0

TDD nên được áp dụng cho bất kỳ mã mà bạn phát triển. Khi sử dụng TDD, bạn không cần phải kiểm tra mọi thứ - tức là, mục tiêu không phải là 100% mức độ phù hợp - nhưng mức độ phù hợp phải cao hơn mã mà bạn phát triển. Ví dụ, bạn không cần phải kiểm tra gettor/settors tự động trong C# - bạn có thể tin tưởng rằng ngôn ngữ sẽ thực hiện công việc của nó ở đó. Tuy nhiên, khi nghi ngờ, hãy viết bài kiểm tra trước.

0

Bằng mọi cách viết mã đầu tiên để có được kinh nghiệm với một nền tảng - chỉ cần dũng cảm và vứt nó đi khi bạn chắc chắn rằng bạn có thể giải quyết hầu hết các tác vụ trên nền tảng đó. Tôi vừa làm điều đó với một chương trình Java nhỏ mà tôi đã bắt đầu.
Bây giờ tôi đã đạt được một số kinh nghiệm tôi có thể thấy những gì tôi phải làm để có được độ phủ sóng rất cao ngay bây giờ mà tôi bắt đầu viết nó thử nghiệm đầu tiên, thậm chí hầu hết các hệ thống ống nước.

2

Nếu bạn kiểm tra một số mã và không kiểm tra mã khác, mã nào sẽ có lỗi?

Gợi ý: đó là mã chưa được kiểm tra.

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