Birim Testi, Entegrasyon Testi ve Sistem Testi: Aralarındaki Fark Nedir?

Ashley Goolam

Ashley Goolam

23 December 2025

Birim Testi, Entegrasyon Testi ve Sistem Testi: Aralarındaki Fark Nedir?

Birim testi mi, entegrasyon testi mi, sistem testi mi sorusu bazen deneyimli geliştiricileri bile şaşırtır. Bu üç test seviyesi yazılım kalitesinin temelini oluştursa da, ekipler bunları sıklıkla yanlış kullanarak ya çok sığ ya da bakımı imkansız derecede pahalı test suitleri oluşturur. Her birinin test stratejinizde nerede yer aldığını anlamak akademik bir konu değildir, aksine ne kadar hızlı yayın yapabileceğinizi ve yayınlarınıza ne kadar güvenebileceğinizi doğrudan etkiler.

Bu kılavuz, her bir test seviyesinin kapsamını, amacını ve zamanlamasını açıklayacak, test piramidinde nasıl birlikte çalıştıklarını gösterecek ve hemen uygulayabileceğiniz pratik örnekler sunacaktır. İster mikro servisler, ister monolitler veya API'lar geliştiriyor olun, birim testleri, entegrasyon testleri ve sistem testleri arasındaki farkı anlamak çok önemlidir.

Düğme

Birim Testi Nedir?

Birim testi, uygulamanızın en küçük test edilebilir kısımlarını — bireysel fonksiyonları, metotları veya sınıfları — tamamen izole bir şekilde doğrular. Amaç, her bir birimin kendi spesifikasyonuna göre doğru çalıştığını kanıtlamaktır.

Kapsam ve Örnek

Birim testi, bağımlılıkları olmayan tek bir mantık parçasını inceler. İşte basit bir örnek:

// Test edilecek fonksiyon
function calculateDiscount(price, discountPercent) {
  if (discountPercent < 0 || discountPercent > 100) {
    throw new Error('Geçersiz indirim yüzdesi');
  }
  return price * (discountPercent / 100);
}

// Birim testi
describe('calculateDiscount', () => {
  it('20% indirimi doğru hesaplar', () => {
    expect(calculateDiscount(100, 20)).toBe(20);
  });
  
  it('negatif indirim için hata fırlatır', () => {
    expect(() => calculateDiscount(100, -5)).toThrow();
  });
});

Testin doğrudan girdi sağladığını ve çıktıları doğruladığını unutmayın — veritabanı, API veya kullanıcı arayüzü dahil değildir.

Artıları ve Eksileri

Artıları:

Eksileri:

Entegrasyon Testi Nedir?

Entegrasyon testi, birden fazla bileşenin birlikte doğru çalıştığını doğrular. Birimler arasındaki arayüzlere — API uç noktalarına, veritabanı bağlantılarına, mesaj kuyruklarına ve hizmet etkileşimlerine — odaklanır.

Kapsam ve Örnek

İşte veritabanına dokunan bir kullanıcı kayıt uç noktası için entegrasyon testi:

// POST /api/users için entegrasyon testi
describe('Kullanıcı Kayıt API\'si', () => {
  it('kullanıcı oluşturur ve veritabanına kaydeder', async () => {
    const userData = {
      name: 'Test Kullanıcı',
      email: 'test@example.com',
      password: 'GecerliParola123'
    };
    
    // Eylem: Gerçek API'yi çağır
    const response = await axios.post('http://localhost:3000/api/users', userData);
    
    // Doğrulama: Yanıtı VE veritabanını kontrol et
    expect(response.status).toBe(201);
    expect(response.data).toHaveProperty('userId');
    
    // Veritabanı durumunu doğrula
    const userInDb = await db.users.findByEmail('test@example.com');
    expect(userInDb).toBeTruthy();
    expect(userInDb.name).toBe('Test Kullanıcı');
  });
});

Bu test, API, iş mantığı ve veritabanı entegrasyonunun birlikte çalıştığını kanıtlar.

Artıları ve Eksileri

Artıları:

Eksileri:

Sistem Testi Nedir?

