Ben yazılım mühendisi değilim. Ben jeoloji alanında doktora öğrencisiyim.
Neredeyse iki yıl önce bilimsel bir yazılım programlamaya başladım. Asla sürekli entegrasyon (CI) kullanmadım, çünkü ilk başta onun var olduğunu bilmiyordum ve bu yazılım üzerinde çalışan tek kişi bendim.
Artık yazılımın temeli çalıştığından başka insanlar onunla ilgilenmeye başlıyor ve yazılıma katkıda bulunmak istiyor. Plan, diğer üniversitelerdeki diğer kişilerin çekirdek yazılıma eklemeler gerçekleştirmesidir. (Hata yapabildikleri için korkuyorum). Ek olarak, yazılım oldukça karmaşıklaştı ve test edilmesi zorlaştı ve zorlandım ve üzerinde çalışmaya devam etmeyi planlıyorum.
Bu iki nedenden dolayı, şimdi CI kullanmayı daha fazla düşünüyorum. Hiçbir zaman yazılım mühendisliği eğitimi almadığımdan ve çevremdeki hiç kimse CI'yi duymadı (biz bilim insanlarıyız, programcı yok) projeme başlamak için zor buluyorum.
Tavsiye almak istediğim birkaç sorum var:
Öncelikle, yazılımın nasıl çalıştığının kısa bir açıklaması:
Yazılım gerekli tüm ayarları içeren bir .xml dosyası ile kontrol edilir. Yazılımı, sadece yolu .xml dosyasına bir giriş argümanı olarak geçirerek başlatırsınız ve çalışır ve sonuçları ile birlikte birkaç dosya oluşturur. Tek bir çalıştırma ~ 30 saniye sürebilir.
Bilimsel bir yazılımdır. Neredeyse tüm fonksiyonlar, türleri çoğunlukla oldukça karmaşık olan sınıflar olan çoklu giriş parametrelerine sahiptir. Bu sınıfların örneklerini oluşturmak için kullanılan büyük kataloglara sahip birden fazla .txt dosyam var.
Şimdi benim sorularıma gelelim:
birim testleri, entegrasyon testleri, uçtan uca testler? : Yazılımım şu anda yüzlerce işlev ve ~ 80 sınıfından oluşan yaklaşık 30.000 satırlık bir kod satırında. Halen uygulanmış olan yüzlerce fonksiyon için birim testleri yazmaya başlamam biraz garip geliyor. Bu yüzden sadece bazı test durumları oluşturma hakkında düşündüm. 10-20 farklı .xml dosyası hazırlayın ve yazılımı çalıştırın. Sanırım bu baştan sona test denilen şeydir? Sık sık bunu yapmamanız gerektiğini okudum, ancak zaten çalışan bir yazılımınız varsa başlangıç olarak sorun değil mi? Yoksa zaten çalışan bir yazılıma CI eklemeyi denemek aptalca bir fikir mi?
İşlev parametrelerini oluşturmak zorsa birim testlerini nasıl yazabilirsiniz? Ben bir işlevi olduğunu varsayalım
double fun(vector<Class_A> a, vector<Class_B>)
ve genellikle, ben tür nesneler oluşturmak için birden fazla metin dosyaları ilk okuma gerekirClass_A
veClass_B
.Class_A create_dummy_object()
Metin dosyalarını okumadan gibi bazı kukla fonksiyonlar yaratmayı düşündüm . Ayrıca bir tür serileştirme yapmayı da düşündüm . (Yalnızca çoklu metin dosyalarına bağlı olduklarından, sınıf nesnelerinin oluşturulmasını test etmeyi planlamıyorum)Eğer sonuçlar oldukça değişkense testler nasıl yazılır? Yazılımım büyük monte-carlo simülasyonlarını kullanıyor ve yinelemeli çalışıyor. Genellikle, ~ 1000 yinelemeye sahipsiniz ve her yinelemede, monte-carlo simülasyonlarına dayanan ~ 500-20.000 nesne yaratıyorsunuz. Bir yinelemenin sadece bir sonucu biraz farklıysa, tüm gelecek yinelemeler tamamen farklıdır. Bu durumla nasıl başa çıkıyorsunuz? Sanırım bu, uçtan uca testlere karşı büyük bir nokta, çünkü sonuç oldukça değişken.
CI ile ilgili herhangi bir diğer tavsiye son derece takdir edilmektedir.