Beyza'nın Blogu

Yazılım Testine Giriş

Merhabalar bu yazımda yazılım testi, kullanılan yöntemler ve test çeşitleri hakkında bilgi vermeye çalışacağım. İyi okumalar dilerim  🙂

Yazılım Testi Nedir?

Yazılım testi, geliştirilen bir yazılımın istenildiği şekilde çalışıp çalışmadığını, kullanılabilirliğini, güvenilirliğini, performansını ve diğer özelliklerini kontrol etme sürecidir. Yazılım geliştirme yaşam döngüsünde önemli bir yere sahiptir ve çeşitli test türlerini içerir:

– UI Web Otomasyonu
– UI Mobil Test Otomasyonu
– API Test Otomasyonu
– Database Test Otomasyonu

Yazılım Geliştirme Yaşam Döngüsü (Software Development Life Cycle – SDLC)

Yazılım geliştirme, sürekli bir süreçtir ve bu sürecin düzenli ve verimli bir şekilde ilerlemesi için bir döngü izler. Yazılım geliştirme yaşam döngüsü, yüksek kaliteli yazılım üretmek ve müşteri beklentilerini karşılamak amacıyla kullanılır. SDLC, yazılım geliştirme sürecinde proje risklerini en aza indirgemek için ileriye dönük planlama yapmayı hedefler.

 

SDLC Adımları

1) İhtiyaç Analizi (Requirement Analysis):İş sahipleri ve analistler tarafından temel gereksinimlerin belirlenmesi ve analiz edilmesi.
2) Planlama (Planning): Projenin genel hedeflerinin ve zaman çizelgesinin oluşturulması.
3) Tasarım (Design):Yazılımın altyapısının ve izlenecek yöntemlerin belirlenmesi.
4) Geliştirme (Development):Geliştiriciler tarafından belirlenen işlevlerin kodlanması.
5) Kod Testi (Code Testing): Geliştirilen kodların test edilmesi.
6) Dağıtım ve Bakım (Deployment and Maintenance):Tamamlanan ve test edilen yazılımın kullanıcılarla buluşturulması ve devamlı bakımının yapılması.

Yazılım Geliştirme Takım Üyeleri
– Proje Sahibi: Yüksek seviyeli hedeflerin belirlenmesi.
– İş Analisti: Proje sahiplerinden alınan istekler doğrultusunda doküman hazırlama.
– Yazılım Geliştirici:Yazılımın tasarımı ve kodlaması.
– Yazılım Test Uzmanı:Yazılımın ihtiyaçları karşılayıp karşılamadığını kontrol etme.

 

Yazılım Geliştirme Yöntemleri

Şelale (Waterfall) Yöntemi
Bu yöntem, iş akışının başlangıçtan sona kadar geriye dönmeden ilerlediği bir modeldir. Genellikle askeri ve eski projelerde kullanılır.

Avantajları:
– Proje bilgisini aktarmak ve yönetmek kolaydır.
– Küçük projeler için uygundur.
– Görevler sabittir.

Dezavantajları:
– Değişim ve yeniliklere kapalıdır.
– Son kullanıcı öngörü ve önerileri dikkate alınmaz.
– Uzun süreli projelerde aşamalar birbirinden kopar.
– Tüm ürün hazır olsa bile test süreci tamamlanana kadar yayına alınamaz.

Çevik (Agile) Yöntemi
Günümüzde en yaygın kullanılan yöntemdir ve kısa ekip toplantılarıyla verimliliği artırmayı hedefler. Agile metodolojisi, parçaları birleştirerek bütüne ulaşma ilkesine dayanır.

 Agile Terimleri

– Scrum: Takım olarak ilerlemeyi temel alan ve her sprint ile projeyi bir adım ileri götüren metodoloji.
– Product Backlog: Kabul kriterleri, büyüklüğü belli user storyler, detaylandırılmış ve parçalanmış geniş feature’lar, detaylandırılmamış epic’lerden oluşur.