Sistem testi, tamamlanmış, entegre sistemi iş gereksinimlerine karşı doğrular. Uygulamayı bir kara kutu olarak ele alır ve kullanıcı bakış açısından uçtan uca iş akışlarını test eder.

Kapsam ve Örnek

Bir e-ticaret satın alma iş akışı için sistem testi:

// Sistem testi: Tam satın alma akışı
describe('E-ticaret Satın Alma Sistemi', () => {
  it('kullanıcının ürünleri gezinmesine, sepete eklemesine ve ödeme yapmasına izin verir', async () => {
    // Adım 1: Kullanıcı kaydı
    const user = await api.register('alisverisci@example.com', 'parola');
    
    // Adım 2: Ürünlere göz atma
    const products = await api.searchProducts('dizüstü bilgisayar');
    expect(products.length).toBeGreaterThan(0);
    
    // Adım 3: Sepete ekle
    await api.addToCart(user.token, products[0].id, 1);
    
    // Adım 4: Ödeme
    const order = await api.checkout(user.token, {
      shippingAddress: '123 Ana Cadde',
      paymentMethod: 'visa'
    });
    
    // Oracle: Siparişin tamamlandığını doğrula
    expect(order.status).toBe('onaylandı');
    expect(order.total).toBeGreaterThan(0);
    
    // Yan etkileri doğrula
    const inventory = await api.getInventory(products[0].id);
    expect(inventory.stock).toBe(initialStock - 1);
  });
});

Bu, birden çok API'yi, veritabanını ve harici hizmetleri (ödeme ağ geçidi) kapsar.

Artıları ve Eksileri

Artıları:

Eksileri:

Yazılım Test Piramidi: Üçü Arasındaki İlişki

Test piramidi, birim testi, entegrasyon testi ve sistem testinin nasıl dağıtılması gerektiğini görselleştirir:

        Sistem Testleri (%10)
            ▲
    Entegrasyon Testleri (%30)
            ▲
    Birim Testleri (%60)

Alt Katman (Birim Testleri): En büyük hacim, en hızlı yürütme, sürekli çalışır
Orta Katman (Entegrasyon Testleri): Orta hacim, kritik entegrasyonları doğrular
Üst Katman (Sistem Testleri): En küçük hacim, çekirdek iş akışlarını test eder

Bu şekil, hızlı geri bildirim sağlarken güveni korur. Piramidi ters çevirirseniz (çok sayıda sistem testi, az sayıda birim testi), test paketiniz yavaş, kırılgan ve pahalı hale gelir.

software testing pyramid

Her Testi Ne Zaman Yapmalı: Yaşam Döngüsü Entegrasyonu

Geliştirme Aşaması Birincil Test Türü Sıklık Yürütme Süresi
Kod yazma Birim testleri Her kaydetmede < 1 saniye
Çekme isteği Birim + Entegrasyon Commit öncesi 1-5 dakika
Birleştirme öncesi Entegrasyon + Seçilmiş Sistem PR onayı üzerine 5-15 dakika
Gece derlemesi Tam paket (tüm türler) Günlük 30-60 dakika
Yayın öncesi Sistem testleri + Smoke testleri Dağıtımdan önce 15-30 dakika
Üretim Smoke testleri + İzleme Sürekli Gerçek zamanlı

Birim testi, entegrasyon testi ve sistem testi zamanlamasını doğru yapmak, darboğazları önlerken kalite geçişlerinin anlamlı olmasını sağlar.

Karşılaştırma Tablosu: Doğru Testi Seçmek

Faktör Birim Testi Entegrasyon Testi Sistem Testi
Hız ⚡⚡⚡ Çok Hızlı ⚡⚡ Orta ⚡ Yavaş
İzolasyon Yüksek Orta Düşük
Hata Ayıklama Yeteneği Kolay Orta Zor
Güven Düşük Orta Yüksek
Bakım Düşük Orta Yüksek
Ne Zaman Yazılır Kodlamadan önce/sırasında Birimler çalıştığında Entegrasyondan sonra
Kim Yazar Geliştiriciler Geliştiriciler + QA QA + Geliştiriciler

