Daha önce birim test etme konusunda biraz tecrübe yaşadım, klasik yazılım mühendisliği projesinde (şımarık değil): bir kullanıcı GUI'sine, bir veritabanına, orta katmandaki iş mantığına vb. Sahip bir MVC. C # bilimsel bir bilgi işlem kitaplığı yazma m (evet, C # çok yavaş biliyorum, C kullanın, tekerlek yeniden icat etmeyin, ve tüm, ama biz C # fakültemde bilimsel hesaplama yapan bir sürü insan var, ve buna ihtiyacımız var). Yazılım geliştirme endüstrisi açısından küçük bir proje, çünkü çoğunlukla kendim ve zaman zaman birkaç meslektaşımın yardımıyla yazıyorum. Ayrıca, bunun için ödeme almıyorum ve en önemlisi akademik bir projedir. Yani, bir gün profesyonel kalitede olmasını bekliyorum, çünkü açık kaynak kullanmayı planlıyorum,
Her neyse, proje büyüyor (bir adamın projesi için büyük olduğunu düşündüğüm yaklaşık 18.000 satır kod) ve elimden çıkıyor. Git'i kaynak kontrolü için kullanıyorum ve bence oldukça iyiyim, ama eski okul gibi test ediyorum, yani, sistemin büyük bir bölümünü test eden tam konsol uygulamaları yazıyorum, çünkü esas olarak nasıl olduğunu bilmiyorum Bu senaryoda birim testi yapmak için yapmam gerekeni hissediyorum. Sorun kitaplığı çoğunlukla algoritmalar, örneğin, grafik algoritmaları, sınıflandırıcılar, sayısal çözücüler, rasgele dağıtımlar, vb olmasıdır. Ben sadece bu algoritmaların her biri için küçük test senaryoları belirtmek için nasıl bilmiyorum, ve bunların çoğu Stokastik Doğruluğu nasıl doğrulayacağımı bilmiyorum. Sınıflandırma için, örneğin, kesinlik ve hatırlama gibi bazı metrikler, ancak bu metrikler iki algoritmayı karşılaştırmak için tek bir algoritmayı değerlendirmekten daha iyidir. Peki, burada doğruluğu nasıl tanımlayabilirim?
Son olarak performans sorunu da var. Bunun tamamen farklı bir dizi test olduğunu biliyorum, ancak performans, kullanıcı memnuniyeti veya diğer yazılım mühendisliği metrikleri yerine bilimsel araçların önemli özelliklerinden biridir.
En büyük sorunumdan biri veri yapıları. Bir kd ağacı için gelebileceğim tek test bir stres testidir: çok sayıda rastgele vektör ekleyin ve daha sonra çok sayıda rastgele sorgu gerçekleştirin ve saf bir doğrusal arama ile karşılaştırın. Performans için de aynı şey geçerli. Sayısal iyileştiricilerle, test edebileceğim kıyaslama işlevlerim var, ancak daha sonra, bu bir stres testidir. Bu testlerin birim testler olarak sınıflandırılabileceğini ve en önemlisi sürekli çalıştıklarını düşünmüyorum, çünkü bunların çoğu oldukça ağır. Ama aynı zamanda bu testlerin yapılması gerektiğini düşünüyorum, sadece iki öğe ekleyemiyorum, kökü açamıyorum ve evet, 0-1-n davası için çalışıyor.
Öyleyse, bu tür bir yazılım için (birim) test yaklaşımı nedir? Ve birim testlerini ve ağır testleri kod-inşa-taahhüt-bütünleştirme döngüsünde nasıl düzenleyebilirim?