Javascript Test Süreçleri: Neyi Test Etmeli

Yarkın ÜÇERLER
Cimri Engineering
Published in
5 min readFeb 19, 2024

--

DALL·E 2024 — A minimalist design featuring a computer screen with an open code editor on the left side and a test results window on the right side. The code editor
DALL·E 2024– A minimalist design featuring a computer screen with an open code editor on the left side and a test results window on the right side.

Seriye başladığımda aklımda çok net bir yol haritası vardı, araştırma yaparken yolun o kadar da aydınlık olmadığını fark etmem sanırım biraz uzun sürdü. Bir çok okuduğum makaleden sonra aklımda sadece bir soru kaldı.

Peki, bir geliştirici olarak, uzmanlık alanımızdan sapmadan, hangi test türlerini yazmalıyız?

Çoğu zaman, çeşitli test metodolojilerinin karmaşık dünyasında yolumuzu kaybetmiş hissedebiliriz.

Bu makalede, bu karmaşıklığı gidermeyi ve JavaScript tabanlı projelerde hangi test türlerinin ne zaman ve nasıl kullanılacağına dair net bir rehber sunmayı amaçlıyorum.

“Birim testi mi yazmalıyım, yoksa entegrasyon testine mi odaklanmalıyım?”, “E2E testleri projem için ne zaman önemli hale gelir?” veya “Performans testlerini ne zaman planlamalıyım?” gibi sorulara yanıt arayacağız.

Test Türleri ve Detayları

Birim Testleri (Unit Tests)

Kodun en küçük parçalarının, izole bir şekilde doğru çalıştığını doğrulama testidir. Fonksiyonlar, metodlar, ve bileşenler gibi kod parçaları üzerinde uygulanır.

Örnek: Bir hesaplama fonksiyonunun verilen girdilerle doğru sonucu döndürdüğünün kontrol edilmesi.

UI Testleri (UI Tests)

Kullanıcı arayüzünün, kullanıcı etkileşimleri karşısında doğru şekilde davranıp davranmadığını ve farklı cihaz/tarayıcı kombinasyonlarında beklenen şekilde görüntülendiğini test eder.

Örnek: Bir web uygulamasının mobil, tablet ve masaüstü cihazlarda responsive tasarım kurallarına uygun olarak düzgün bir şekilde görüntülenmesinin test edilmesi, veya bir butona tıklama işleminin beklenen bir popup penceresini açıp açmadığının kontrol edilmesi.

Entegrasyon Testleri (Integration Tests)

Farklı modüllerin veya sistemlerin birlikte çalışabilme yeteneğini test eder. Bu testler, modüller arası veri akışı ve işlevsellik entegrasyonunu doğrular.

Örnek: Bir web uygulamasının ön yüzünden gönderilen form verilerinin arka uçta doğru şekilde işlenip veritabanına kaydedilmesinin test edilmesi.

Servis Testleri (Api Tests)

Servis testleri, bir uygulamanın arka uç servislerinin, API’ların ve mikroservislerin beklenen işlevleri yerine getirip getirmediğini kontrol eder. Bu testler, servislerin izole bir şekilde (servis-servis etkileşimleri dahil) doğru şekilde çalıştığını doğrular.

Örnek: Bir ödeme servisinin, çeşitli ödeme yöntemlerini doğru şekilde işleyip işlemediğinin test edilmesi. Bu, ödeme isteklerinin gönderilmesi, yanıtların doğru şekilde alınması ve hataların uygun şekilde yönetilmesi gibi işlevleri içerebilir.

E2E Testler (End-to-End Tests)

Kullanıcının uygulama ile etkileşime geçtiği tüm süreci test eder. Bu tür testler, gerçek kullanıcı senaryolarını simüle ederek uygulamanın uçtan uca işlevselliğini doğrular.

Örnek: Bir e-ticaret sitesindeki ürün satın alma sürecinin, ürün seçiminden ödeme işlemine kadar tüm adımlarıyla test edilmesi.

Performans Testleri (Performance Tests)

