Contoh aplikasi dunia nyata yang ditulis dengan TDD dan cakupan pengujian yang baik? [Tutup]

17

Apakah ada aplikasi open source yang dikembangkan menggunakan pengembangan yang didorong oleh tes yang berfungsi sebagai model seberapa baik pengujian unit harus bekerja?

Saya lebih suka melihat contoh dalam C # dan .NET. (Perhatikan bahwa saya menyebutkan aplikasi, bukan hanya perpustakaan.)

Saya seorang programmer tingkat menengah yang benar-benar ingin percaya dan mempraktikkan TDD. Aplikasi yang saya kerjakan dalam pekerjaan sehari-hari saya cukup rumit - sekitar 1 juta baris kode - dan saya ingin memperkenalkan lebih banyak pengujian unit. Kami memiliki beberapa unit test di tempat, tetapi upaya saya di TDD dan dengan mengerjakan kode yang sudah diuji belum menggembirakan.

Dalam pengalaman saya yang diakui terbatas, TDD tampaknya mendorong banyak kompleksitas dalam nama decoupling. Bit aplikasi yang sulit untuk diuji - dan yang secara kebetulan cenderung kritis - terdorong keluar ke pinggiran, ke ranah tes integrasi yang mungkin atau mungkin tidak pernah ditulis. (Saya memikirkan tersangka yang biasa ada di sini, mengakses sistem file, menghidrasi objek dari database, panggilan web tidak sinkron, dll.)

Kode yang sedang diuji cenderung melibatkan banyak kolaborasi di antara objek, dan mungkin beberapa logika aliran sederhana, yang semuanya terjadi dalam memori dan yang bisa dibilang dapat ditulis dengan cara yang lebih sederhana, lebih mudah dimengerti jika semuanya tidak harus dipisahkan secara total. untuk pengujian.

Saya mengerti teknik untuk mengejek dependensi dan semacamnya, tetapi dalam pengalaman saya banyak menggunakan mengejek mengarah pada tes yang sangat rapuh. Jika naluri pertama saya setelah melihat banyak tes menjadi merah adalah, "Hebat, sekarang saya harus memperbaiki semua ejekan," maka tes saya telah menjadi hambatan daripada jaring pengaman.

Saya mencoba untuk melewati penghalang mental ini, dan sebagai bagian dari itu saya membaca buku Michael Feathers, Bekerja Efektif dengan Legacy Code . Saya berharap akan menunjukkan kepada saya beberapa hal yang saya lewatkan.

Saya juga ingin mempelajari beberapa aplikasi .NET nontrivial dengan cakupan kode yang baik, mungkin sistem manajemen konten, atau aplikasi CRUD. Kerangka pengujian FitNesse yang dibicarakan Paman Bob adalah sesuatu yang mungkin akan saya lihat, tetapi akan menyenangkan untuk melihat sesuatu yang ditulis dalam bahasa yang paling saya kenal.

Setiap saran atau kata-kata bijak akan dihargai.

Josh Earl
sumber
2
Tidak cukup ... Saya tertarik melihat contoh aplikasi dunia nyata. Jawaban yang diterima di pos itu merekomendasikan kerangka pengujian. Saya telah melihat beberapa contoh kerangka kerja dan perpustakaan sebelumnya, tetapi itu tidak menjawab pertanyaan saya.
Josh Earl
@JoshEarl - Saya setuju .. Saya tidak berpikir jawaban saya di bawah ini akan relevan dengan posting lainnya
hanzolo

Jawaban:

14

Saya tidak tahu apakah TDD digunakan, tetapi contoh pengujian bintang adalah sqlite yang memiliki cakupan cabang 100% luar biasa , dan memiliki lebih dari 1000 kali lebih banyak kode uji dan skrip daripada kode produk.

Bryan Oakley
sumber
4
kedengarannya seperti usaha yang luar biasa jika rasio kode terhadap kode uji mereka setinggi itu
Ryathal
6
@ Ryathal: Biaya kegagalan menentukan upaya pengujian, bukan panjang kode yang diuji. Mengingat penggunaan yang cukup luas dalam pendekatan misi-kritis yang cukup, pengujian mungkin layak dilakukan. Saya tidak begitu yakin, jika SQLite tidak berlebihan.
thiton
3
sqlite jelas sangat penting bagi banyak orang. Anda mungkin terkejut betapa seringnya digunakan (OSX, iOS, Android OS misalnya). Dan Anda harus menyadari, banyak dari baris kode tes dan data itu mungkin dihasilkan oleh mesin. Database kekuatan industri memiliki banyak kasus tepi.
Bryan Oakley
10
SQLite adalah yang database SQL yang paling banyak digunakan di planet ini, basis instalasi itu adalah urutan besarnya lebih besar dari MySQL, PostgreSQL, SQL Server, Oracle, DB2 gabungan . Ini mungkin salah satu bagian dari perangkat lunak yang paling banyak digunakan, titik. Jika ada bug di SQLite, setiap smartphone di planet ini akan berhenti bekerja. Saya pikir itu membenarkan sedikit paranoia.
Jörg W Mittag
@ JörgWMittag wow, saya tidak pernah tahu tentang SQLite. Lucu. Terima kasih. Tetapi 1000 kali lebih banyak kode uji. Sungguh menakjubkan.
mike rodent
0

Banyak perpustakaan sumber terbuka pihak ketiga yang TDDed. Pustaka Rhinos yang hibernasi, seperti RhinoMocks dan NHibernate, di-TDD oleh pengembangnya menggunakan XUnit sebagai kerangka kerja unit-testing.

Sekarang, dengan OSS, Anda biasanya tidak dapat menjamin bahwa SEMUA dalam produk telah TDDed. Komunitas mungkin memiliki standar termasuk praktik ini, dan mereka bahkan dapat menggunakan bot-build yang melakukan metrik cakupan kode, tetapi TDD adalah mentalitas yang harus dibeli oleh pengembang, dan dengan masyarakat luas yang dapat berkomitmen untuk membuka sumber batang VCS seperti yang ada di GitHub, siapa pun dapat melakukan perubahan apa pun dengan jumlah pertanggungan tes apa pun (atau jika peliputan diperlukan tes bisa ditulis setelah fakta, yang merupakan pelanggaran semangat TDD tetapi sebenarnya tidak ada cara yang baik untuk menangkapnya di komit).

KeithS
sumber