Entegrasyon testinizi nasıl ölçeklendirirsiniz?


21

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]


Bu yazıyı oluşturduğumdan beri, nCrunch'ın (birim testimiz için yoğun olarak kullandığımız) bizim için bir taktik önerebilecek bir araç olabileceğini araştırdım. Belli ki testleri uzaktaki makinelere gönderme ve paralel olarak çalıştırma kabiliyetine sahip. Bu nedenle, entegrasyon test gruplarını ve ayrıca yüksek özellikli bulut makinelerinin çoklu örneklerini belirlemek denemek için bir şey olabilir mi? nCrunch, bu yeteneğin tam amacının bu olduğunu iddia ediyor. Bunu başka birisi denedi mi?
Jezz Santos,

Görünüşe göre, bunun ne olduğu ve bir entegrasyon testi olmadığı ve insanların birim testi ve entegrasyon testi hakkında yanlış anladıkları gibi bir tartışmaya giriyor.
Jezz Santos

Yanıtlar:


9

Entegrasyon testlerini yapmak için 5 saat süren (30 makinede) bir yerde çalıştım. Kod tabanını yeniden inceledim ve bunun yerine yeni şeyler için birim testleri yaptım. Birim testleri 30 saniye sürdü (1 makinede). Oh, böcekler de düştü. Gelişimden bu yana granüler testlerden tam olarak ne geçtiğini biliyorduk .

Uzun lafın kısası, sen yok. Tam entegrasyon testleri, kod tabanınız büyüdükçe katlanarak büyür (daha fazla kod, daha fazla test anlamına gelir ve daha fazla kod, çalışmak için daha fazla "bütünleşme" olduğu için tüm testlerin daha uzun sürmesi anlamına gelir). "Döngü" aralığındaki herhangi bir şeyin sürekli entegrasyonun faydalarını kaybettiğini, geri besleme döngüsü orada olmadığı için savunacağım. Büyüklük düzeyindeki bir gelişim bile sizi iyileştirmek için yeterli değil - ve ölçeklenebilir olmanız için hiçbir yere yakın değildir.

Bu yüzden entegrasyon testlerini en geniş, en hayati duman testlerine düşürmeyi tavsiye ederim. Daha sonra performansa olan ihtiyacınızı büyük ölçüde azaltarak daha sonra gece veya sürekli olmayan aralıklarla çalıştırılabilirler. Yalnızca daha fazla kod eklediğinizde doğrusal olarak büyüyen birim sınamaları (sınamalar artar, sınama başına çalışma zamanı geçmez) ölçeklendirmenin yoludur.


Katılıyorum. Birim testleri çok daha ölçeklenebilir ve daha hızlı bir geri besleme döngüsü sağlıyor.
Brandon,

8
Bu noktayı kaçırmış olabilirsiniz. OP, zaten kapsamlı uint testi ve söz konusu entegrasyon testi yapmıştır. Ünite testleri hiçbir zaman entegrasyon testlerinin yerine geçmez. Farklı araçlar, farklı uygulamalar, farklı amaçlar, farklı sonuçlar. Asla birinin ya da diğeri meselesi değildir.
Jezz Santos

1
Bu ürünü TDD kullanarak oluşturduğumuzu açıkça belirtmek için açıklığa ek olarak, bu nedenle zaten söz konusu entegrasyon testleriyle desteklenen binlerce birim testimiz var. .
Jezz Santos

8

Entegrasyon testleri her zaman gerçek bir kullanıcıyı taklit etmesi gerektiği için uzun sürecek. Bu nedenle, hepsini senkronize olarak çalıştırmamalısınız!

Zaten bulutta bir şey çalıştırdığınızı göz önünde bulundurursanız, testlerinizi birden fazla makineye ölçeklendirmek için mükemmel bir konumdaymışsınız gibi görünüyor.

