Onlar böylece, mevcut ürün üzerinde entegrasyon testlerinin bizim artan sayıda ölçekleme için teknikler ve stratejiler araştırıyorum olabilir (insanca) gelişmemizin parçası ve CI süreci devam etmektedir.
Yaklaşık 200'den fazla entegrasyon testinde tam bir test çalışmasını tamamlamak için 1 saate ulaşıyoruz (masaüstü bilgisayarındaki bir makinede) ve bu, geliştiricinin tüm paketi rutin push işlemlerinin bir parçası olarak çalıştırmayı tolere etme yeteneğini olumsuz yönde etkiliyor. Bu da onları yaratma konusunda disiplinli olma motivasyonunu etkiliyor. Yalnızca önden arkaya kilit senaryoları test ediyoruz ve her test çalışmasından sıfırdan oluşturulmuş üretimi yansıtan bir ortam kullanıyoruz.
Çalıştırılması gereken zamandan dolayı, test çalışmalarının ne kadar odaklanmış olduğu önemli değil, korkunç bir geri besleme döngüsü ve makinelerin test çalışmalarını bitirmesini bekleyen birçok boşa harcanan döngü yapıyor. Akış ve ilerleme, akıl ve sürdürülebilirlik üzerindeki daha pahalı olumsuz etkileri yok edin.
Bu ürün yavaşlamaya başlamadan önce 10 kat daha fazla entegrasyon testinin yapılmasını bekliyoruz (gerçekten bir fikir yok, ancak henüz özellikler açısından daha yeni başladığımızı hissetmiyoruz). Tahmin ediyorum ki birkaç yüz veya birkaç binlerce entegrasyon testinde olmayı umuyoruz, bir noktada düşünüyorum.
Açık olmak gerekirse, bunun ünite testi ile entegrasyon testine karşı bir tartışma olmasını engellemeye çalışmak (ki bunlar asla işlem görmemelidir). Bu üründe hem TDD hem de entegrasyon testi ile birim test yapıyoruz. Aslında, sahip olduğumuz hizmet mimarisindeki çeşitli katmanlarda entegrasyon testi yapıyoruz, bizim için mantıklı olan, mimarimizdeki kalıpları diğer alanlarla değiştirirken kırılma değişikliklerini nereye getirdiğimizi doğrulamamız gerekiyor . sistemi.
Teknoloji yığını hakkında biraz. Şu anda testlerimizi baştan sona çalıştırmak için bir (CPU ve bellek yoğun) emülasyonu ortamı üzerinde test ediyoruz. Bir noSql arka uç (ATS) önündeki Azure REST web servislerinden oluşur. Azure masaüstü Emulator + IISExpress'te çalışarak üretim ortamımızı simüle ediyoruz. Dev makine başına bir emülatör ve bir yerel arka uç deposu ile sınırlıdır.
Aynı zamanda aynı öykünmüş ortamda aynı testi yapan bulut tabanlı bir CI'ye sahibiz ve test çalışmaları mevcut CI sağlayıcımızla bulutta iki kat daha uzun (2 saat +) sürüyor. Cloud CI sağlayıcıları SLA'nın donanım performansı açısından sınırlarına ulaştık ve test çalışma zamanındaki izinlerini aştık. Onlara karşı dürüst olmak gerekirse, özellikleri fena değil, ancak bir kurum içi masaüstü bilgisayar makinesinin yarısı kadar net.
Her mantıksal test grubu için veri depomuzu yeniden oluşturmak ve test verileriyle önceden yüklemek için bir test stratejisi kullanıyoruz. Kapsamlı bir şekilde veri bütünlüğünü sigortalarken, bu her testte% 5-15 etki yaratıyor. Bu nedenle, ürün geliştirme aşamasında bu test stratejisini optimize etmek için kazanılacak çok az şey olduğunu düşünüyoruz.
Uzun ve kısa olanı şudur: Her bir testin verimliliğini optimize etmemize rağmen (her biri% 30 -% 50 kadar olsa bile), yakın gelecekte hala birkaç yüz testle etkili bir şekilde ölçeklenemeyiz. 1 saat şimdi bile insani olarak tolere edilebilecek derecede fazla olsa bile, genel süreçte sürdürülebilir kılmak için bir büyüklük derecesi iyileştirme düzenine ihtiyacımız var.
Bu yüzden, test süresini önemli ölçüde azaltmak için hangi teknik ve stratejileri kullanabileceğimizi araştırıyorum.
- Daha az test yazmak bir seçenek değildir. Lütfen bu konudaki konuyu tartışmayalım.
- Daha hızlı donanım kullanmak kesinlikle çok pahalı olmasına rağmen bir seçenektir.
- Paralel olarak ayrı donanım üzerinde test / senaryo grupları çalıştırmak da kesinlikle tercih edilen bir seçenektir.
- Geliştirilmekte olan özellikler ve senaryolar etrafında test gruplarının oluşturulması mantıklıdır, ancak sonuçta sistemin bir değişiklikten etkilenmediğine dair tam bir güvence ya da güven sağlama konusunda güvenilir değildir.
- Masaüstü öykünücüsünde çalışmak yerine bulut ölçekli bir sahnede çalışmak teknik olarak mümkündür, ancak test çalışmalarına dağıtım zamanları eklemeye başlıyoruz (~ her şeyi test etmek için test çalışmasının başında 20 dakika).
- Sistemin bileşenlerini bağımsız logial parçalara bölmek bir dereceye kadar mantıklıdır, ancak bileşenlerin arasındaki etkileşimlerin zamanla artması beklendiğinden, bunun üzerinde sınırlı bir mesafe bekliyoruz. (yani bir değişimin diğerlerini beklenmedik şekillerde etkilemesi muhtemeldir - sık sık bir sistem kademeli olarak geliştirildiğinde olduğu gibi)
Bu alanda başkalarının hangi stratejileri (ve araçları) kullandığını görmek istedim.
(Bazı teknoloji setlerini kullanarak başkalarının bu tür zorlukları görüyor olabileceğine inanmalıyım.)
[Güncelleme: 12/16/2016: Sonuç tartışması için CI paralel testine daha fazla yatırım yaptık: http://www.mindkin.co.nz/blog/2015/12/16/16-jobs]