Pratik Örnek: Bir API Uç Noktasını Test Etme

Bir POST /api/users uç noktası için birim testi, entegrasyon testi ve sistem testini eylemde görelim:

Birim Testi (Doğrulama Mantığını Test Etme)

// Sadece doğrulama fonksiyonunu test et
describe('validateUser', () => {
  it('geçersiz e-postayı reddeder', () => {
    const result = validateUser({ email: 'gecersiz' });
    expect(result.isValid).toBe(false);
    expect(result.errors).toContain('Geçersiz e-posta formatı');
  });
});

Entegrasyon Testi (API + Veritabanını Test Etme)

// Gerçek veritabanı ile API katmanını test et
describe('POST /api/users entegrasyonu', () => {
  it('veritabanında kullanıcı oluşturur', async () => {
    const response = await request(app)
      .post('/api/users')
      .send({ name: 'Test', email: 'test@example.com' });
    
    expect(response.status).toBe(201);
    
    // Oracle: Veritabanını doğrula
    const user = await db.users.findByEmail('test@example.com');
    expect(user.name).toBe('Test');
  });
});

Sistem Testi (Tam İş Akışını Test Etme)

// Kayıt → giriş → profil güncelleme iş akışını test et
describe('Kullanıcı yönetim sistemi', () => {
  it('tam kullanıcı yaşam döngüsüne izin verir', async () => {
    // Kayıt
    const reg = await api.post('/api/users', userData);
    expect(reg.status).toBe(201);
    
    // Giriş yap
    const login = await api.post('/api/auth/login', credentials);
    expect(login.data.token).toBeTruthy();
    
    // Profili güncelle
    const update = await api.put('/api/users/me', updates, {
      headers: { Authorization: `Bearer ${login.data.token}` }
    });
    expect(update.status).toBe(200);
    
    // Son durumu doğrula
    const profile = await api.get('/api/users/me', {
      headers: { Authorization: `Bearer ${login.data.token}` }
    });
    expect(profile.data.name).toBe(updates.name);
  });
});

Apidog, API Testlerinde Geliştirici Ekiplerine Nasıl Yardımcı Olur?

Birim testi, entegrasyon testi ve sistem testini anlamak çok önemlidir, ancak bunları API'lar için uygulamak zahmetli olabilir. Apidog, özellikle entegrasyon ve sistem testleri için ağır iş yükünü otomatize eder.

Otomatik Test Oracle Oluşturma

Entegrasyon testleri için Apidog, OpenAPI spesifikasyonunuzdan doğrudan test oracle'ları oluşturur:

# API spesifikasyonunuzdan Apidog şunları oluşturur:
Test: POST /api/users
Oracle 1: Durum 201 olmalı
Oracle 2: Yanıt Kullanıcı şemasıyla eşleşmeli
Oracle 3: Konum başlığı mevcut olmalı
Oracle 4: Yanıt süresi < 500ms
Oracle 5: Veritabanı sorgusu oluşturulan kullanıcıyı döndürmeli

Bu, manuel oracle tanımını ortadan kaldırır ve testleri API sözleşmenizle senkronize tutar.

Sistem Testleri için Görsel Test Oluşturucu

Karmaşık iş akışlarını sistem testi, Apidog'da görsel hale gelir:

Test: Kullanıcı Girişini Tamamlama
1. POST /api/users (oluştur)
2. POST /api/auth/verify (e-posta doğrulama)
3. POST /api/auth/login (kimlik doğrulama)
4. GET /api/dashboard (veri yükle)
5. POST /api/preferences (tercihleri ayarla)

Her adımda doğrulamalar + nihai durum doğrulaması

Bunu, API çağrılarını sürükleyip bırakarak oluşturursunuz; Apidog, kimlik doğrulamasını, veri zincirlemesini ve doğrulamaları otomatik olarak ele alır.

Düğme
apidog'da test etme

Sürekli Test için CI/CD Entegrasyonu

Apidog, CI/CD'de birim testi, entegrasyon testi ve sistem testi hiyerarşinizi çalıştırır:

# GitHub Actions pipeline
- name: Birim Testlerini Çalıştır
  run: npm test:unit

