Birim Testi (Unit Testing)

birim-testi-unit-testing (büyük resim için tıklayın)

Birim Testi Nedir?

Birim Testi (Unit Testing), yazılım geliştirme sürecinde bir yazılımın en küçük parçalarının (örneğin, bir fonksiyon, metod veya sınıf) doğru çalıştığını test etmek için yapılan bir test yöntemidir.

  • Amaç: Yazılımın her bir biriminin (en küçük yapı taşının) bağımsız olarak beklenildiği gibi çalıştığını doğrulamak.
  • Kimin Yaptığı: Genellikle geliştiriciler tarafından gerçekleştirilir.
  • Zamanı: Geliştirme sürecinin ilk aşamalarında yapılır.

Birim Testi Nasıl Yapılır?

1. Test Edilecek Birimi Seçme

  • Yazılımın en küçük bağımsız birimini belirleyin. Örneğin, bir fonksiyon veya metod.

2. Test Senaryolarını Belirleme

  • Fonksiyonun veya metodun hangi girdilerde nasıl bir çıktı vereceğini tanımlayın.
  • Pozitif ve negatif senaryolar oluşturun:
    • Pozitif Senaryo: Fonksiyonun doğru veriyle doğru çalışması.
    • Negatif Senaryo: Yanlış veriyle beklenmeyen durumların ele alınması.

3. Testi Yazma

  • Birim testi araçları kullanılarak kod yazılır. Bu araçlar genellikle otomatik test çalıştırma ve sonuçları doğrulama işlevine sahiptir.

4. Testlerin Çalıştırılması

  • Testler çalıştırılarak girdilerle üretilen çıktılar, beklenen sonuçlarla karşılaştırılır.

5. Sonuçların Analizi

  • Eğer testler geçerse, birim düzgün çalışıyor demektir.
  • Testler başarısız olursa, hatalar düzeltilir ve testler yeniden çalıştırılır.

Birim Testinin Özellikleri

  1. Bağımsızdır:
    • Her birim kendi başına test edilir, diğer birimlerden izole edilmiştir.
  2. Otomatiktir:
    • Testler genellikle birim testi çerçeveleri (frameworks) ile otomatik olarak çalıştırılır.
  3. Hızlıdır:
    • Diğer test türlerine göre daha hızlıdır.

Birim Testine Örnek

Bir Fonksiyon:

python

def toplama(a, b):

   return a + b

Birim Testi:

Python'da birim testi için unittest çerçevesini kullanabilirsiniz.

import unittest

class TestToplama(unittest.TestCase):

   def test_pozitif(self):

       self.assertEqual(toplama(3, 5), 8)  # Pozitif bir senaryo

       self.assertEqual(toplama(0, 0), 0)

   def test_negatif(self):

       self.assertEqual(toplama(-3, -5), -8)  # Negatif sayılarla test

   def test_tip_hatasi(self):

       with self.assertRaises(TypeError):  # Hatalı veri tipi senaryosu

           toplama("a", 5)

if __name__ == '__main__':

   unittest.main()

Test Çalıştırıldığında:

  1. Girdi: toplama(3, 5) → Çıktı: 8 → Test Geçer.
  2. Girdi: toplama("a", 5) → Çıktı: TypeError → Test Geçer (Beklenen hata).

Birim Testinin Avantajları

  1. Hataları Erken Aşamada Yakalar:
    • Yazılımın daha sonraki aşamalarında oluşabilecek sorunları azaltır.
  2. Kod Kalitesini Artırır:
    • Temiz, anlaşılır ve test edilebilir kod yazılmasını teşvik eder.
  3. Bakımı Kolaylaştırır:
    • Kod değişikliklerinden sonra mevcut testler çalıştırılarak yeni hatalar hızlıca tespit edilir.
  4. Güvenlik Sağlar:
    • Kodun temel birimlerinin sorunsuz çalıştığına dair güven verir.

Birim Testinin Dezavantajları

  1. Zaman ve Efor Gerektirir:
    • İlk başta birim testleri yazmak zaman alabilir.
  2. Bağımlı Birimlerde Eksiklik:
    • Tüm birimler test edilse bile entegrasyon sorunları ortaya çıkabilir.
  3. Dinamik Sistemler İçin Karmaşık Olabilir:
    • Birimlerin dış bağımlılıklardan tamamen izole edilmesi zor olabilir.

Birim Test Araçları

  • Python: unittest, pytest
  • Java: JUnit
  • JavaScript: Jest, Mocha
  • C#: NUnit
  • Ruby: RSpec

Sonuç

Birim testi, yazılım geliştirme sürecinde temel yapı taşlarını güvence altına alır. İyi bir birim testi stratejisi, yazılımın kararlılığını ve kalitesini artırır. Otomasyon araçlarıyla birlikte, kodun her bir birimi hızlı ve verimli bir şekilde test edilebilir.

*Gönderi ve görsel chatgpt ile oluşturulmuştur

omurs

Ö S, 30 Ağustos 2018 Perşembe 15:30 tarihinde kayıt oldu

Etiketler

Beğeni


Yıllara Göre Gönderiler








LombokLoglamaB2C (Business-to-Consumer)B2B (Business-to-Business)İçerik Yönetim Sistemi - CMS (Content Management System)Pagination (Sayfalama)Sanal Özel Ağ - VPN (Virtual Private Network)Cronjob (Zamanlanmış Görevler)Printer-YazıcıJava'daki İlkel Veri Tipleri ve Alabilecekleri DeğerlerBit & Byte ve Hafıza Boyutlarındaki Ölçüm BirimleriSanallaştırma (Virtualization)DNS KayıtlarıE-Fatura ve E-ArşivYazılım Lisans TürleriAudit (Denetim) Açık Kaynak (Open Source)Monitoring (İzleme)Sitemap & Robots.txtKilometretaşı (Milestone)BSMV (Banka ve Sigorta Muameleleri Vergisi)KKDF (Kaynak Kullanımı Destekleme Fonu)Siber Pazartesi (Cyber Monday)Black Friday (Kara Cuma)Hotlink.htaccessCryptoLockerMalwareTrojanWormDependency (Yazılım Geliştirme Sürecinde Paket Bağımlılığı)Configuration (Yazılım Geliştirme Sürecinde Yapılandırma)Yahoo ve Yahoo'nun Başarısızlık NedenleriArchiving (Yazılım Geliştirme Sürecinde Arşivleme)Görsel Dosya Türleri (Image Types)ReleaseVersioning & Tagging (Versiyonlama ve Etiketleme)BuildJob (Yazılım Geliştirme Sürecinde Görevler)SonarQubeCDATA (Character Data)Alan Adı Uzantıları (Domain Name Extensions)Regresyon Kara Kutu (Black-Box) TestBeyaz Kutu (White-box) TestGri Kutu (Grey-box) TestYazılım Geliştirme Sürecindeki Temel Test TürleriKod gözden geçirme (Code Review)Birim Testi (Unit Testing)Yazılım Sürecinde EntegrasyonJAR & WAREager & Lazy Fetch TypeMaskelemeKPI (Key Performance Indicator)KII (Key Impact Indicator)Projenin JAR Dosyasını Oluştur - JAR PathSunucu için Linux dağıtım SeçimiKonyteynerler (container technologies)Runtime & Compile Time (Çalışma ve Derleme Zamanı)@Anotasyonlar (@Annotations)