Agile metodolojisi, yazılım geliştirme sürecinde daha esnek ve hızlı yanıt verebilme imkanı sunarak, kullanıcı ihtiyaçlarına daha etkin bir şekilde yanıt verir.

Yazılım Testi Nedir?

Yazılım testi, bir yazılımın belirlenmiş gereksinimleri karşılayıp karşılamadığını doğrulamak, amaca uygun olup olmadığını tespit etmek ve olası hataları belirlemek için yapılan planlama, hazırlık ve değerlendirme süreçlerinden oluşur. Yazılımın, yürürlükte kaldığı sürece devam eden bu süreç, güvenilirlik, verimlilik, kullanılabilirlik, sürdürülebilirlik ve taşınabilirlik gibi performansa yönelik özellikleri de değerlendirir.

Yazılım Testi Nasıl Yapılır?

Yazılım, genellikle sprintlerle geliştirilir. Sprint başında yapılan toplantılarda geliştiriciler yazılımı geliştirirken, test uzmanları da beklenen gereksinimler için olası senaryoları yazar ve sonuçlarını oluşturur. Yazılım test döngüsü, hataları (bug ve defect) en kısa sürede tespit etmek, belgelemek ve düzeltmek amacıyla her sprint boyunca devam eder.

 Hata Türleri
Error: Geliştirici tarafından yapılan hata.
Defect: Geliştirme döngüsü sırasında bulunan hata.
Bug:Test döngüsü sırasında bulunan kusur.
Failure:Yazılımın, işlevsel veya işlevsel olmayan kriterleri karşılamadığında yazılımın durumunu ifade eder.

Yazılım Testi Neden Gereklidir ve Kimler Görev Alır?

Yazılım testi olmadan bir yazılım istenen kaliteye ulaşamaz. Yazılım, canlıya alınmadan önce mutlaka test edilmelidir. Yazılım testi, birim testleriyle başlar ve test uzmanları tarafından kullanıcı gözüyle test edilir. Yazılım testi, yazılımı garanti altına almak değil, olası hataları minimuma indirmektir. Yazılım test uzmanları, kullanıcı perspektifinden yazılımı test eder ve yazılım kullanıcılara sunulmadan önce hataları ayıklar. Yazılım testi ve kodlama iç içe gitmeli ve sprint sonrası yapılması daha iyi sonuçlar verir. Yazılım testi geliştirme sürecine dahil olan herkes tarafından yapılmalıdır, sadece test uzmanlarının sorumluluğunda değildir.

Yazılım Testi Yaşam Döngüsü

Yazılım testi yaşam döngüsü, gereksinim analizi, test planı oluşturma, test senaryosu geliştirme, test ortamı kurulumu, testlerin çalıştırılması ve test döngüsü kapanışını içerir. Bu döngünün temel amacı, hataları en kısa sürede tespit etmek, belgelemek ve düzeltilmesini sağlamaktır.

Gereksinim Analizi

Yazılımın ihtiyaç duyduğu özellikleri detaylı olarak belirtmeliyiz. Eğer standart bir ürün istersek, hayalimizdeki gibi bir ürün bulamayabiliriz. Gereksinimler, yazılımın istenen amaca ulaşması için işlevsel ve işlevsel olmayan özellikleri taşımalıdır.

Kullanıcı Öyküsü (User Story)

Kullanıcı öyküsü, bir özelliğin son kullanıcı veya özelliği isteyen kişinin bakış açısını yansıtan basit bir açıklamadır. Yazılım geliştirme aşamasına geçmeden önce teknik ekibin net olarak anlayabileceği hale getirilmelidir. Ürünün eski veya olası yeni bir kullanıcısı tarafından yazılabilir. Temel olarak üç parçadan oluşur:

“Bir kullanıcı olarak, kullanıcıların hangi ürünü daha çok beğenebildiğini anlayabilmek için ürünlere verilen puanları görebilmek istiyorum.”

