Entegrasyon (Integration) Testi Nedir ve Tipleri Nelerdir

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:

1) Birim Testi (Unit Test):

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.

2) Entegrasyon Testi (Integration Test):

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:

1) Big Bang Integration Test:

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.

2) Top-Down Integration Test:

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.

3) Bottom-Up Integration Test:

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.

4) Sandwich/Hybrid Integration Test:

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.

Gökhan Gökalp

Recent Posts

Securing the Supply Chain of Containerized Applications to Reduce Security Risks (Policy Enforcement-Automated Governance with OPA Gatekeeper and Ratify) – Part 2

{:tr} Makalenin ilk bölümünde, Software Supply Chain güvenliğinin öneminden ve containerized uygulamaların güvenlik risklerini azaltabilmek…

6 months ago

Securing the Supply Chain of Containerized Applications to Reduce Security Risks (Security Scanning, SBOMs, Signing&Verifying Artifacts) – Part 1

{: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.…

8 months ago

Delegating Identity & Access Management to Azure AD B2C and Integrating with .NET

{:tr}Bildiğimiz gibi bir ürün geliştirirken olabildiğince farklı cloud çözümlerinden faydalanmak, harcanacak zaman ve karmaşıklığın yanı…

1 year ago

How to Order Events in Microservices by Using Azure Service Bus (FIFO Consumers)

{:tr}Bazen bazı senaryolar vardır karmaşıklığını veya eksi yanlarını bildiğimiz halde implemente etmekten kaçamadığımız veya implemente…

2 years ago

Providing Atomicity for Eventual Consistency with Outbox Pattern in .NET Microservices

{:tr}Bildiğimiz gibi microservice architecture'ına adapte olmanın bir çok artı noktası olduğu gibi, maalesef getirdiği bazı…

2 years ago

Building Microservices by Using Dapr and .NET with Minimum Effort – 02 (Azure Container Apps)

{:tr}Bir önceki makale serisinde Dapr projesinden ve faydalarından bahsedip, local ortamda self-hosted mode olarak .NET…

2 years ago