Aşırı durumda, test başına yeni bir ortam açın ve hepsini aynı anda çalıştırın. Entegrasyon testleriniz sadece en uzun süren teste kadar devam eder.


İyi fikir! Bunun gibi bir stratejiye bakmak, ancak dağıtılmış testlere yardımcı olacak bazı araçlarla
Jezz Santos

4

Testleri kesmek / optimize etmek benim için en iyi fikir gibi görünüyor, ancak bunun bir seçenek olmaması durumunda, önerecek bir alternatifim var (ancak bazı basit tescilli araçlar inşa etmeyi gerektirir).

Benzer bir problemle karşılaştım ancak entegrasyon testlerimizde (dakikalar içinde koştum). Bunun yerine basitçe bizim yapılarımızdaydı: büyük ölçekli C kod temeli, inşa etmek saatler alacaktı.

Son derece savurgan gördüğüm şey, yalnızca birkaç kaynak dosya değişmiş olsa bile her şeyi sıfırdan (yaklaşık 20.000 kaynak dosya / derleme birimi) yeniden yaptığımız ve bu nedenle sadece birkaç saniye veya dakika sürecek bir değişiklik için saat harcadığımız gerçeğiydi. en kötüsü.

Bu yüzden, derleme sunucularımızda artan bir şekilde bağlantı kurmayı denedik, ancak bu güvenilmezdi. Bazen yanlış negatifler verir ve bazı taahhütler üzerine inşa edemez, ancak daha sonra tam bir yeniden inşada başarılı olur. Daha da kötüsü, bazen yanlış pozitifler verir ve bir inşaat başarısını rapor eder, yalnızca geliştirici için ana yapıdaki kırılmış bir yapıyı birleştirmek için. Bu yüzden bir geliştirici her zaman kendi özel dalından değişiklikler yapmaya başladığında her şeyi yeniden inşa etmeye geri döndük.

Bundan çok nefret ettim. Geliştiricilerin yarısı video oyunları oynayarak konferans salonlarına girerdim, çünkü sadece inşaatlarda beklerken yapacak çok az şey vardı. Yapıları beklerken kod üzerinde çalışabilmek için bir kez daha çok görev üstlenerek ve yeni bir şube açarak verimlilik avantajı elde etmeye çalıştım, ancak bir test veya yapı başarısız olduğunda, bu noktadan sonra değişiklikleri sıraya sokmak çok acı verici oldu. ve her şeyi düzeltmeye çalışın ve geriye doğru dikin.

Beklerken Yan Proje, Daha Sonra Entegre

Öyleyse yaptığım şey, uygulamanın iskelet bir çerçevesini oluşturmaktı - aynı tür bir temel kullanıcı arayüzü ve SDK'nın bütünüyle ayrı bir proje olarak geliştirmem için ilgili bölümleri. Daha sonra, inşaatı beklerken, ana proje dışında bağımsız kod yazacağım. Bu en azından bana biraz üretken kalabilmem için kodlama yapmamı sağladı ve daha sonra tamamen ürünün dışında yapılan bu çalışmayı projenin yanına kod parçacığı ile entegre etmeye başlayacağım. Bu, geliştiricileriniz için kendilerini çok beklediklerini görürlerse bir stratejidir.

Neyin Yeniden Oluşturulacağını / Yeniden Çalıştırıldığını Bulmak için Kaynak Dosyaları Elle Ayrıştırma

Yine de, her zaman her şeyi yeniden inşa etmek için bu kadar fazla zaman harcadığımızdan nefret ettim . Bu yüzden birkaç hafta sonundaki değişikliklere dosyaları tarayacak ve sadece ilgili projeleri yeniden inşa edecek bir kod yazmamı sağladım - hala tamamen yeniden inşa edildi, artımlı bağlantı yok, sadece yeniden yapılması gereken projeleri yeniden oluşturdum ( bağımlı dosyaları, tekrar tekrar ayrıştırarak değiştirildi). Bu tamamen güvenilirdi ve ayrıntılı olarak gösterip test ettikten sonra, bu çözümü kullanabildik. Bu, yalnızca gerekli projeleri yeniden inşa ettiğimizden ortalama inşa sürelerini saatlerden birkaç dakikaya indirdi (merkezi SDK değişiklikleri hala bir saat sürebilirdi, ancak bunu yerelleştirilmiş değişikliklerden çok daha az yaptık).

