Ví dụ hay về mã phức tạp khi sử dụng TDD [đã đóng]


37

Điều gì sẽ là một ví dụ tốt về việc sử dụng TDD trong các dự án lớn, thực tế, phức tạp? Tất cả các ví dụ tôi đã thấy cho đến nay là các dự án đồ chơi cho mục đích của một cuốn sách hoặc một tờ giấy ...

Bạn có thể đặt tên cho một dự án nguồn mở sử dụng nhiều TDD không? Tốt hơn là trong C ++ nhưng tôi có thể đọc Java và C # hoặc các ngôn ngữ tương tự khác.


khó trả lời câu hỏi của bạn có nhiều dự án sử dụng các bài kiểm tra tự động, nhưng thật khó để nói rằng họ theo triết lý TDD bao xa vì có lẽ họ không quảng bá nó. còn c ++, c # và java kinda có nguồn gốc từ các ứng dụng gui, rất khó kiểm tra. thông thường bạn sẽ tìm thấy nhiều bài kiểm tra trong khuôn khổ hoặc thư viện.
iMacUwhAK

Một phần lý do tại sao tôi rất quan tâm đến việc tìm câu trả lời hay là tôi hiện đang làm việc trên một ứng dụng máy tính để bàn có công cụ C ++ và GUI Java ...
Xavier Nodet

Câu trả lời:


19
  • JUnit được phát triển 100% dựa trên thử nghiệm. Trên thực tế, nó đã được phát triển 100% dựa trên thử nghiệm trong JUnit , như Kent Beck đã nói một vài lần là một bài tập thực sự có đầu óc.
  • Tôi tin rằng hệ thống tập tin ZFS của Sun đã được phát triển dựa trên thử nghiệm.
  • Trình thông dịch ikj cho ngôn ngữ lập trình Ioke (JVM), trình thông dịch ikc cho ngôn ngữ lập trình Ioke (CLI), toàn bộ thư viện chuẩn và thư viện Ioke, và trên thực tế, chính ngôn ngữ này đã được phát triển dựa trên kiểm tra 100% ).

DUnit - khung thử nghiệm cho Delphi, đi kèm với một bộ thử nghiệm hoàn chỉnh cho chính DUnit. Và tôi đồng ý với Kent, đó là một chút suy nghĩ uốn éo. ;-)
Nick Hodges

14

SQLite. Tất cả mã của họ được kiểm tra rất, rất nặng nề :

Kể từ phiên bản 3.7.14, thư viện SQLite bao gồm khoảng 81,3 KSLOC của mã C. (KSLOC có nghĩa là hàng ngàn "Dòng mã nguồn" hay nói cách khác là các dòng mã không bao gồm các dòng và nhận xét trống.) Để so sánh, dự án có mã kiểm tra và kịch bản kiểm tra gấp 1124 lần - 91421.1 KSLOC.


1
wow, họ có rất nhiều bài kiểm tra: |
Luca Matteis

8
được thử nghiệm nhiều không nhất thiết có nghĩa là nó được phát triển theo cách thử nghiệm (TDD). Là nó? (Tôi đã không đọc toàn bộ trang đó, nhưng tôi không thấy "TDD" hay "thúc đẩy" trong các tìm kiếm trong trang, vì vậy tôi không biết câu trả lời cho điều này.)
lindes

1
@lindes: họ dường như không tuân thủ nghiêm ngặt TDD, nhưng ví dụ như đối với mọi báo cáo lỗi, trước tiên họ thực hiện kiểm tra. Ngoài ra họ chạy thử nghiệm cho mọi cam kết. Vì vậy, ít nhất một phần đây là TDD.
liori

9

Nếu tôi nhớ lại FitNesse được viết bằng TDD và người đóng góp chính cho dự án là chú Bob Martin, thì có lẽ đó là mã thực sự sạch


Tôi chỉ có một cái nhìn về nó, và nó thực sự mã sạch.
Robert Harvey

3

Từ các cuộc thảo luận của tôi với Nhóm P & P tại Microsoft, Thư viện doanh nghiệp đã được viết bằng TDD.


Tôi đã kéo xuống Thư viện doanh nghiệp 5.0 và xem mã nguồn. Nó có một bộ sưu tập rộng rãi các thử nghiệm, nhưng có rất nhiều thiết bị thử nghiệm, trình xử lý cuộc gọi và các đối tượng phức tạp khác trong dự án thử nghiệm; nó có vẻ gần giống như một ứng dụng theo đúng nghĩa của nó. Trong khi tôi ngưỡng mộ công việc, tôi không thấy nó phù hợp với thế giới TDD của công cụ tái cấu trúc đỏ-xanh.
Robert Harvey

