Agile Testing Nedir?
IT şirketleri ve oluşumlarında, SDLC modeli seçimi ve uygulanmasında, son yıllarda gözle görülür şekilde bir değişim yaşandı ve yaşanmaya devam ediliyor. Bu değişimin büyük bir kısmını Waterfall modelinden Agile modeline geçişte gözlemliyoruz. Bunun sebeplerine inmeden önce her iki modelden de kısa bir şekilde bahsetmek istiyorum.
Waterfall Model
Waterfall modelini incelediğimizde en çok göreceğimiz kavram “Aşama” olacaktır. Waterfall adımlar ve aşamalardan oluşur bir adımı bir aşamayı tamamlamadan diğer aşamaya geçmek olanaksızdır. Beş ana aşamadan oluştuğunu görebiliriz. Gereksinimler ve dokümanlar ortaya çıkartılır, sistemin dizaynı oluşturulur, bu gereksinimlerin yerine getirilmesi ve dizaynlara uygun bir şekilde kodlamaları tamamlanır, test aşamalarına alınır ve son olarak test aşamasında bir sorun çıkmazsa canlıya çıkmak için entegrasyonu başlar.
Bu modelde gereksinim dokümanı ve dizayn aşamaları oldukça detaylı ve uzun zaman ayrılarak yapıldığı için kodlama ve testler oldukça hızlı gerçekleştirilir. Aynı sebepten dolayı test sırasında sorunlarla karşılaşma ihtimali azalır. Ancak bir şekilde kodlama veya test aşamalarında yaşanacak bir sorun maliyeti oldukça yükseltir ve üst dokümanların güncellenmesi noktasında büyük zaman kaybına veya para kaybına yol açabilir.
Agile Model
Agile model için en açık ve en çok belirtilen kavramlar “Yinelemeli” ve “Artımlı” olacaktır. Peki bu ne anlama gelir? Yinelemeli olması, geliştirmenin kısa döngüler halinde sürekli olduğunu, artımlı olması da geliştirmenin yeni ürün parçası ortaya koyarak ilerlediğini gösterir. Sonuç olarak Agile model, planlaması kısa döngüler halinde sürekli gerçekleşirken bu döngüler sırasında yeni ürün parçacıkları ortaya koyması ile ilerler.
Agile manifesto 4 ana temel üzerinde ilerler. Bunlar bireyler ve etkileşimler, yazılımın çalışması, müşteri ile işbirliği ve değişimlere karşılık verebilme olarak görülebilir. QA’lerin bu noktada kısa döngüler üzerinde test dokümanlarını hazırlamaları ve gerekliliklere uygun şekilde senaryolarını yazıp testlerini koşmaları gerekmektedir.
Agile modelde farklı görevlere sahip çalışanlar tamamen birbirinden ayrık ve tek bir görev taşımaktan çok tek bir takım gibi çalışmaktadırlar. Bundan dolayı da Agile modelde olabilecek herhangi bir hata sadece tek bir bölümün değil tüm takımın sorumluluğundadır.
Agile Testing
Agile modelin amacının ve işleme sisteminin az çok üzerinden geçtiğimize göre asıl konumuz olan Agile Testing’e dönelim. Peki nedir bu Agile Testing’in Agile modeldeki yeri?
Agile Testing, Agile metodolojisinin ayrılamaz ve temel parçalarından biridir. Diğer metodolojilere nazaran Agile’da testing bir ürün geliştirmesinin içinde ve herkesin katıldığı bir parçadır. Geleneksel modelde veya Waterfall modelde testing, geliştirmenin tamamlandığı zaman ortaya çıkan bir gereksinim iken Agile’da durum bundan farklıdır. Testing bu süreçte en başta ortaya çıkar, sürekli geliştirme ve feedbackler ile ilerler. Bu noktada diğer metodolojilerden ayrı olarak bir QA departmanı bulunmaz. Herkes bir “Agile Geliştirme Ekibi” çalışanıdır.
Agile Test Metodları
Agile Testing’in ne olduğunu ve test aşamalarının nasıl geliştiğinden bahsettiğimize göre Agile Testing’in metotlarından ve nasıl işlendiğini inceleyebiliriz. Bu noktada önümüze 4 ayrı metot ortaya çıkmaktadır. Bunlar “Davranış Odaklı Geliştirme” ( BDD ), “Kabul Testi Odaklı Geliştirme” ( ATDD ), “Keşif Testleri” ( Exploratory Testing ) ve “Session Bazlı Test” ( Session-Based Testing ) olarak nitelendirilebilir.
1- Davranış Odaklı Geliştirme ( Behavior Driven Development )
Bu noktada Product Owner, Developer ve Tester bir araya gelerek User Storyler, Senaryolar ve Testler ortaya koyarak bir arada çalışırlar. İletişimi oldukça üst düzeyde gerçekleştiren bu yaklaşımda, maliyet oldukça küçülür. En yaygın kullanımı Gherkin syntax ile gerçekleşir. Manuel testing aşamalarında oldukça yaygın şekilde kullanılan Gherkin’den basit bir örnek verelim. Basit bir login işlemi için şu şekilde bir kullanım yaratabiliriz:
Given I have an account on website
And I enter login page
When I enter “myname@somemail.com” in the email field
And I enter “mypassword” in the password field
And I press login button
Then The website must log me in
2- Kabul Testi Odaklı Geliştirme ( Acceptance Test Driven Development )
ATDD metodunda, Developer, Tester ve Müşteri bir araya gelirler. “Three Amigos” adı da verilen bu toplantılarda, kabul koşulları ve kabul gereksinimleri konuşulur ve belirlenir. Toplantı sırasında müşteri durumları ve sorunları gözden geçirir ve asıl odağı bu noktadadır, Developer bu sorunların çözümü noktasında çalışırken Tester ise problemlerin ve çözümlerinin kontrolünü sağlar ve potansiyel durumları ele alır. Ürünün ve problemlerin ele alınışı noktasında direkt olarak müşteri ile iletişim halinde olunması metodu oldukça etkili ve değerli kılmaktadır.
3- Keşif Testi ( Exploratory Testing )
Keşif testi Tester’ın oyun alanı gibidir. Testlerin dizaynı, uygulanması ve öğrenme aşamaları tek bir yaklaşımda birleştirilmiş olur. Manuel test noktasında oldukça önemli olan Keşif Testleri çok geniş bir dökümantasyon alanına sahip olmaması ile birlikte Excel, Sheets gibi uygulamalar aracılığı ile belirli bir plan içerisinde yer alır. Direkt etkileşim bu test türünün en önemli noktasıdır. Yüksek riskli veya tecrübeye dayalı şekilde bulunabilecek potansiyel problemlere odaklanılması noktasında oldukça kullanışlıdır.
4- Session Bazlı Test ( Session-Based Testing )
Bu metot aslında bir keşif testi olmaktan pek uzakta değildir. Özel kurallara sahip veya belli sınırları olan bir keşif testi olarak düşünebiliriz. Keşif testinden ekstra olarak belirli bir test planı, raporu ve chartları bulunmaktadır. Bu şekilde ne arandığı, ne bulunması beklendiği ve sonuçta ortaya ne çıktığı sorularına net ve direkt cevaplar verilebilmektedir.
Agile Test’in 10 Temel Prensibi
1- Sürekli Feedback Sağla
Bir Agile takımında feedbackin önemi çok yüksektir. Bir QA çalışanının Agile takımında vereceği feedbackler son derece önemlidir.
2- Müşteriye Değer Sun
Agile geliştirmede her bir yineleme ( iterasyon ) müşteriye sunulacak değerler ile ilgilidir. Ürünün sonuna gelindiğinde yapılabilecek en iyi sonuç ortaya çıkarılmalıdır.
3- Yüz Yüze İletişimde Bulun
Bir takımın, özellikle bir Agile takımının çalışmasındaki en önemli etkileşimlerden biri yüz yüze iletişimdir. Müşteriyle veya takım içerisinde yapılacak yüz yüze iletişim ürünün gereksinimlere uygunluğunu kolaylaştırır.
4- Cesur Ol
Takım iletişiminde, soru sormakta ve adım atmakta cesur davranılması bir çok noktada tıkanıklığı çözecek ve takıma oldukça destek vermiş olacaktır.
5- Basit Tut
Bu noktada aşina olanların aklına K.I.S.S. ( Keep It Simple, Stupid )prensibi gelecektir. Burada anlatılmak istenen basitlik kolaylık anlamında değil karmaşık olmayan anlamındadır. İzlenmesi gereken yolu, olması gerektiği şekilde izlemek ve karmaşık bir hale getirmeden devam etmek şeklinde düşünülebilir.
6- Sürekli İyileştirin
Her bir Sprint diğer Sprintlerdeki potansiyelleri ortaya çıkartma şansı doğuruyor. Bu noktada ürünü geliştirme noktasında veya ekibin kendini geliştirme noktasında çaba vermesi gerekir.
7- Değişikliklere Karşılık Ver
Agile geliştirmede, gereksinimler veya ürün sık sık değişebilir durumdadır. Bu noktada QA çalışanının değişikliklere açık olmalı ve bu noktada sürekli değişen gereksinimlere arkasını dönmemelidir.
8- Kendi Kendini Organize Et
Bir Agile ekibinde Tester, kendi kendini yönetebilmelidir. Bir ürünün test sırasında veya geliştirilmesinde bazı adımlar oldukça uzun sürebilmektedir. Bu noktada ekibin kendini organize edebilmesi büyük önem taşır.
9- İnsanlara Odaklan
Bir Agile ekibinde, ekip çalışanlarının her birinin diğerine duyduğu saygı ve değer işin kalitesini yükseltebilir.
10- Eğlen
Ekipteki herkesin bu prensiplere uyduğunu ele aldığımızda geriye kalan, yapılan işten ve somut sonuçlarından zevk almak oluyor.
Agile Testing Quadrants
Agile Testing’de bir çok gereksinim, her bir gereksinim için farklı yöntemler ve seviyeler bulunmaktadır. Bu gereksinimlerin ayrımının yapıldığı ne durumda ne yapılması gerektiği sorusuna yanıt veren 4 çeyrekten oluşan bir tablomuz bulunmaktadır.
Quadrant 1
Test odaklı geliştirmeyi temsil etmektedir. Unit seviyede testlerdir ve Developer’a destek olacak niteliktedir. Otomasyon testleri kullanılır.
Quadrant 2
İş odaklı testleri temsil eder. Bu noktada asıl kullanılan test yapıları UAT yani kullanıcı kabul testi ve fonksiyonel testlerdir. Beklenen davranışı sistemin nasıl gösterdiği daha net ve belirgindir. Otomasyon ve Manuel testler kullanılabilir.
Quadrant 3
Business-facing bakış açısını temsil eder. Kullanıcı kabul testleri ve Keşif testleri bu çeyreğe aittir. Manuel testler kullanılır.
Quadrant 4
Oldukça kritik öneme sahiptir. Teknoloji odaklı testleri temsil eder. Performance, Load, Stress, Maintainability ve Scalability Testleri bu çeyrektedir. Test araçları kullanılır.
Agile Testing hakkında bahsedeceklerim burada son bulmakta, umarım güzelce, sıkmadan ve açıklayıcı biçimde aktarabilmişimdir. Herhangi bir düzeltme, soru veya feedback için her zaman iletişime geçebilirsiniz.