Aynı strateji entegrasyon testlerinde de uygulanmalıdır. Entegrasyon testlerinin hangi dosyalara bağlı olduğunu bulmak için kaynak dosyaları tekrarlı olarak ayrıştırın (ör import. Java,#includeC veya C ++) sunucu tarafında ve bu dosyalara dahil edilmiş / alınmış dosyalar, sistem için tam bir içerme / alma bağımlılığı dosya grafiği oluşturur. Bir DAG oluşturan derleme ayrıştırmanın aksine, dolaylı olarak çalıştırılabilecek kod içeren değiştirilmiş herhangi bir dosyayla ilgilendiğinden dolayı, grafik yönlendirilmemelidir *. Bütünleştirme testini yalnızca, ilgili bütünleşme testi için grafikteki dosyalardan herhangi biri değiştiyse yeniden çalıştırın. Milyonlarca kod satırı için bile, bu ayrıştırmayı bir dakikadan daha kısa sürede yapmak kolaydı. İçerik kodları gibi bir tümleştirme testini etkileyebilecek kaynak kodlardan başka dosyalarınız varsa, belki de kaynak koddaki bir entegrasyon testindeki bağımlılıkları belirten bir yoruma meta verileri yazabilirsiniz; tekrar koş.

* Örnek olarak, test.c de foo.c'nin içerdiği foo.h dosyasını içeriyorsa, test.c, foo.h veya foo.c değerlerinde yapılan bir değişiklik, tümleşik testi yeni bir çalışmaya ihtiyaç duyması olarak işaretlemelidir.

Bu, özellikle resmi ortamda programlamak ve test etmek için tam bir veya iki gün sürebilir, ancak bence entegrasyon testleri için bile çalışmalı ve başka bir seçeneğiniz yoksa, inşaat saatleri için beklemekten başka işe yaramadı. bitirmek (inşaat veya test ya da paketleme işleminden ya da her neyse). Bu, aylar içinde kaybedilen birçok insanın, bu tür bir tescilli özümü inşa etmek için harcadığı zamanı ciddiye alacak, aynı zamanda ekibin enerjisini öldürmek ve daha büyük birleşme birimlerinde yaşanan çatışmaların yarattığı stresi arttırmak anlamına gelebilecek şekilde tercüme edilebilir. sık sık bekleyen her zaman boşa harcıyorsun. Takım için zamanın büyük bir bölümünü şeyler beklerken geçiriyorlarsa bu kötü bir şey.Her şey yeniden inşa edilmesi için / yeniden çalıştırmak / her küçük değişikliği paketlenen.


3

Görünüşe göre çok fazla entegrasyon testi var. Test piramidini hatırlayın . Entegrasyon testleri ortadadır.

Bir örnek olarak yöntem ile bir depo alır set(key,object), get(key). Bu depo, kod tabanınız boyunca geniş bir şekilde kullanılır. Bu depoya bağlı olan tüm yöntemler sahte bir depo ile test edilecektir. Şimdi sadece biri set için diğeri de almak için iki entegrasyon testine ihtiyacınız var.

Bu entegrasyon testlerinden bazıları muhtemelen birim testlerine dönüştürülebilir. Örneğin, benim görüşüme göre uçtan uca testler yalnızca sitenin doğru bağlantı dizesi ve doğru etki alanları ile doğru yapılandırıldığını test etmelidir.

Entegrasyon testleri, ORM'nin, havuzların ve sıra soyutlamalarının doğru olduğunu test etmelidir. Genel bir kural olarak, entegrasyon testi için etki alanı kodu gerekmez - yalnızca soyutlamalar.

Neredeyse her şey bağımlılık için inatçı / alaylı / sahte / gizli uygulamalarla test edilebilir.


1
İlginç bakış açısı. Entegrasyon testlerimiz, her ReST çağrısının her parametresinin her permütasyonunu doğrulamaya çalışmıyor. Bu bizim görüşümüze göre entegrasyon testi değildir. Çeşitli arka uç mağazalarına ve diğer sistemlere isabet eden API üzerinden anahtar uçtan uca senaryolar çalıştırıyorlar. Amaç, API'nin değiştikçe hangi senaryoların dikkat etmesi gerektiğini belirlediklerinden emin olmaktır (yani beklendiği gibi çalışmaz).
Jezz Santos

1
Mimaride çeşitli seviyelerde entegrasyon testlerimiz var. Örneğinizde, veri deposuna erişen sınıflar için birim testlerimiz var, bu yüzden veri depomuza doğru çağrılar yaptıklarını biliyoruz, mağazalarımızın bir kopyasını oluşturmak için entegrasyon testlerimiz var ve doğru okuduğunu ve yazdığını test ediyoruz mağaza ile. Sonra, bu veri sınıflarını birim testlerle oluşturduğumuz bir REST API'sinde kullanırız ve daha sonra verilerin arkadan öne ve tam tersi şekilde geldiğinden emin olmak için web servisini başlatan ve arayacak olan entegrasyon testlerini kullanırız. Burada çok fazla test yapılmasını mı öneriyorsun?
Jezz Santos,

Cevabımı, yorumlarınıza yanıt olarak güncelledim.
Esben Skov Pedersen,

2

Sürekli teslim boru hatlarının ortak olduğu bir Çevik veya DevOps ortamındaki deneyimime göre, her modül tamamlandığında veya ayarlandığında entegrasyon testi yapılmalıdır. Örneğin, birçok sürekli dağıtım boru hattı ortamında, geliştirici başına günde birden fazla kod dağıtımının yapılması nadir değildir. Dağıtımdan önce her geliştirme aşamasının sonunda hızlı bir entegrasyon testi seti çalıştırmak, bu tür bir ortamda standart bir uygulama olmalıdır. Ek bilgi için, bu konudaki okumalarınıza dahil edebileceğiniz harika bir e-Kitap , Katrina Clokie tarafından yazılan DevOps'ta Test İçin Pratik Bir Kılavuzdur.

Bu şekilde verimli bir şekilde test etmek için, yeni bileşen özel bir test ortamında mevcut tamamlanmış modüllere karşı veya Stubs ve Sürücülere karşı test edilmelidir. İhtiyaçlarınıza bağlı olarak, hızlı tekrarlayan Entegrasyon testi kullanımını sağlamak için her uygulama modülü için bir klasör veya kitaplıktaki Stubs ve Sürücüler kütüphanesini saklamak genellikle iyi bir fikirdir. Stubs ve Sürücüleri bu şekilde organize etmek, sürekli test gereksinimlerinizi karşılamak için yinelemeli değişiklikler yapmayı, güncellemeleri ve optimum performans göstermelerini sağlar.

Dikkate alınması gereken bir başka seçenek de, 2002'de Servis Sanallaştırma olarak adlandırılan bir çözüm. Bu, karmaşık bir kurumsal DevOps veya Çevik ortamda test amacıyla mevcut kaynaklarla modül etkileşimini simüle eden sanal bir ortam yaratır.

Bu makale , kurumda entegrasyon testinin nasıl yapılacağı hakkında daha fazla bilgi edinmek için faydalı olabilir.


Bu işe yarayabilirken (sistem bu tür modüllere ayrılabilirse, ancak tüm ürünler yapamazsa) - bir süre önce norm olarak kullanıldığında, entegrasyonu etkin bir şekilde geciktirir, böylece CI / CD'nin tüm avantajlarını kaybeder. Biraz agresif, sence de öyle değil mi? Böyle bir entegrasyon testinde keşfedilen sorunlar, belirli bir taahhütle kolayca ve hızlı bir şekilde eşleştirilemez; bu nedenle, tıpkı üretimden gelen böcekler gibi (ve bunların düzeltilmesi için ne kadar pahalı olduğunu bilirsiniz), doğrudan incelemelerden tam olarak istemek gerekir.
Dan Cornilescu

1

Zamanın nerede alındığını görmek için her testi ölçtünüz mü? Ve sonra, özellikle yavaş bir bit varsa, kod tabanının performansını ölçün. Genel problem testlerden biri mi, yoksa dağıtım mı, yoksa ikisi mi?

Genelde, entegrasyon testinin etkisini azaltmak, böylece onları küçük değişiklikler üzerinde çalıştırmak en aza indirgenir. Ardından, dalı bir sonraki seviyeye yükseltirken yaptığınız 'QA' çalışması için tam testi bırakabilirsiniz. Bu nedenle dev şubeleri için birim testlerine sahipsiniz, birleştirildiğinde indirgenmiş entegrasyon testlerine ve bir sürüm adayı şubesine birleştirildiğinde tam entegrasyon testine sahipsiniz.

Bu da demek oluyor ki, her taahhüdün tamamını yeniden kurmak, yeniden paketlemek ve yeniden dağıtmak zorunda değilsiniz. Kurulumunuzu, geliştirme ortamında, mümkün olacağından daha ucuz bir dağıtım gerçekleştirmesi için, uygun olacağına güvenerek düzenleyebilirsiniz. VM'nin tamamını birleştirmek ve ürünün tamamını dağıtmak yerine, VM'yi eski sürüm yerinde bırakın ve örneğin yeni ikili dosyaları kopyalayın (örneğin, ne yapmanız gerektiğine bağlı olarak YMMV).

Bu genel iyimser yaklaşım hala tam sınavı gerektiriyor, ancak alınan zamanın daha az acil olduğu bir sonraki aşamada gerçekleştirilebiliyor. (örneğin, testin tamamını gecede bir kez uygulayabilirsiniz, geliştiricinin sabahları çözebileceği herhangi bir sorun varsa). Bu aynı zamanda ertesi günki testler için ürünü entegrasyon teçhizatında yenileme avantajına sahiptir - devs işleri değiştikçe eski haline gelebilir, ancak sadece 1 gün sonra.

Güvenlik tabanlı bir statik analiz aracı çalıştırırken benzer bir sorun yaşadık. Tam koşular yaş alır, bu yüzden geliştiricinin taahhüt ettiği bir entegrasyon taahhüdüne göre koşmaya başladık (yani dev'in bittiğini söylediği bir sistem vardı, perf dahil daha fazla testin yapıldığı bir 'seviye 2' dalına birleştirildi. Testler tamamlandıktan sonra, dağıtım için bir kalite güvence şubesine birleştirildi. Fikir, sürekli yapılan ve her gece yapılan pistlere yapılan düzenli çalışmaların kaldırılması - devs sabahları sonuçları alacak ve gelişimlerini etkilemeyecek. dev döngüsünde sonraya kadar odaklanmak).


1

Bir noktada, tam bir entegrasyon testi setinin, pahalı donanımlarda bile tamamlanması birkaç saat sürebilir. Seçeneklerden biri, bu testlerin çoğunluğunu her taahhütte yerine getirmemek ve bunun yerine her gece ya da sürekli parti modunda (birden fazla işlem için bir kez) çalıştırmak değildir.

Bununla birlikte, bu yeni bir problem yaratır - geliştiriciler anında geri bildirim almazlar ve kırılan yapılar farkedilmeyebilir. Bunu düzeltmek için, her zaman bir şeyin kırıldığını bilmeleri önemlidir. Catlight veya TeamCity'nin tepsi bildiricisi gibi bildirim araçları oluşturmak oldukça yararlı olabilir.

Fakat başka bir problem daha olacak. Geliştirici, yapının bozulduğunu görse bile, kontrol etmek için acele etmeyebilir. Ne de olsa, başka biri zaten kontrol ediyor olabilir, değil mi?

Bu nedenle, bu iki araç "araştırma araştırması" özelliğine sahiptir. Geliştirme ekibinden birisinin gerçekten kırık yapıyı kontrol edip tamir edip etmediğini söyleyecektir. Geliştiriciler yapıyı kontrol etmek için gönüllü olabilir ve bu gerçekleşene kadar, ekipteki herkes günün yanında kırmızı bir simge ile sinirlenecek.


0

Kod tabanınız genişliyor gibi görünüyor ve bazı kod yönetimi yardımcı olacaktır. Java kullanıyoruz, bunu kabul edersem şimdiden özür dilerim.

  • Büyük bir projenin kütüphaneleri derleyen daha küçük bireysel projelere bölünmesi gerekir. Nexus gibi Java araçları bunu kolaylaştırır.
  • Her kütüphane bir arayüz uygulamalıdır. Bu, kütüphaneyi daha üst düzey testlerde inat etmeye yardımcı olur. Bu, özellikle kütüphane bir veritabanına veya harici bir veri deposuna (örneğin bir ana bilgisayar) erişiyorsa yararlıdır. Bu gibi durumlarda, ana bilgisayar veya veri tabanı verilerinin tekrarlanabilir bir duruma getirilmesi muhtemelen yavaş olacaktır ve imkansız olabilir.
  • Her kütüphane için entegrasyon testleri kapsamlı olabilir, ancak yalnızca yeni kütüphane kaynağı taahhüt edildiğinde çalıştırılması gerekir.
  • Yüksek seviye entegrasyon testleri sadece kütüphaneleri çağırmalı ve mükemmel olduklarını varsaymalıdır.

Çalıştığım Java dükkanı bu yaklaşımı kullanıyor ve entegrasyon testlerinin çalışması için nadiren bekletiliyoruz.


Teşekkürler, fakat bence bu bağlamda entegrasyon testinin amacı ve uygulamasına dair aynı anlayışımız yok. Entegrasyon testini birim test ile birleştiriyor olabilirsiniz.
Jezz Santos

0

Uzun uygulama süreleriyle veya sınırlı ve / veya pahalı kaynaklar gerektiren CI boru hattı entegrasyon testlerinde (veya inşaatlar da dahil olmak üzere her türlü doğrulamayı) sürdürmenin olası bir başka yaklaşımı, taahhüt sonrası doğrulamalara dayanan geleneksel CI sistemlerinden geçiş yapmaktır. tıkanmaya yatkın olan ) bir ön-taahhüt doğrulamaları dayalı birine .

Değişikliklerini doğrudan şubeye yapmak yerine, geliştiriciler bunları doğrulamaları yapan merkezi bir otomatik doğrulama sistemine gönderir ve:

  • Başarılı olursa, değişiklikleri şubeye otomatik olarak gönderir.
  • başarısız olursa ilgili göndericilere değişikliklerini yeniden değerlendirmelerini bildirir.

Bu tür bir yaklaşım, birden fazla gönderilen değişikliğin birleştirilmesini ve test edilmesini sağlar ve potansiyel olarak etkili CI doğrulama hızını birçok kez arttırır.

Böyle bir örnek, OpenStack tarafından kullanılan Gerrit / Zuul-tabanlı geçit sistemidir .

Bir diğeri ise ApartCI ( feragatname - Ben onun yaratıcısıyım ve onu sunan şirketin kurucusuyum).

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.