Sprint iş listesine alınan bir kullanıcı öyküsü, işin net tanımı, kabul kriterleri ve iş bitti tanımını içermelidir. Eksik bilgiye sahip kullanıcı öyküleri için geliştirme takımı grooming/refinement toplantısı ile gereksinimleri tamamlayabilir.

Kullanıcı Öyküsünün Temel Kriterleri
– Independent (Bağımsız): Kullanıcı öyküsü başka kaynaklara atıf yapmamalıdır.
– Negotiable (Tartışılabilir):Kullanıcı öyküsü katı olmamalı, ekibin tartışmasına alan bırakmalıdır.
– Valuable (Değerli): Kullanıcı öyküsü, yazılımın bütünü açısından değer taşımalıdır.
– Estimable (Öngörülebilir):Tartışılmış bir kullanıcı öyküsü net olarak anlaşılabilmelidir.
– Small (Küçük)Kullanıcı öyküsü olabildiğince küçük olmalıdır.
– Testable (Test Edilebilir):Kullanıcı öyküsü, test yapılabilmesini sağlayacak gereksinimlere sahip olmalıdır.

Kabul Kriterlerinin Temel Karakteristikleri
– Specific (Özel):Geliştirmenin özel bir bölümüne odaklanmalıdır.
– Measurable (Ölçülebilir):İşlem sonucunda istenen hedef ölçülebilir olmalıdır.
– Achievable (Erişilebilir):Kabul kriterleri ulaşılabilir hedefler içermelidir.
– Relevant (Amaca Uygun):Kabul kriterleri gereksinimler ve kullanıcı öyküsü ile uyumlu olmalıdır.
– Time Bound (Zamana Bağlı): Sonuca ne zaman ulaşılacağı belirlenmelidir.

Test Planlaması

Yazılım testine yaklaşım planlı olmalıdır. Tecrübeli bir test uzmanı ya da test takım lideri, projenin tamamını kapsayan bir test planı hazırlamalıdır. Bu plan, detaylı olmalı ve genel çatıyı oluşturmalıdır. Herkesin görevi belli olmalıdır.

Test Planı Dokümanı Başlıkları
– Test Stratejisi ve Test Edilecek Bileşenler
– Giriş Çıkış Kriterleri
– Hata Yönetimi
– Risk Yönetimi
– Görev ve Sorumluluklar
– Test Ortamı ve Test Araçları
– Test Takvimi

Test Senaryosu Oluşturma

Test senaryoları, gereksinimlere göre hazırlanan input’lar, olaylar ya da aksiyonlar ve bunlar sonucu oluşması beklenen sonuçları belirten dokümanlardır. Test senaryoları, yazılımın temelini oluşturan gereksinimler ve tasarım problemlerini ortaya çıkarmayı sağlar. Her bir test senaryosu için beklenen sonuç (Expected Result) ve gerçekleşen sonuç (Actual Result) belirlenir. Eğer gerçekleşen sonuç ve beklenen sonuç aynı ise test “PASSED”, değilse “FAILED” olarak raporlanır.

Test Ortamı (Test Environment)