@Robert - Tôi chỉ có thể nói với bạn những gì họ nói với tôi ... Họ đã sử dụng TDD khi viết nó.
Walter

6
@Robert - Không có gì lạ khi bộ thử nghiệm có một cuộc sống riêng. DRY áp dụng cho cả ứng dụng của bạn và các bài kiểm tra. Trong TDD, bạn chỉ được thực hiện 1 trong 4 điều: Viết bài kiểm tra, viết mã, kiểm tra tái cấu trúc, tái cấu trúc mã. Nếu bạn đang làm tất cả những điều này theo mô hình tái cấu trúc màu đỏ-xanh lá cây, thì bạn đang thực hiện TDD.
Jeff Knecht

1
@Jeff: Cảm ơn đã làm rõ điều đó. Tôi nghĩ rằng có một số khác biệt giữa cách giải thích TDD (theo thuật ngữ rút gọn, cơ học) và cách nó thực sự được sử dụng trong các tình huống thực tế.
Robert Harvey

3

Tôi không thể đặt tên cho bất kỳ dự án nguồn mở nào đã sử dụng TDD, nhưng tôi có thể nói với bạn rằng tôi đã làm việc trong các dự án trong thế giới thực nơi TDD đã được sử dụng ... và là cứu cánh!


1
Bạn - hoặc những người khác - đã chia sẻ những kinh nghiệm này? Âm thanh như một câu chuyện chiến tranh hay.

Tôi đã tweet một chút về nó, và sử dụng các giai thoại để minh họa các điểm trong các bài viết khác. đủ để nói rằng thiết kế thử nghiệm đầu tiên và bộ thử nghiệm tự động làm cho cuộc sống của tôi dễ dàng hơn nhiều, tôi sẽ không quay trở lại và phát triển theo bất kỳ cách nào khác. Ví dụ: lỗi tinh vi trong một trường hợp thử nghiệm mà thử nghiệm thủ công sẽ không tìm thấy (vì người kiểm tra thủ công không kiểm tra tính toàn vẹn của cơ sở dữ liệu sau mỗi hoạt động); đã chạy thử nghiệm nhiều lần trong ngày hôm đó để tìm ra nó, tương đương với hơn 40 giờ thời gian thử nghiệm thủ công được lưu. gần đây đã thực hiện hơn 1000 thay đổi mã và chạy thử nghiệm trong khi tôi ngủ. Đá TDD.
Steven A. Lowe

Tôi tin bạn. Tôi chỉ thích nghe những câu chuyện. Bạn có thể thấy QuickCheck thú vị - vi.wikipedia.org/wiki/QuickCheck - Tôi đã thấy một bản trình bày tìm thấy lỗi đa luồng trong mã sản xuất 15 năm tuổi.

"bởi vì những người kiểm tra thủ công không kiểm tra tính toàn vẹn của cơ sở dữ liệu sau mỗi hoạt động" - các ràng buộc và lược đồ DB được thiết kế tốt sẽ giúp bạn tiết kiệm tất cả những lo lắng về việc phải dành một ngày để kiểm tra vì bạn đã thấy lỗi ngay lập tức .
gbjbaanb

@gbjbaanb: trong trường hợp này, 'kiểm tra' phức tạp hơn nhiều so với tính toàn vẹn của lược đồ đơn giản, đó là lý do tại sao có một thử nghiệm tự động cho nó
Steven A. Lowe

0

Dự án đầu tiên của tôi được thực hiện hoàn toàn trong TDD là một nguồn mở vào năm 2002. Bạn vẫn có thể tìm thấy nó ở đây:

http://sourceforge.net/projects/camelos/

Bây giờ tại nơi làm việc tôi đang làm việc chủ yếu ở TDD nhưng không phải ai trong nhóm chúng tôi cũng vậy, điều đó tốt với điều kiện là các bài kiểm tra đã viết vào cuối ngày.

Chúng tôi cũng đã viết một ứng dụng gwt-gae hoàn chỉnh bằng TDD cho phần cốt lõi. http://netnumero.appengine.com/company/mycompany

Tôi không thể phát hành mã đó nhưng tôi đang làm việc với một dự án ví dụ hoàn chỉnh được thực hiện trong TDD cho GWT, đó là sử dụng TDD trong UI.

Ngay sau khi tôi kết thúc (ngày lễ Giáng sinh) tôi sẽ đăng nó ở đây https://github.com/ubertob/gwt-tdd-example

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.