Merhaba arkadaşlar.
Bu makalemde sizlerle Test nedir ve neden önemlidir, Entegrasyon Testi nedir ve Entegrasyon Testi Türleri nelerdir hakkında, tecrübelerim doğrultusunda bilgiler sunmaya çalışacağım.
Öncelikle Test nedir kavramını kendimce açıklamak istiyorum sizlere:
Projemizde geliştirmiş olduğumuz modül veya operasyonel işlerin, doğru bir şekilde çalıştığını veya farklı modüllerinde eklenmesi durumda hala doğru çalıştığını hızlıca anlayabilmemizi sağlayan yapılardır.
Test türleri genel anlamında ikiye ayrılmaktadır. Test türlerine hızlıca açıklık getirmek gerekirse:
Uygulamamızı geliştirirken isminden de anlaşılacağı üzere geliştirmiş olduğumuz kodun küçük bir kısmını hızlıca doğruluğunu test edebilmemizi sağlayan test türüdür. Örneğin tüm ürünleri listeleyen bir metot geliştirdiğimizi düşünelim ve bunu test edebilmek için o metodun tüm ürünleri listeleyip listelemediğine hızlıca bakabilmemizi sağlar.
Makalemin de konusu olan entegrasyon testide isminden anlaşılabileceği üzere, birbirleri ile bağlı bir şekilde çalışan bir kaç modülü test edebilmemizi sağlayan test türüdür.
Bu noktada bir hususa değinmek istiyorum. Bu iki test grubu arasında genellikle en sık yapılan hata ise: Test Güdümlü Yazılım (TDD) geliştirirken, birim testleri yazmak için başlayıp sonrasında ise fark etmeden entegrasyon testinin yazılmasıdır. Evet ne olmuş, sonuçta ikisi de test ve biz test güdümlü yazılım geliştiriyoruz ne fark eder? gibi sorular aklınıza gelebilir.
Oysa entegrasyon testleri, yukarıda da bahsettiğim gibi birbirleri ile bağlı bir şekilde çalışan bir kaç modülün bir araya gelerek çıkardıkları sonuçla ilgilenirken, birim testleri ise sadece birim başı testlerle ilgilenir. Eğer TDD odaklı yazılım geliştirme yaparken entegrasyon testine yönlenirse , method bazlı doğruluğu sağlayamamış oluruz.
Entegrasyon testine geri dönecek olursak, Entegrasyon testindeki asıl amaç:
Oluşturulan yazılım modüllerinin, bir araya getirerek doğruluğunu sağlamaktır. Yazılım ürünü için oluşturulan tüm modüller bir araya getirilir ve bu şekilde test edilir. Burada ki amaç: metotlar birim başına testten geçerken, modüller halinde bir araya geldiğinde bazı hatalara sebep oluyor olabilirler. Entegrasyon testleri ile ise bu tarz yazılım ürünü problemlerinin henüz canlı (prod) ortama çıkmadan veya geliştirdiğimiz yeni bir modülün de sorunsuz çalışabileceğinden hızlı bir şekilde emin olabilmemizi sağlamaktadır.
Entegrasyon testleri dört’e ayrılır:
En yaygın kullanılan entegrasyon test tipidir. Geliştirilmiş tüm modüller bir araya getirilerek yapılan testtir. Hızlı ve kolay bir şekilde birbirleri ile beraber çalıştıklarında anlam ifade eden modüllerin doğruluğunu sağlar fakat birim başı metot doğruluğunun gözden kaçınılması olasıdır.
Bu entegrasyon testindeki amaç ise modüller arası geçiş yapılırken hatalı olan modülün kolay bir şekilde bulunabilmesini sağlamaktır. Test işlemi yukarıdan aşağı doğru gerçekleşmektedir ve her birinin test işleminden başarılı bir şekilde geçerek ilerlemesi gerekmektedir. Her bir modül testleri stub olarak adlandırılmaktadır. Modül ağacının son bacaklarında ise her bir stub kendi içerisinde test edilerek test işlemi sonuçlandırılır.
Bu test yöntemi ise Unit Testler ile beraber ilerlemektedir. Alt tarafta bulunan tüm stublar, Unit Testlerden geçirilerek yukarıya doğru ilerlenir. Top-Down’da olduğu gibi yukarıya ilerlerken Unit Testler aracılığı ile her test başarılı olarak sonuçlanmalıdır. Tüm stublar için Unit Testler oluşturulduktan sonra bir üst seviyede hepsi bir ele alınarak test işlemi yapılır. Bu test tipindeki amaç ise stublardan başlayarak hataların en kısa sürede bulunabilmesidir.
Modüllerin bir kısmı Top-Down, bir diğer kısmı ise Bottom-Up tiplerini kullanılarak gerçekleştirilen test tipidir. Bu karma tipteki amaç ise bazı modülleri gruplara ayırabilirken diğer modülleri ise ayrı bir şekilde test edebilmektir.
Genel hatları ile entegrasyon test tipleri bu şekildedir. Yukarıda da belirttiğim gibi en sık kullanılan entegrasyon test tipi genelde Big Bang Integration Test dir. Amacımız genelde yazdığımız modüllerin tutarlılığını sağlamak olduğu için bu test tipi bir çok zaman yeterli olmaktadır. Tabi bu durum birazda iş kurallarına göre de değişiklik göstermektedir. Bir diğer faydası ise entegrasyon işlemi sırasında oluşabilecek hataların önceden önüne de geçebilmektir.
Entegrasyon testleri ile ilgili daha fazla bilgiye ulaşmak isterseniz buradan ulaşabilirsiniz.
Basit bir entegrasyon testine örnek vermek gerekirse:
using (var context = new EFContext()) { // Arrange // Yeni bir entity üretelim var testValue = new Value() { Content= "Blabla" }; // Act // DB'ye insert yapalım context.Values.Add(testValue); context.SaveChanges(); // Insert yapmış olduğumuz entity'i geri okuyalım. var testValueFromDb = context.Values.Single(x => x.ID == testValue.ID); // Assert // Şimdi ise gelen entity'deki content'in eşitliğini kontrol edelim Assert.AreEqual("Blabla", testValueFromDb.Content); }
Bu örnek test case’inde, “testValue” nun veritabanına doğru bir şekilde kaydedilip kaydedilemediğini doğruluyoruz.
{:en}In today’s technological age, we typically build our application solutions on event-driven architecture in order…
{:tr} Makalenin ilk bölümünde, Software Supply Chain güvenliğinin öneminden ve containerized uygulamaların güvenlik risklerini azaltabilmek…
{:tr}Bildiğimiz gibi modern yazılım geliştirme ortamında containerization'ın benimsenmesi, uygulamaların oluşturulma ve dağıtılma şekillerini oldukça değiştirdi.…
{:tr}Bildiğimiz gibi bir ürün geliştirirken olabildiğince farklı cloud çözümlerinden faydalanmak, harcanacak zaman ve karmaşıklığın yanı…
{:tr}Bazen bazı senaryolar vardır karmaşıklığını veya eksi yanlarını bildiğimiz halde implemente etmekten kaçamadığımız veya implemente…
{:tr}Bildiğimiz gibi microservice architecture'ına adapte olmanın bir çok artı noktası olduğu gibi, maalesef getirdiği bazı…