Kitap 10 · Özet sayfa
Test ve Kalite
Ekiplerin kodun çalıştığını ve çalışmaya devam ettiğini nasıl kontrol ettiği: test türleri, test dublörleri ve hataları erkenden yakalayan araçlar.
Software Dictionary · softwaredictionary.org/tr/kutuphane/testing/ozet
- 01A/B Testi
- A/B testi, bir özelliğin iki sürümünü gerçek kullanıcıların rastgele gruplarına gösterip seçilen metrikte hangisinin daha iyi sonuç verdiğini ölçen deneydir.
- A/B testi, gerçek kullanıcılarla bir kontrolü (A) ve bir varyantı (B) karşılaştırır.
- Kullanıcılar rastgele ve tutarlı biçimde tek bir sürüme atanır.
- Metriği ve örneklem büyüklüğünü deney başlamadan önce seçin.
- 02AssertionDoğrulama ifadesi
- Assertion, kodun o noktasında bir koşulun doğru olması gerektiğini bildiren ve koşul yanlışsa testi ya da programı bir hatayla durduran ifadedir.
- Assertion, doğru olması gereken bir koşulu belirtir ve değilse yüksek sesle başarısız olur.
- Testlerde assertion'lar gerçek sonuçları beklenen sonuçlarla karşılaştırır.
- Üretim kodunda assertion'lar invariant'ları belgeler ve hataları erken yakalar.
- 03Beyaz Kutu Testi
- Beyaz kutu testi, testleri kodun iç yapısına dair bilgiyle tasarlar; böylece kodun ifadeleri, dalları ve yolları doğrudan çalıştırılıp kontrol edilir.
- Beyaz kutu testi, testleri tasarlamak için kod bilgisini kullanır.
- Amaç ifadeleri, dalları ve yolları çalıştırmaktır.
- Kapsama araçları ve mutasyon testi ne kadar kapsamlı olduğunu ölçer.
- 04Birim Testi
- Birim testi, bir fonksiyonun, metodun ya da sınıfın programın geri kalanından yalıtılmış olarak doğru davrandığını doğrulayan küçük ve otomatik bir kontroldür.
- Birim testi, tek bir fonksiyon gibi küçük bir kod parçasını yalıtılmış olarak kontrol eder.
- Birim testlerinin çoğu Arrange, Act, Assert desenini izler.
- Birim testleri gerçek veritabanı, ağ ve dosya sisteminden kaçındığı için hızlıdır.
- 05Cypress
- Cypress, web uygulamalarının uçtan uca ve bileşen testlerini tarayıcıda yürüten, otomatik bekleme ve etkileşimli çalıştırıcı sunan JavaScript framework'üdür.
- Cypress, uçtan uca ve bileşen testleri için bir JavaScript framework'üdür.
- Testleri uygulamanın yanında, tarayıcının içinde çalıştırır.
- Komutlar otomatik olarak yeniden denenir; bu yüzden elle bekleme nadiren gerekir.
- 06Davranış Odaklı Geliştirme
- Davranış odaklı geliştirme, geliştiricilerin, test uzmanlarının ve iş tarafının otomatik testlere dönüşen sade dilli örneklerde anlaştığı bir pratiktir.
- BDD, özellikleri ekipteki herkesin okuyabileceği somut örnekler olarak tanımlar.
- Senaryolar, çoğunlukla Gherkin ile yazılan Given-When-Then desenini izler.
- Adım tanımları senaryoları otomatik kabul testlerine dönüştürür.
- 07Entegrasyon Testi
- Entegrasyon testi, kod, veritabanı ve API gibi bir sistemin birkaç parçasının birlikte doğru çalışıp çalışmadığını kontrol eden otomatik bir testtir.
- Entegrasyon testleri, birden fazla gerçek bileşenin birlikte çalıştığını kontrol eder.
- Veritabanı sorguları, API sözleşmeleri ve yapılandırma gibi sınırlardaki hataları yakalarlar.
- Gerçek bağımlılıklar kullandıkları için birim testlerinden yavaştırlar.
- 08Flaky TestKararsız test
- Flaky test, koda hiçbir değişiklik yapılmadan bazen geçen bazen başarısız olan ve sonuçlarına güvenmeyi zorlaştıran otomatik bir testtir.
- Flaky test, kod değişmeden rastgele geçer ve başarısız olur.
- Yaygın nedenler zamanlama sorunları, paylaşılan durum, test sırası, ağ çağrıları ve tarihlerdir.
- Flaky testler tüm test takımına olan güveni aşındırır.
- 09Fuzz Testi
- Fuzz testi, çökmeleri, takılmaları ve güvenlik açıklarını bulmak için bir programa çok sayıda beklenmedik ya da bozuk girdi veren otomatik bir tekniktir.
- Fuzzing, bir programa çok miktarda beklenmedik ya da bozuk girdi verir.
- Çökmeleri, takılmaları, bellek hatalarını ve güvenlik açıklarını arar.
- Coverage-guided fuzzer'lar yeni kod yollarına ulaşan girdileri evrimleştirir.
- 10Jest
- Jest; test çalıştırıcıyı, doğrulamaları, mock'lamayı, snapshot'ları ve kod kapsamını az kurulumla tek pakette sunan popüler JavaScript test framework'üdür.
- Jest, hepsi bir arada bir JavaScript test framework'üdür.
- Bir test çalıştırıcı, doğrulamalar, mock'lama, snapshot'lar ve kapsam içerir.
- Testler describe, test ve toEqual gibi eşleştiricilerle expect kullanır.
- 11Kabul Testi
- Kabul testi, yazılımın kullanıcılarla ya da müşterilerle anlaşılan gereksinimleri karşılayıp karşılamadığını kontrol eder; ekip sürüm kararını buna göre verir.
- Kabul testi, yazılımı üzerinde anlaşılan kullanıcı veya iş gereksinimlerine göre kontrol eder.
- Otomatik kabul testleri genellikle bir testi bir kabul kriterine eşler.
- Kullanıcı kabul testi (UAT), onaydan önce gerçek kullanıcılar veya müşteriler tarafından yapılır.
- 12Kalite GüvencesiQA
- Kalite güvencesi (QA), yazılımın gereksinimlerini karşılayıp güvenilir çalışmasını sağlayan uygulamalardır; hataları yalnızca bulmayı değil, önlemeyi amaçlar.
- QA, yazılımın gereksinimlerini karşılamaya devam etmesini sağlayan uygulamalar bütünüdür.
- Hataları yalnızca bulmayı değil, önlemeyi amaçlar.
- Kalite kontrol ürünü kontrol eder; kalite güvencesi süreci iyileştirir.
- 13Kara Kutu Testi
- Kara kutu testi, yazılımı içindeki koda bakmadan ya da ona dayanmadan, yalnızca girdileri ve çıktıları üzerinden, yapması gereken şeye göre kontrol eder.
- Kara kutu testi girdileri ve çıktıları gereksinimlere göre kontrol eder.
- Test uzmanlarının kodu bilmesi ya da okuması gerekmez.
- Denklik bölümleme ve sınır değer analizi onu yapılandırır.
- 14Keşif Testi
- Keşif testi, test uzmanının yazılım hakkında öğrenip testleri tasarlayarak aynı anda çalıştırdığı ve bulduklarının yönlendirdiği, uygulamalı bir yaklaşımdır.
- Test uzmanı, öğrendikçe uyum sağlayarak testleri aynı anda tasarlar ve çalıştırır.
- Oturumlar zamanla sınırlıdır ve yazılı bir charter ile yönlendirilir.
- Hatalar, sorular ve riskler hakkındaki notlar kısa bir değerlendirmede paylaşılır.
- 15Linting
- Linting, kaynak kodu çalıştırmadan otomatik olarak analiz edip olası hataları, stil sorunlarını ve şüpheli kalıpları kod yayına çıkmadan işaretleme işlemidir.
- Linter, kodu çalıştırmadan analiz eder.
- Olası hataları, riskli kalıpları ve stil tutarsızlıklarını işaretler.
- Kurallar yapılandırılabilir ve pek çok sorun otomatik olarak düzeltilebilir.
- 16Mocking
- Mocking, kodu yalıtılmış biçimde test etmek için veritabanı ya da API gibi gerçek bir bağımlılığı kontrol ettiğiniz bir sahteyle değiştiren test tekniğidir.
- Mock, gerçek bir bağımlılığı kontrol edilebilir bir sahteyle değiştirir.
- Mock'lar testleri hızlı, tekrarlanabilir ve yan etkisiz kılar.
- Mock'lar yalnızca veri döndürmekle kalmaz, nasıl çağrıldıklarını da doğrulayabilir.
- 17Mutasyon Testi
- Mutasyon testi, koda küçük kasıtlı hatalar ekleyip testlerin her birini yakalayarak başarısız olup olmadığına bakarak bir test takımının kalitesini ölçer.
- Mutasyon testi, testleri test etmek için mutant adı verilen küçük hatalar ekler.
- Bir test başarısız olursa mutant öldürülür, tüm testler geçerse hayatta kalır.
- Mutasyon skoru, takımın öldürdüğü mutantların yüzdesidir.
- 18Özellik Tabanlı Test
- Özellik tabanlı test, elle yazılmış birkaç örnek yerine otomatik üretilen çok sayıda girdi için bir kuralın geçerli olduğunu kontrol eder.
- Tek bir beklenen çıktıyı değil, tüm geçerli girdiler için geçerli olması gereken bir kuralı belirtirsiniz.
- Çerçeve, zor uç durumlar dahil çok sayıda girdi üretir.
- Başarısız girdiler, hâlâ başarısız olan en küçük örneğe kadar küçültülür.
- 19Performans Testi
- Performans testi, bir sistemin beklenen ve aşırı yük altındaki hızını, kararlılığını ve ölçeklenebilirliğini yanıt sürelerinden kırılma noktasına kadar ölçer.
- Performans testi yük altında hızı, kararlılığı ve ölçeklenebilirliği ölçer.
- Yük, stres, ani yük, dayanıklılık ve ölçeklenebilirlik testlerini kapsar.
- p95 ve p99 gibi yüzdelik dilimleri, throughput'u ve hata oranını izleyin.
- 20Playwright
- Playwright, Chromium, Firefox ve WebKit'i tek bir API ile yöneten, Microsoft'un uçtan uca test ve tarayıcı otomasyonu için açık kaynaklı framework'üdür.
- Playwright, Chromium, Firefox ve WebKit'i tek bir API ile otomatikleştirir.
- Role dayalı locator'lar öğeleri kullanıcıların gördüğü biçimde bulur.
- Her işlemden önceki otomatik bekleme kararsız testleri azaltır.
- 21Regresyon Testi
- Regresyon testi, daha önce çalışan özelliklerin bozulmadığından emin olmak için bir kod değişikliğinden sonra mevcut testleri yeniden çalıştırma pratiğidir.
- Regresyon, eskiden çalışan bir şeydeki hatadır.
- Regresyon testi, her değişiklikten sonra mevcut testleri yeniden çalıştırır.
- CI/CD'deki otomatik test takımları regresyon testini ucuz ve sürekli kılar.
- 22Selenium
- Selenium, çoğunlukla uçtan uca test için web tarayıcılarını otomatikleştiren, WebDriver API'si birçok dilde bulunan açık kaynaklı bir araç takımıdır.
- Selenium gerçek web tarayıcılarını, çoğunlukla uçtan uca testler için otomatikleştirir.
- 2004'te başladı; WebDriver 2018'de bir W3C standardı oldu.
- Testler Java, Python, C#, JavaScript, Ruby ve daha fazlasında yazılabilir.
- 23Smoke Test
- Smoke test, daha derin testlere zaman ayırmadan önce bir derlemenin en önemli özelliklerinin temelde çalıştığını doğrulayan hızlı ve yüzeysel bir kontroldür.
- Smoke test, bir derlemenin kritik parçalarının çalıştığını doğrulayan hızlı ve yüzeysel bir kontroldür.
- Başarısız bir smoke test derlemenin bozuk olduğu anlamına gelir; bu yüzden daha derin testler atlanır.
- Smoke testler genellikle her derlemeden ve her dağıtımdan sonra çalışır.
- 24Snapshot Testi
- Snapshot testi, kodun çıktısını ilk çalıştırmada bir dosyaya kaydeden ve sonraki çalıştırmalarda çıktı bu kopyayla eşleşmezse başarısız olan bir tekniktir.
- Snapshot testi, mevcut çıktıyı kaydedilmiş ve commit edilmiş bir kopyayla karşılaştırır.
- İlk çalıştırma snapshot'ı oluşturur; çıktı farklıysa sonraki çalıştırmalar başarısız olur.
- Bilinçli değişiklikler snapshot güncellenip commit edilerek kabul edilir.
- 25Sözleşme Testi
- Sözleşme testi, iki servisin alıp verdikleri istek ve yanıtlar konusunda anlaşıp anlaşmadığını, ikisini birlikte çalıştırmadan kontrol eden tekniktir.
- Sözleşme, bir tüketicinin gönderdiği istekleri ve beklediği yanıtları tanımlar.
- Tüketici ve sağlayıcı, sözleşmeye karşı ayrı ayrı test edilir.
- Tüketici güdümlü sözleşme testinde sözleşmeyi tüketiciler tanımlar, sağlayıcılar doğrular.
- 26Statik Analiz
- Statik analiz, hataları, güvenlik açıklarını ve kalite sorunlarını erken bulmak için kaynak kodun çalıştırılmadan otomatik olarak incelenmesidir.
- Statik analiz, kodu çalıştırmadan inceler.
- Hataları, güvenlik açıklarını ve kalite sorunlarını erken bulur.
- Teknikler örüntü eşleştirmeden veri akışı ve taint analizine kadar uzanır.
- 27Stres Testi
- Stres testi, kırılma noktasını bulmak ve düzgün biçimde başarısız olup toparlandığını doğrulamak için bir sistemi bilerek beklenen iş yükünün ötesine iter.
- Stres testi, kırılma noktasını bulmak için bir sistemi beklenen yükün ötesine iter.
- Hangi kaynağın ya da bileşenin önce başarısız olduğunu ortaya çıkarır.
- İyi bir sonuç, yüksek bir sınır değil, düzgün başarısızlık ve hızlı toparlanmadır.
- 28Test CaseTest Senaryosu
- Test case, belirli bir davranışın kontrolüdür: başlangıç koşulları, girdi ya da adımlar ve yazılımın doğru davranıp davranmadığını gösteren beklenen sonuç.
- Test case, koşullar, adımlar ve beklenen bir sonuçla tek bir davranışı kontrol eder.
- Birbiriyle ilgili test case'ler test takımlarında toplanır.
- Arrange, Act, Assert otomatik test case'leri okunur tutar.
- 29Test Fixture
- Test fixture, bir testin çalışmadan önce ihtiyaç duyduğu örnek veri ya da yapılandırılmış nesne gibi bilinen durum ile onu kurup temizleyen koddur.
- Fixture, bir testin dayandığı bilinen başlangıç durumudur.
- Kurulum durumu oluşturur, sökme ise sonrasında temizler.
- Fixture'ların kapsamı test başına, dosya başına ya da test çalıştırması başına olabilir.
- 30Test Kapsamı
- Test kapsamı, otomatik testler çalışırken bir programın kaynak kodunun ne kadarının yürütüldüğünü ölçen ve genellikle yüzde olarak gösterilen bir metriktir.
- Kapsam, testler sırasında hangi kodun çalıştığını gösterir ve genellikle yüzde olarak ifade edilir.
- Yaygın türleri satır, dal ve fonksiyon kapsamıdır.
- Dal kapsamı daha katıdır ve test edilmemiş koşulları yakalar.
- 31Test Odaklı Geliştirme
- Test odaklı geliştirme, önce başarısız bir test yazdığınız, sonra onu geçirecek kadar kod yazıp ardından tasarımı temizlediğiniz bir kodlama pratiğidir.
- Testi geçirecek kodu yazmadan önce başarısız bir test yazın.
- Döngü kırmızı (başarısız), yeşil (geçen), yeniden düzenleme (temizlik) şeklindedir.
- Her döngü küçük ve hızlıdır, çoğu zaman yalnızca birkaç dakika sürer.
- 32Test Otomasyonu
- Test otomasyonu, testleri kodla çalıştırıp sonuçları denetlemektir; böylece aynı kontroller elle değil, her değişiklikte hızlı ve tutarlı biçimde tekrarlanır.
- Test otomasyonu testleri kodla çalıştırır ve sonuçları kontrol eder.
- Birim, entegrasyon ve uçtan uca testlerin hepsi otomatikleştirilebilir.
- Test takımını CI'da çalıştırmak gerilemeleri dakikalar içinde yakalar.
- 33Test Piramidi
- Test piramidi, otomatik testleri dengelemek için bir modeldir: çok sayıda hızlı birim testi, daha az entegrasyon testi ve tepede birkaç yavaş uçtan uca test.
- Çok sayıda birim testi, daha az entegrasyon testi ve yalnızca birkaç uçtan uca test yazın.
- Üst seviyedeki testler daha yavaş ve kırılgandır, ancak sistemin daha büyük bir kısmını aynı anda test eder.
- Her testi hatayı yakalayabilecek en düşük seviyeye itin.
- 34Test RunnerTest çalıştırıcı
- Test runner, bir projenin otomatik testlerini genellikle tek komutla bulan, çalıştıran ve hangilerinin geçtiğini ya da başarısız olduğunu raporlayan araçtır.
- Test runner, otomatik testleri keşfeder, çalıştırır ve raporlar.
- Başarısızlıkta sıfırdan farklı bir çıkış kodu, CI hatlarının bozuk değişiklikleri engellemesini sağlar.
- Yaygın özellikler paralel çalıştırma, izleme modu, filtreleme ve zaman aşımlarıdır.
- 35Uçtan Uca Test
- Uçtan uca test, kullanıcı arayüzünden veritabanına ve geri dönüşe kadar tam bir kullanıcı yolculuğunu uygulamanın tamamında çalıştıran otomatik bir testtir.
- E2E testleri, uygulamanın tamamında gerçek kullanıcı yolculuklarını simüle eder.
- Web E2E testleri genellikle gerçek ya da headless bir tarayıcıyı otomatikleştirir.
- En yavaş ve en pahalı testlerdir; bu yüzden kritik akışlara saklanmalıdır.
- 36Yük Testi
- Yük testi, bir sistemin beklenen trafik altında nasıl davrandığını ölçmek için aynı anda çok sayıda kullanıcıyı ya da isteği simüle eden performans testidir.
- Yük testi, bir sisteme karşı çok sayıda eşzamanlı kullanıcıyı ya da isteği simüle eder.
- Temel ölçümler yanıt süresi yüzdelik dilimleri, throughput ve hata oranıdır.
- p95 ve p99 gibi yüzdelik dilimler, ortalamaların gizlediği yavaş uç değerleri ortaya çıkarır.