Các ví dụ thực tế về các ứng dụng được viết bằng TDD và phạm vi kiểm tra tốt? [đóng cửa]


17

Có bất kỳ ứng dụng nguồn mở nào được phát triển bằng cách sử dụng phát triển theo hướng kiểm tra đóng vai trò là mô hình về cách kiểm thử đơn vị tốt nên hoạt động không?

Tôi muốn xem các ví dụ trong C # và .NET. (Lưu ý rằng tôi đã đề cập đến các ứng dụng, không chỉ các thư viện.)

Tôi là một lập trình viên trung cấp, những người thực sự muốn tin tưởng và thực hành TDD. Ứng dụng tôi làm trong công việc hàng ngày của tôi khá phức tạp - khoảng 1 triệu dòng mã - và tôi rất muốn giới thiệu thêm thử nghiệm đơn vị. Chúng tôi có một số bài kiểm tra đơn vị tại chỗ, nhưng những nỗ lực của tôi tại TDD và với việc làm việc với mã đã được kiểm tra đã không được khuyến khích.

Theo kinh nghiệm hạn chế được thừa nhận của tôi, TDD dường như khuyến khích rất nhiều sự phức tạp trong tên của việc tách rời. Các bit của ứng dụng khó kiểm tra - và ngẫu nhiên có xu hướng rất quan trọng - bị đẩy ra ngoại vi, vào vương quốc của các thử nghiệm tích hợp có thể hoặc không bao giờ được viết. (Tôi đang nghĩ về các nghi phạm thông thường ở đây, truy cập hệ thống tệp, hydrat hóa các đối tượng từ cơ sở dữ liệu, các cuộc gọi web không đồng bộ, v.v.)

Mã đang được thử nghiệm có xu hướng liên quan đến rất nhiều sự hợp tác giữa các đối tượng và có thể một số luồng logic đơn giản, tất cả đều xảy ra trong bộ nhớ và có thể được viết theo cách đơn giản hơn, dễ hiểu hơn nếu mọi thứ không phải được tách rời hoàn toàn để thử nghiệm.

Tôi hiểu các kỹ thuật để chế nhạo phụ thuộc và như vậy, nhưng theo kinh nghiệm của tôi, việc sử dụng chế độ nhạo báng rất nhiều dẫn đến các bài kiểm tra rất dễ vỡ. Nếu bản năng đầu tiên của tôi khi nhìn thấy một loạt các thử nghiệm chuyển sang màu đỏ là "Tuyệt vời, bây giờ tôi phải sửa tất cả các giả", thì các thử nghiệm của tôi đã trở thành một lực cản thay vì một mạng lưới an toàn.

Tôi đang cố gắng vượt qua rào cản tinh thần này và là một phần trong đó tôi đang đọc cuốn sách của Michael Feathers, hoạt động hiệu quả với Bộ luật kế thừa . Tôi hy vọng sẽ cho tôi thấy một số thứ tôi đang thiếu.

Tôi cũng muốn nghiên cứu một số ứng dụng .NET không cần thiết với độ bao phủ mã tốt, có thể là hệ thống quản lý nội dung hoặc ứng dụng CRUD. Khung thử nghiệm FitNlie mà chú Bob nói đến là thứ mà tôi có thể nhìn vào, nhưng thật tuyệt khi thấy thứ gì đó được viết bằng ngôn ngữ mà tôi quen thuộc nhất.

Bất kỳ đề nghị hoặc lời nói khôn ngoan sẽ được đánh giá cao.



2
Không hoàn toàn ... Tôi thích xem các ví dụ về các ứng dụng trong thế giới thực. Câu trả lời được chấp nhận trong bài viết đó đề xuất một khung thử nghiệm. Tôi đã thấy một số ví dụ về khung và thư viện trước đây, nhưng điều đó không giải quyết được câu hỏi của tôi.
Josh Earl

@JoshEarl - Tôi đồng ý .. Tôi không nghĩ câu trả lời của tôi dưới đây có liên quan đến bài đăng khác
hanzolo

Câu trả lời:


14

Tôi không biết liệu TDD có được sử dụng hay không, nhưng một ví dụ điển hình về thử nghiệm là sqlite có độ bao phủ 100% chi nhánh đáng chú ý và có mã kiểm tra và tập lệnh nhiều hơn 1000 lần so với mã sản phẩm.


4
Nghe có vẻ lãng phí nỗ lực đáng kể nếu tỷ lệ mã của họ để kiểm tra mã là cao
Ryathal

6
@Ryathal: Chi phí thất bại quyết định nỗ lực thử nghiệm, không phải độ dài của mã được thử nghiệm. Với việc sử dụng đủ rộng trong các phương pháp tiếp cận nhiệm vụ đầy đủ, thử nghiệm có thể có giá trị. Tuy nhiên, tôi không thực sự chắc chắn nếu SQLite không làm quá.
thiton

3
sqlite chắc chắn là nhiệm vụ quan trọng đối với nhiều người. Bạn có thể ngạc nhiên về mức độ thường xuyên sử dụng (ví dụ: OSX, iOS, Android OS). Và bạn phải nhận ra rằng, rất nhiều dòng mã và dữ liệu thử nghiệm đó có thể được tạo ra bởi máy. Một cơ sở dữ liệu sức mạnh công nghiệp có rất nhiều trường hợp cạnh.
Bryan Oakley

10
SQLite là các cơ sở dữ liệu sử dụng rộng rãi nhất SQL trên hành tinh này, đó là cơ sở lắp đặt một trật tự của tầm quan trọng lớn hơn MySQL, PostgreSQL, SQL Server, Oracle, DB2 kết hợp . Đây có lẽ là một trong những phần mềm được sử dụng rộng rãi nhất. Nếu có lỗi trong SQLite, mọi điện thoại thông minh trên hành tinh sẽ ngừng hoạt động. Tôi nghĩ rằng điều đó biện minh cho một chút hoang tưởng.
Jörg W Mittag

@ JörgWMittag wow, tôi chưa bao giờ biết điều đó về SQLite. Vui. Cảm ơn. Nhưng mã thử nghiệm gấp 1000 lần. Thật phi thường.
mike gặm nhấm


0

Rất nhiều thư viện nguồn mở của bên thứ ba được TDDed. Các thư viện ngủ đông của tê giác, chẳng hạn như RhinoMocks và NHibernate, được các nhà phát triển của họ sử dụng XUnit làm khung kiểm tra đơn vị.

Giờ đây, với OSS, bạn thường không thể đảm bảo rằng MỌI THỨ trong sản phẩm đã được TDDed. Cộng đồng có thể có các tiêu chuẩn bao gồm thực tiễn này và thậm chí họ có thể sử dụng bot xây dựng thực hiện các số liệu bảo hiểm mã, nhưng TDD là một tâm lý phải được nhà phát triển mua và với công chúng có thể cam kết mở rộng các thân cây nguồn VCS giống như các thân trên GitHub, bất kỳ ai cũng có thể cam kết bất kỳ thay đổi nào với bất kỳ số tiền bảo hiểm thử nghiệm nào (hoặc nếu yêu cầu bảo hiểm có thể được viết sau khi thực tế, đó là vi phạm tinh thần của TDD nhưng thực sự không có một cách tốt để bắt nó trên cam kết).

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.