- name: Apidog Entegrasyon Testlerini Çalıştır
  run: apidog run --tags "@integration"

- name: Apidog Sistem Testlerini Çalıştır
  run: apidog run --tags "@system"

Bu, her test türünün uygun aşamada çalışmasını sağlar ve sonuçlar doğrudan Slack veya e-postaya gönderilir.

apidog'da ci/cd

Test Kapsamı Görünürlüğü

Apidog, hangi API'lerin birim, entegrasyon ve sistem testi kapsamına sahip olduğunu gösterir:

Uç Nokta Birim Entegrasyon Sistem Kapsam
POST /users %100
GET /users/:id %67
DELETE /users %67

Bu görünürlük, ekiplerin test boşluklarını stratejik olarak doldurmasına yardımcı olur.

Sıkça Sorulan Sorular

S1: API uç noktaları için birim testleri yazmalı mıyım?

Yanıt: API uç noktaları mantığı organize eder — entegrasyon testleri olmalıdır. Uç noktaların içindeki iş mantığı ayrı ayrı birim testinden geçirilmelidir.

S2: Kaç tane entegrasyon testi yeterlidir?

Yanıt: Tüm kritik yolları ve hata senaryolarını kapsayın. İyi bir kural: entegrasyondaki bir hata üretime ulaşacaksa, bunun için bir test yazın.

S3: Sistem testleri bakım maliyetine değer mi?

Yanıt: Evet, ancak yalnızca temel iş akışları için. Sistem testlerini, iş değerinin %80'ini oluşturan özelliklerin %10-20'si ile sınırlayın.

S4: Apidog birim testleri oluşturabilir mi?

Yanıt: Hayır. Birim testleri, dahili kod yapısı hakkında bilgi gerektirir. Apidog, API davranışını dışarıdan gözlemleyebildiği entegrasyon ve sistem testlerinde başarılıdır.

S5: Yeni bir proje için hangi test türüne öncelik vermeliyim?

Yanıt: Birim testleriyle (temel) başlayın, bileşenler bağlandıkça entegrasyon testleri ekleyin, ardından kritik kullanıcı yolculukları için sistem testleri ekleyin. Bu piramit yaklaşımı teknik borcu önler.

Sonuç

Birim testi mi, entegrasyon testi mi, sistem testi mi kararı, birini diğerine tercih etmekle ilgili değildir – her birini doğru zamanda ve oranda uygulamakla ilgilidir. Birim testleri geliştirme için hız ve hassasiyet sağlar. Entegrasyon testleri, birimlerin gözden kaçırdığı bağlantı sorunlarını yakalar. Sistem testleri, tüm ürünün kullanıcılar için çalıştığına dair güven verir.

Bu hiyerarşide ustalaştığınızda, test paketiniz bir bakım yükü olmaktan çıkarak stratejik bir varlık haline gelir. Mevcut test dağılımınızı denetleyerek başlayın. Çok fazla yavaş, kırılgan sistem testiyle mi ters dönmüş durumdasınız? Odağınızı aşağı kaydırın. Kritik entegrasyon kapsamınız mı eksik? Bu boşlukları doldurun.

Apidog gibi modern araçlar, test oluşturma ve yürütmeyi otomatikleştirerek entegrasyon ve sistem katmanlarını çok daha yönetilebilir hale getirir. Bu, geliştirme hızını yavaşlatmadan test piramidi şeklini korumanıza olanak tanır. Kalite, süreçlerinizin doğal bir sonucu haline gelir, yayınları geciktiren ayrı bir aşama olmaktan çıkar.

Unutmayın: amaç her şeyi test etmek değil – doğru şeyleri doğru seviyede test etmektir. Birim testi mi, entegrasyon testi mi, sistem testi mi stratejinizde net olduğunda, yayınlar öngörülebilir hale gelir, güven artar ve ekibiniz yangın söndürmek yerine değer yaratmaya daha fazla zaman ayırır.

Düğme

API Tasarım-Öncelikli Yaklaşımı Apidog'da Uygulayın

API'leri oluşturmanın ve kullanmanın daha kolay yolunu keşfedin