SlideShare a Scribd company logo
Çevik Testler
Buğra Gökalp Okçu
UDEMY
bugra@udemy.com
09.12.2015
Ajanda
● Geleneksel Geliştirme Yaklaşımı
● Çevik Geliştirme ve Çevik Testler
● Udemy’de Çevik Geliştirme ve Testler
○ Geliştirme Akışı
○ CI & Github
○ Testler
○ İzleme Sistemleri
Geleneksel Geliştirme Yaklaşımı
Gereksinim
hazırlama
Tasarım
Kodlama
Test hazırlık /
güncelleme
Kalite birimi
gözden
geçirmesi
İlgili
güncelleme
Test koşumu
Test
Test
Raporu
Durum
toplantısı
...
Çevik Geliştirme
Analiz
Tasarım
Kodlama
Testler
Çalısan Bileşen
Çevik Testler
Birim Testleri
Birim Entegrasyon Testleri
Uçtan Uca Testler
(Arayüz Testleri)
Kabul Testleri
Elle Test
MühendisMühendis+
Ürün
Sorumlusu
● Geleneksel yaklaşım: Hata
bulmak / yakalamak.
Çevik yaklaşım: Hata
engellemek!
● Geleneksel yaklaşım: Test
kendi başına bir süreç
Çevik yaklaşım: Test baştan
itibaren geliştirme sürecinin
bir parçası
Udemy
● ~ 70 Mühendis
● Web Uygulaması: 2 depo
○ PHP + Python (Django)
● SCRUM - 2 haftalık Sprint:
○ ~290 yayın (python) + ~65 yayın (php)
Udemy Web Uygulaması / udemy.com
● Arka uç: PHP + Python (Django)
● Ön uç: Angular, Jquery, HandlebarsJS, ...
Geliştirme Akışı
Github Akışı
master
dal
Birleştirme isteği
(PR)
Kod gözden geçirme
Geliştirme Akışı
Testler
● Birim testleri
● Birim Entegrasyon Testleri
● Uçtan Uca Testler
Statik Analizler
● isort
● flake8
● eslint
Geliştirme Akışı
Kodlama
Workspace
Local
repo
Remote
repo
Pull
Request
-isort
-flake8
-unit tests
- unit tests
- integration tests
- JS unit tests
local local CI (Circleci)
pre-commit pre-push
commit push pull-request
-Peer Code
Review
github
Merged
Branch
merge
Git hooks
CI
Jenkins
● github ile entegre
○ Github PR Builder
● Birim ve entegrasyon testleri -
python (django), php, js
Circle CI
● Docker tabanlı ortamlar
● Paralel testler
● Bağımlılık önbellekleme
● Github entegrasyonu
Haziran 2015
Birimt.
JSbirimt.
flake8,isort
eslint
entegrasyon testleri
CI + Github
● Birleştirme İsteği:
○ Test sonuçları, kapsam raporu (codecov.io)
○ Güncel kod kapsamı: % 89
Test Kapsamı
Test kapsamı: > %89
Testler kodun
ne kadarını kapsıyor?
Uçtan Uca Test Otomasyonu
+ + +
● ~100 test
● Yerel ya da Saucelabs üzerinden
● ~30 dk ya da paralel çalışarak ~10 dk
Uçtan Uca Testler
Zorlaştırıcı unsurlar
● Farklı şablon sistemleri (PHP şablonları, Django şablonları)
● Angular, jquery, handlebars, ...
● Aynı işlev, farklı html (A/B Testler)
2 desen
● “Page objects/ Sayfa nesneleri” Deseni
● “data-” özellikleri
Uçtan Uca Testler
data- özellikleri
<h1 class="course-title" data-purpose="course-title">
Mastering HTML5 Programming - The Easier Way
</h1>
<span class="title ellipsis" data-purpose="course-title">
Mastering HTML5 Programming - The Easier Way
</span>
//JS
element(By.css("[data-purpose='course-title']"));
İki farklı eleman,
Tek seçici !
#python
driver.find_element_by_css_selector("[data-purpose='course-title']")
#ya da
driver.find_element(By.CSS_SELECTOR, "[data-purpose='course-title']")
Uçtan Uca Testler
Sayfa Nesneleri Deseni
<input type="submit" name="submit"
value="Login" class="btn btn-primary btn
btn-success" id="submit-id-submit" data-
purpose="do-login">
//login-page.js
this.doLogin = function() {
element(By.purpose("do-login")).click();
};
//login.spec.js
loginPage.typeUserName("testuser@udemy.com");
loginPage.doLogin();
expect(userInfo.isDisplayed()).toBe(true);
İzleme Sistemleri
● Datadog
○ Gerçek zamanlı
izleme sistemi
○ Ölçüt belirle. Örneğin
ortalama sayfa gösterimi,
ortalama saatlik satın alım
○ İlgili gösterge,
ölçütü altında ise
uyar.
Uyarı kanalları:
○ Hipchat, e-mail,
İşler iyi gitmedi ve bir şekilde hata, üretim ortamına düştü
İzleme Sistemleri
Yazılım Analitiği
● New Relic
○ Sorunları daha düşük seviyede gösterir
(sınıf bazında)
İzleme Sistemleri
● Munin
○ Altyapı, ağ ve sistem seviyesinde izleme
Son
Teşekkürler.

