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.
sumber
Jawaban:
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.
sumber
Proyek Orchard mungkin yang Anda cari .. Ini adalah aplikasi .NET / MVC / TDD yang cukup rumit, tetapi tidak terlalu buruk dan menunjukkan beberapa praktik dan pola yang baik ..
http://orchard.codeplex.com/wikipage?title=solution
dan saya kira tautan yang diperbarui:
http://docs.orchardproject.net/
sumber
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).
sumber