Contoh bagus kode kompleks menggunakan TDD [ditutup]

37

Apa yang akan menjadi contoh yang baik dari penggunaan TDD dalam proyek besar, kehidupan nyata, kompleks? Semua contoh yang saya lihat sejauh ini adalah proyek mainan untuk tujuan buku atau kertas ...

Bisakah Anda menyebutkan proyek sumber terbuka yang banyak menggunakan TDD? Lebih disukai di C ++ tapi saya bisa membaca Java dan C # atau bahasa lain yang serupa.

Xavier Nodet
sumber
sulit untuk menjawab pertanyaan Anda. ada banyak proyek yang menggunakan tes otomatis, tetapi sulit untuk mengatakan seberapa jauh mereka mengikuti filosofi TDD karena mereka mungkin tidak mempromosikannya. juga c ++, c # dan java agak berakar pada aplikasi gui, yang sulit untuk diuji. biasanya Anda akan menemukan lebih banyak tes dalam kerangka kerja atau perpustakaan.
iMacUwhAK
Bagian dari alasan mengapa saya sangat tertarik untuk menemukan jawaban yang baik adalah bahwa saya saat ini sedang mengerjakan aplikasi desktop dengan mesin C ++ dan Java GUI ...
Xavier Nodet

Jawaban:

19
  • JUnit dikembangkan 100% berdasarkan uji. Faktanya, tes ini dikembangkan 100% berdasarkan uji coba di JUnit , yang seperti yang dikatakan Kent Beck beberapa kali merupakan latihan yang benar-benar memikat pikiran.
  • Saya percaya sistem file ZFS milik Sun dikembangkan berdasarkan uji coba.
  • Penerjemah ikj untuk bahasa pemrograman Ioke (JVM), penafsir ikc untuk bahasa pemrograman Ioke (CLI), seluruh inti Ioke dan perpustakaan standar, dan pada kenyataannya bahasa itu sendiri dikembangkan 100% berdasarkan uji (didorong oleh perilaku) ).
Jörg W Mittag
sumber
DUnit - kerangka kerja pengujian untuk Delphi, dilengkapi dengan rangkaian uji lengkap untuk DUnit itu sendiri. Dan saya setuju dengan Kent, itu sedikit membungkuk. ;-)
Nick Hodges
14

SQLite. Semua kode mereka sangat, sangat teruji :

Pada versi 3.7.14, perpustakaan SQLite terdiri dari sekitar 81,3 KSLOC dari kode C. (KSLOC berarti ribuan "Source Lines Of Code" atau, dengan kata lain, baris kode tidak termasuk baris kosong dan komentar.) Dengan perbandingan, proyek ini memiliki 1124 kali lebih banyak kode uji dan skrip uji - 91421.1 KSLOC.

liori
sumber
1
wow, mereka punya banyak tes: |
Luca Matteis
8
diuji berat tidak selalu berarti itu dikembangkan dengan cara test-driven (TDD). Apakah itu? (Saya tidak membaca seluruh halaman itu, tetapi saya tidak melihat "TDD" atau "didorong" dalam pencarian di halaman, jadi saya tidak tahu jawabannya.)
lindes
1
@ lindes: mereka tampaknya tidak mengikuti TDD dengan ketat, tetapi misalnya untuk setiap laporan bug mereka pertama kali melakukan tes. Mereka juga menjalankan tes untuk setiap komit. Jadi setidaknya sebagian ini adalah TDD.
liori
9

Jika saya ingat FitNesse ditulis dengan TDD, dan kontributor utama proyek ini adalah Paman Bob Martin, jadi, itu mungkin kode yang sangat bersih

CaffGeek
sumber
Saya baru saja melihatnya, dan ini adalah kode yang sangat bersih.
Robert Harvey
3

Dari diskusi saya dengan Tim P&P di Microsoft, Enterprise Library ditulis dengan TDD.