Tanım: Performans testleri, bir sistem veya uygulamanın, önceden tanımlanmış performans kriterlerine göre belirli bir yük altında nasıl performans gösterdiğini ölçer. Bu testler, sistem performansını etkileyebilecek çeşitli faktörleri değerlendirir ve sistem kapasitesinin sınırlarını belirler.

Örnek: Bir web sitesinin eş zamanlı çok sayıda kullanıcı tarafından ziyaret edildiğindeki performansının test edilmesi. Bu, sayfa yükleme sürelerinin, veritabanı sorgu yanıt sürelerinin ve sunucu kaynak kullanımının analiz edilmesini içerir.

Performans testleri, genellikle aşağıdaki alt kategorilere ayrılır:

  • Yük Testi (Load Testing): Sistem veya uygulamanın normal ve tepe yük koşulları altında beklenen performansı sergileyip sergilemediğini test eder. Yük testleri, sistem performansının kabul edilebilir sınırlar içinde olup olmadığını belirlemeye yardımcı olur.
  • Stres Testi (Stress Testing): Sistem kapasitesinin sınırlarını zorlayarak, uygulamanın aşırı yük koşulları altında nasıl davrandığını test eder. Stres testleri, sistem zayıflıklarını ve hata koşullarında sistem davranışını belirler.
  • Kapasite Testi (Capacity Testing): Sistem kapasitesinin ve ölçeklenebilirliğinin, artan yük altında nasıl performans gösterdiğini değerlendirir. Kapasite testleri, gelecekteki büyüme ihtiyaçlarına yönelik planlamada önemli bir rol oynar.

Performans testlerinin uygulanması, uygulamanın son kullanıcılar için tatmin edici bir deneyim sunup sunmadığını doğrulamak için önemlidir. Bu testler, özellikle yüksek trafik beklentisi olan uygulamalar ve kritik iş uygulamaları için hayati öneme sahiptir. Performans testleri, sistem optimizasyonu ve altyapı yatırımlarının planlanmasında kritik karar verme süreçlerine rehberlik eder.

Uzmanlık alanlarına göre geliştiricelerin odaklanması gereken test türlerini kabaca gruplamaya çalıştım.

Frontend Developerlar

Odaklanılması Gereken Test Türleri: Unit Test, UI Test

  • Birim Testleri: Frontend developerlar, kullanıcı arayüzünü oluşturan her bir bileşenin (örneğin, butonlar, input alanları) beklenen davranışları sergilediğinden emin olmak için birim testleri yazmalıdır. Örnek olarak, bir form elemanının kullanıcı girişiyle doğru şekilde etkileşime girdiğinin test edilmesi verilebilir.
  • UI Testleri: Kullanıcı arayüzünün, farklı cihaz ve tarayıcılarda tutarlı ve erişilebilir olduğunu doğrulamak için önemlidir. Örneğin, bir web sayfasının responsive tasarımının farklı ekran boyutlarında uygun şekilde görüntülenip görüntülenmediğinin test edilmesi.

Backend Developerlar

Odaklanılması Gereken Test Türleri: Integration Test, Servis Test

  • Entegrasyon Testleri: Backend developerlar, sistemlerin ve modüllerin birlikte doğru şekilde çalıştığını doğrulamak için entegrasyon testleri yazmalıdır. Örneğin, bir REST API’nin veritabanı işlemleriyle entegrasyonunun sorunsuz çalıştığının test edilmesi.
  • Servis Testleri: Servis katmanının iş mantığını doğru şekilde uyguladığından emin olmak için servis testleri önemlidir. Bir API endpoint’inin beklenen veri formatında ve durum kodlarıyla yanıt verdiğinin test edilmesi bir örnektir.

Full Stack Developerlar

Odaklanılması Gereken Test Türleri: Unit Test, Integration Test, E2E Test

  • Full Stack developerlar, uygulamanın hem frontend hem de backend bölümleri arasındaki entegrasyonu kapsamlı bir şekilde test etmek için birim, entegrasyon ve E2E testleri yazabilirler. Bu, uygulamanın baştan sona sorunsuz çalıştığını doğrulamak için kritik öneme sahiptir. Örneğin, bir kullanıcının kayıt olma sürecinin tamamının, frontend’den backend’e veri akışıyla birlikte doğru şekilde çalıştığının test edilmesi.