More Related Content

Çevik testler

  • 1. Çevik Testler Buğra Gökalp Okçu UDEMY bugra@udemy.com 09.12.2015
  • 2. Ajanda ● Geleneksel Geliştirme Yaklaşımı ● Çevik Geliştirme ve Çevik Testler ● Udemy’de Çevik Geliştirme ve Testler ○ Geliştirme Akışı ○ CI & Github ○ Testler ○ İzleme Sistemleri
  • 3. Geleneksel Geliştirme Yaklaşımı Gereksinim hazırlama Tasarım Kodlama Test hazırlık / güncelleme Kalite birimi gözden geçirmesi İlgili güncelleme Test koşumu Test Test Raporu Durum toplantısı ...
  • 5. Çevik Testler Birim Testleri Birim Entegrasyon Testleri Uçtan Uca Testler (Arayüz Testleri) Kabul Testleri Elle Test MühendisMühendis+ Ürün Sorumlusu ● Geleneksel yaklaşım: Hata bulmak / yakalamak. Çevik yaklaşım: Hata engellemek! ● Geleneksel yaklaşım: Test kendi başına bir süreç Çevik yaklaşım: Test baştan itibaren geliştirme sürecinin bir parçası
  • 6. Udemy ● ~ 70 Mühendis ● Web Uygulaması: 2 depo ○ PHP + Python (Django) ● SCRUM - 2 haftalık Sprint: ○ ~290 yayın (python) + ~65 yayın (php)
  • 7. Udemy Web Uygulaması / udemy.com ● Arka uç: PHP + Python (Django) ● Ön uç: Angular, Jquery, HandlebarsJS, ...
  • 9. Geliştirme Akışı Testler ● Birim testleri ● Birim Entegrasyon Testleri ● Uçtan Uca Testler Statik Analizler ● isort ● flake8 ● eslint
  • 10. Geliştirme Akışı Kodlama Workspace Local repo Remote repo Pull Request -isort -flake8 -unit tests - unit tests - integration tests - JS unit tests local local CI (Circleci) pre-commit pre-push commit push pull-request -Peer Code Review github Merged Branch merge Git hooks
  • 11. CI Jenkins ● github ile entegre ○ Github PR Builder ● Birim ve entegrasyon testleri - python (django), php, js Circle CI ● Docker tabanlı ortamlar ● Paralel testler ● Bağımlılık önbellekleme ● Github entegrasyonu Haziran 2015 Birimt. JSbirimt. flake8,isort eslint entegrasyon testleri
  • 12. CI + Github ● Birleştirme İsteği: ○ Test sonuçları, kapsam raporu (codecov.io) ○ Güncel kod kapsamı: % 89
  • 13. Test Kapsamı Test kapsamı: > %89 Testler kodun ne kadarını kapsıyor?
  • 14. Uçtan Uca Test Otomasyonu + + + ● ~100 test ● Yerel ya da Saucelabs üzerinden ● ~30 dk ya da paralel çalışarak ~10 dk
  • 15. Uçtan Uca Testler Zorlaştırıcı unsurlar ● Farklı şablon sistemleri (PHP şablonları, Django şablonları) ● Angular, jquery, handlebars, ... ● Aynı işlev, farklı html (A/B Testler) 2 desen ● “Page objects/ Sayfa nesneleri” Deseni ● “data-” özellikleri
  • 16. Uçtan Uca Testler data- özellikleri <h1 class="course-title" data-purpose="course-title"> Mastering HTML5 Programming - The Easier Way </h1> <span class="title ellipsis" data-purpose="course-title"> Mastering HTML5 Programming - The Easier Way </span> //JS element(By.css("[data-purpose='course-title']")); İki farklı eleman, Tek seçici ! #python driver.find_element_by_css_selector("[data-purpose='course-title']") #ya da driver.find_element(By.CSS_SELECTOR, "[data-purpose='course-title']")
  • 17. Uçtan Uca Testler Sayfa Nesneleri Deseni <input type="submit" name="submit" value="Login" class="btn btn-primary btn btn-success" id="submit-id-submit" data- purpose="do-login"> //login-page.js this.doLogin = function() { element(By.purpose("do-login")).click(); }; //login.spec.js loginPage.typeUserName("testuser@udemy.com"); loginPage.doLogin(); expect(userInfo.isDisplayed()).toBe(true);
  • 18. İzleme Sistemleri ● Datadog ○ Gerçek zamanlı izleme sistemi ○ Ölçüt belirle. Örneğin ortalama sayfa gösterimi, ortalama saatlik satın alım ○ İlgili gösterge, ölçütü altında ise uyar. Uyarı kanalları: ○ Hipchat, e-mail, İşler iyi gitmedi ve bir şekilde hata, üretim ortamına düştü
  • 19. İzleme Sistemleri Yazılım Analitiği ● New Relic ○ Sorunları daha düşük seviyede gösterir (sınıf bazında)
  • 20. İzleme Sistemleri ● Munin ○ Altyapı, ağ ve sistem seviyesinde izleme