Walter
sumber
Saya menarik Enterprise Library 5.0 dan melihat kode sumbernya. Itu memang memiliki koleksi tes yang luas, tetapi ada banyak perlengkapan tes, penangan panggilan dan objek kompleks lainnya dalam proyek pengujian; sepertinya hampir seperti aplikasi sendiri. Sementara saya mengagumi pekerjaan itu, saya tidak melihat bagaimana itu cocok dengan pandangan dunia TDD tentang red-green-refactor.
Robert Harvey
@ Robert - Saya hanya bisa memberi tahu Anda apa yang mereka katakan ... Mereka menggunakan TDD saat menulisnya.
Walter
6
@ Robert - Bukanlah hal yang aneh bagi test suite untuk menjalani kehidupannya sendiri. KERING berlaku untuk aplikasi dan tes Anda. Dalam TDD Anda hanya melakukan 1 dari 4 hal: Menulis tes, menulis kode, tes refactoring, kode refactoring. Jika Anda melakukan semua hal ini dalam pola refactor merah-hijau, maka Anda melakukan TDD.
Jeff Knecht
1
@ Jeff: Terima kasih telah menjelaskan itu. Saya pikir ada beberapa perbedaan antara cara TDD dijelaskan (dalam istilah reduksionis, mekanistik), dan cara itu sebenarnya digunakan dalam skenario dunia nyata.
Robert Harvey
3

Saya tidak dapat menyebutkan nama proyek sumber terbuka apa pun yang menggunakan TDD, tetapi saya dapat memberi tahu Anda bahwa saya telah bekerja pada proyek dunia nyata tempat TDD digunakan ... dan merupakan penyelamat!

Steven A. Lowe
sumber
1
Sudahkah Anda - atau orang lain - membagikan pengalaman ini? Kedengarannya seperti cerita perang yang bagus.
Saya telah tweeted sedikit tentang hal itu, dan menggunakan anekdot untuk menggambarkan poin di posting lain. Cukuplah untuk mengatakan bahwa test-first design dan test suite otomatis membuat hidup saya jauh lebih mudah saya tidak akan kembali dan melakukan pengembangan dengan cara lain. Contoh: bug halus dalam satu kasus uji yang tidak akan ditemukan oleh pengujian manual (karena penguji manual tidak memeriksa integritas basis data setelah setiap operasi); menjalankan test case berkali-kali untuk mengetahuinya, setara dengan lebih dari 40 jam waktu pengujian manual yang dihemat. baru-baru ini membuat lebih dari 1000 perubahan kode dan menjalankan tes saat saya tidur. Batu TDD.
Steven A. Lowe
Aku percaya kamu. Saya hanya suka mendengar ceritanya. Anda mungkin menemukan QuickCheck menarik - en.wikipedia.org/wiki/QuickCheck - Saya melihat presentasi yang menemukan bug multithreading dalam kode produksi berusia 15 tahun.
"karena penguji manual tidak memeriksa integritas basis data setelah setiap operasi" - kendala dan skema DB yang dirancang lebih baik, dan akan menyelamatkan Anda semua yang repot-repot harus menghabiskan satu hari pengujian karena Anda akan segera melihat bug tersebut .
gbjbaanb
@ gbjbaanb: dalam hal ini, 'cek' jauh lebih kompleks daripada integritas skema sederhana, itu sebabnya ada tes otomatis untuk itu
Steven A. Lowe
0

Proyek pertama saya yang selesai dalam TDD adalah open source pada tahun 2002. Anda masih dapat menemukannya di sini:

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

Sekarang di tempat kerja saya bekerja sebagian besar di TDD tetapi tidak semua orang di tim kami, itu baik-baik saja asalkan menulis tes pada akhir hari.

Kami juga menulis aplikasi gwt-gae lengkap menggunakan TDD untuk bagian intinya. http://netnumero.appengine.com/company/mycompany

Saya tidak bisa merilis kode itu tetapi saya sedang mengerjakan proyek contoh lengkap yang dilakukan dalam TDD untuk GWT, yang menggunakan TDD juga di UI.

Segera setelah saya selesai (liburan Natal) saya akan mempostingnya di sini https://github.com/ubertob/gwt-tdd-example

Uberto
sumber