Test (QA) Developerlar

Odaklanılması Gereken Test Türleri: E2E Test, Performance Test

  • E2E Testleri: QA mühendisleri, kullanıcı senaryolarını taklit eden E2E testleriyle, uygulamanın gerçek dünya koşullarında beklenen performansı sergileyip sergilemediğini doğrulamalıdır. Örneğin, bir e-ticaret sitesindeki satın alma işleminin baştan sona doğru çalışıp çalışmadığının test edilmesi.
  • Performans Testleri: Uygulamanın yüksek trafik altında nasıl performans gösterdiğini değerlendirmek için performans testleri yazılmalıdır. Bu, sistemdeki zayıf noktaları ve optimizasyon gerektiren alanları belirlemek için önemlidir. Örneğin, aynı anda binlerce kullanıcının sisteme erişim sağlaması durumunda uygulamanın yanıt verme sürelerinin test edilmesi.

JS Library/Framework Kullanırken Dikkat Edilmesi Gerekenler

Her Bileşen için Unit Test Yazılmalı: Bileşenlerin izole edilmiş durumda doğru şekilde çalıştığını garantilemek için.

Entegrasyon Testleriyle Bileşenler Arası Etkileşimler Kontrol Edilmeli: Bileşenlerin birbiriyle ve API’larla doğru şekilde entegre olup olmadığına dair.

E2E Testlerle Kullanıcı Senaryoları Test Edilmeli: Uygulamanın uçtan uca, kullanıcı gözünden nasıl çalıştığının doğrulanması için.

Yük Testleriyle Uygulamanın Performansı Ölçülmeli: Uygulamanın gerçek dünya koşullarında nasıl performans gösterdiğinin anlaşılması için.

Sonuç

Bu makalede, JavaScript tabanlı projelerde uygulanabilecek çeşitli test türlerini ve bu testlerin her birinin önemini detaylı bir şekilde inceledik. Birim testlerinden, entegrasyon testlerine, E2E testlerden, performans testlerine kadar her test türü, yazılım geliştirme sürecinde kritik bir rol oynar. Ayrıca, UI ve Servis testleri gibi spesifik test türlerinin, kullanıcı deneyimi ve sistem işlevselliği üzerindeki etkilerine de değindik. Uzmanlık alanlarına göre hangi test türlerinin odaklanılması gerektiğini belirleyerek, geliştiricilerin ve test mühendislerinin kendi rollerine en uygun test stratejilerini nasıl geliştirebilecekleri üzerine pratik öneriler sunduk.

Yazılım projelerinin başarısı, sadece kodun kalitesiyle değil, aynı zamanda bu kodun çeşitli senaryolar altında nasıl performans gösterdiğiyle de doğrudan ilişkilidir. Bu nedenle, kapsamlı ve etkin bir test süreci, hataların erken tespiti, kullanıcı memnuniyetinin artırılması ve nihayetinde daha sağlam ve güvenilir uygulamaların geliştirilmesi için hayati öneme sahiptir.

Geliştirme ekibinin her üyesi, ister frontend, ister backend, ister full stack geliştirici olsun, projenin kalitesini artırmak için önemli bir role sahiptir. Test süreçlerine aktif olarak katılım, bu kalitenin sürekli olarak korunmasını ve iyileştirilmesini sağlar.

Bu, aynı zamanda, ekipler arası iş birliğini ve iletişimi de teşvik eder, zira herkesin katkısı, uygulamanın başarılı bir şekilde piyasaya sürülmesinde önemli bir faktördür.

Serinin devamı için aşağıdaki link ile ilerleyebilirsiniz.

Bir sonraki makalemiz “Javascript Test Süreçleri: Jest ile temel test yazmak” de görüşürüz.

Unutmayın, geliştirme becerilerimizin sınırı yok!

Yeni teknolojileri keşfetmeye ve daha iyi kodlar yazmaya devam edelim.

Happy coding! 💻🚀

--

--

Front-End teknolojileri alanında 9 yıldan fazla deneyimli. Clean kod yazmaya kendini adamış. Her soruna basit ve etkili çözümler sunmayı hedefler.