Test ortamı, yazılımın test edilmesi için gereken donanım, aygıt, simülatörler, yazılım araçları ve diğer destekleyici öğeleri içerir. Çoğu türde yazılım testi yapılabilir.

 Yazılım Test Türleri 

  1. Birim (Unit) Testi
    Birim testi, yazılımın en küçük parçalarını, genellikle fonksiyonlar veya metotları, bağımsız olarak test eder. Geliştiriciler tarafından yazılır ve kodun doğru çalışıp çalışmadığını kontrol eder.
  2.  Entegrasyon (Integration) Testi
    Entegrasyon testi, birimlerin birlikte nasıl çalıştığını kontrol eder. Farklı modüllerin entegrasyonu sırasında ortaya çıkabilecek sorunları tespit etmeyi amaçlar.
  3. Sistem (System) Testi
    Sistem testi, yazılımın tüm sistem olarak çalışmasını kontrol eder. Bütünleştirilmiş yazılımın gereksinimlere uygunluğunu doğrular.
  4. Uyum (Compatibility) Testi
    Uyum testi, yazılımın farklı donanım, işletim sistemleri, ağ ortamları ve tarayıcılarla uyumlu olup olmadığını test eder.
  5. Kullanıcı Kabul (User Acceptance) Testi
    Kullanıcı kabul testi, yazılımın son kullanıcılar veya müşteriler tarafından kabul edilip edilmeyeceğini belirlemek için yapılır. Kullanıcıların gereksinimlerinin karşılandığını doğrular.
  6.  Duman (Smoke) Testi
    Duman testi, yazılımın temel işlevlerinin doğru çalışıp çalışmadığını hızlıca kontrol eden yüzeysel bir testtir. Büyük sorunların olup olmadığını belirlemek için kullanılır.
  7. Regresyon Testi
    Regresyon testi, yazılımda yapılan değişikliklerin mevcut işlevselliği bozmadığını kontrol eder. Önceden test edilmiş işlevlerin doğru çalışmaya devam ettiğini doğrular.
  8. Mantıklılık (Sanity) Testi
    Mantıklılık testi, belirli bir modül veya işlevin doğru çalışıp çalışmadığını hızlıca kontrol eder. Genellikle küçük değişikliklerin ardından yapılır.
  9. Uçtan Uca (End-to-End) Testi
    Uçtan uca testi, yazılımın tüm işlevlerini başlangıçtan bitişe kadar gerçek dünya senaryoları içinde test eder. Tüm sistemin entegrasyonunu ve işlevselliğini doğrular.
  10. Kurgusuz (Ad-hoc) Test
    Kurgusuz test, önceden belirlenmiş test planları veya senaryoları olmadan yapılan testtir. Test uzmanlarının sezgilerini ve deneyimlerini kullanarak yazılımı keşfetmesini sağlar.
  11. Performans Testi
    Performans testi, yazılımın belirli bir yük altında nasıl davrandığını ve performansını kontrol eder. Yanıt süresi, hız ve verimlilik gibi metrikleri ölçer.
  12. Yük (Load) Testi
    Yük testi, yazılımın belirli bir yük altında ne kadar iyi performans gösterdiğini belirler. Aynı anda kaç kullanıcının veya işlemin desteklenebileceğini ölçer.
  13. Stres Testi
    Stres testi, yazılımın aşırı yük altında nasıl davrandığını kontrol eder. Yazılımın sınırlarını zorlayarak hata toleransını ve kararlılığını test eder.
  14. Hacim (Volume) Testi
    Hacim testi, büyük miktarda veri ile yazılımın performansını ve işlevselliğini test eder. Veri yoğunluğu ile nasıl başa çıktığını değerlendirir.
  15. Güvenlik Açığı Testi
    Güvenlik açığı testi, yazılımın güvenlik açıklarını tespit etmeyi ve güvenlik risklerini belirlemeyi amaçlar. Saldırılara karşı dayanıklılığını kontrol eder.
  16. Beyaz Kutu (White Box) Testi
    Beyaz kutu testi, yazılımın iç yapısını ve kodunu inceleyerek yapılan testtir. Geliştiriciler tarafından gerçekleştirilir ve kodun belirli bir şekilde çalışıp çalışmadığını kontrol eder.
  17. Kara Kutu (Black Box) Testi
    Kara kutu testi, yazılımın iç yapısına bakılmaksızın yapılan testtir. Kullanıcı gözünden yazılımın işlevselliğini kontrol eder ve belirli girdilere karşı beklenen çıktıları doğrular.

Bu test türleri, yazılımın çeşitli yönlerini ve işlevlerini kapsamlı bir şekilde değerlendirerek, yüksek kaliteli ve güvenilir bir ürün sunmayı hedefler.

Scroll to Top