TDD ile yazılmış uygulamaların gerçek dünyadaki örnekleri ve iyi test kapsamı? [kapalı]


17

Birim testinin ne kadar iyi çalışması gerektiğine dair model olarak hizmet veren test odaklı geliştirme kullanılarak geliştirilen açık kaynaklı uygulamalar var mı?

C # ve .NET örneklerini görmeyi tercih ederim. (Yalnızca kitaplıklardan değil uygulamalardan bahsettiğimi unutmayın.)

TDD'ye gerçekten inanmak ve uygulamak isteyen orta seviye bir programcıyım. Gün işim üzerinde çalıştığım uygulama oldukça karmaşık - yaklaşık 1 milyon kod satırı - ve daha fazla birim testi tanıtmak isterim. Bazı birim testlerimiz var, ancak TDD'deki ve zaten test edilmiş olan kod üzerinde çalışma konusundaki çabalarım cesaret verici olmadı.

Kuşkusuz sınırlı deneyimlerime göre, TDD ayrıştırma adına birçok karmaşıklığı teşvik ediyor gibi görünüyor. Test edilmesi zor olan ve tesadüfen kritik olma eğilimi gösteren uygulama parçaları, çevreye, hiç yazılmayabilecek veya yazılmayacak entegrasyon testleri alanına itilir. (Ben burada her zamanki şüpheliler, dosya sistemi erişimi, bir veritabanından nesneleri nemlendirme, asenkron web çağrıları, vb düşünüyorum)

Test edilen kod, nesneler arasında çok sayıda işbirliği içerir ve belki de her şey tamamen bellekte gerçekleşen ve her şeyin tamamen ayrıştırılması gerekmiyorsa, muhtemelen daha basit, daha anlaşılır bir şekilde yazılabilecek bazı basit akış mantığı içerir. test için.

Alay bağımlılıkları ve benzeri teknikleri anlıyorum, ancak tecrübelerime göre alayın ağır kullanımı çok kırılgan testlere yol açıyor. Eğer bir sürü testin kırmızı olduğunu gördüğümde ilk içgüdüm "Harika, şimdi tüm alayları düzeltmem gerekiyor" ise, testlerim bir güvenlik ağı yerine sürüklenmeye başladı.

Bu zihinsel engeli aşmaya çalışıyorum ve bunun bir parçası olarak Michael Feathers'ın Eski Kod ile Etkili Çalışma kitabını okuyorum . Umarım eksik olduğum şeyleri gösterecektir.

Ayrıca iyi kod kapsamı, belki bir içerik yönetim sistemi veya bir CRUD uygulaması ile bazı önemsiz .NET uygulamaları incelemek istiyorum. Bob Amca'nın bahsettiği FitNesse test çerçevesi, muhtemelen bakacağım bir şeydir, ancak en tanıdığım dilde yazılmış bir şey görmek güzel olurdu.

Bilgelik önerileri veya sözleri takdir edilecektir.



2
Pek değil ... Gerçek dünya uygulamalarından örnekler görmek istiyorum. Bu yazıda kabul edilen cevap bir test çerçevesi önermektedir. Daha önce bazı çerçeve ve kitaplık örnekleri gördüm, ama bu sorumu ele almıyor.
Josh Earl

@JoshEarl - Kabul ediyorum .. Aşağıdaki cevabımın diğer yazı ile ilgili olacağını sanmıyorum
hanzolo

Yanıtlar:


14

TDD'nin kullanılıp kullanılmadığını bilmiyorum, ancak testin mükemmel bir örneği, % 100 önemli bir şube kapsamına sahip ve ürün kodundan 1000 kat daha fazla test kodu ve komut dosyasına sahip sqlite .


4
kodun test koduna oranı o kadar yüksekse dikkat çekici bir çaba kaybı gibi görünüyor
Ryathal

6
@Ryathal: Başarısızlığın maliyeti, test edilen kodun uzunluğunu değil, test çalışmasını belirler. Görev açısından kritik öneme sahip yaklaşımlarda yeterince geniş kullanım göz önüne alındığında, test buna değebilirdi. SQLite aşırıya kaçmadıysa, gerçekten emin değilim.
thiton

3
sqlite kesinlikle birçok insan için kritik öneme sahiptir. Ne sıklıkla kullanıldığına şaşırabilirsiniz (örneğin OSX, iOS, Android OS). Ve fark etmelisiniz ki, bu test kodu ve verilerinin çoğu muhtemelen makine tarafından üretildi. Endüstriyel güç veri tabanının birçok uç durumu vardır.
Bryan Oakley

10
SQLite olan gezegendeki en yaygın kullanılan SQL veritabanı, 's yükleme tabanı MySQL, PostgreSQL, SQL Server, Oracle, DB2 daha büyük büyüklükte bir emirdir kombine . Muhtemelen en yaygın kullanılan yazılım parçalarından biridir, nokta. SQLite'de bir hata olsaydı, gezegendeki her akıllı telefon çalışmayı bırakacaktı. Bence bu biraz paranoyayı haklı çıkarıyor.
Jörg W Mittag

@ JörgWMittag vay, SQLite hakkında hiç bilmiyordum. Eğlenceli. Teşekkürler. Ama 1000 kat daha fazla test kodu. Bu inanılmaz.
mike rodent


0

Birçok üçüncü taraf, açık kaynaklı kütüphane TDD'lidir. Hazırda Bekletme Rhinos kütüphaneleri, örneğin RhinoMocks ve NHibernate, geliştiricileri tarafından birim test çerçevesi olarak XUnit kullanan TDD'lere sahiptir.

Şimdi, OSS ile, genellikle üründeki HER ŞEYİN TDDlendiğini garanti edemezsiniz. Topluluk, bu uygulamayı içeren standartlara sahip olabilir ve hatta kod kapsamı metriklerini gerçekleştiren bir yapı botu bile kullanabilir, ancak TDD, geliştirici tarafından satın alınması gereken bir zihniyettir ve genel olarak herkesin GitHub'daki gibi VCS gövdeleri gibi, herkes herhangi bir miktarda test kapsamı ile herhangi bir değişiklik yapabilir (veya kapsam gerekirse, testler, TDD ruhunun ihlali olan gerçekten sonra yazılmış olabilir, ancak gerçekten yoktur taahhütte yakalamak için iyi bir yol).

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.