KaderTarlan

BlogCan

Çevik Ekiplerde Test Metodolojisi

Bir çok test metodolojisi mevcuttur. Bunlardan bazıları Fonksiyonel, Sistem, Yük, Performans, Güvenlik, Stres, Uçtan uca ve Kullanıcı kabul Testleridir. Bizler bu testleri ister çevik bir proje istersek de daha geleneksel metodolojiler kullanan herhangi bir projede kullanabiliriz.

Çevik test dediğimiz şey sadece çevik projelerde test etmek anlamına gelmez. Araştırmacı olan her test türü, çevik bir proje olsun ya da olmasın doğal olarak çeviktirler.

Müsteri Takımları için Testçi Nedir? Testçiler müşteri ekibinin ayrılmaz birer üyesidirler. Ekibin ihtiyaçlarını ve örneklerini ortaya çıkarmakta ve müşterilerin gereksinimlerini test olarak ifade etmelerine yardımcı olmaktadırlar.

Geliştirici Takımları için Testçi Nedir? Testçiler geliştirici ekibin bir üyesidir aynı zamanda. Çünkü test çevik yazılım geliştirmirirken merkezi bir bileşendir. Test edenler, ekip içinde müşteri adına kaliteyi savunurlar.

Bazı çevik ekiplerin kendilerini “testçi” olarak tanımlayan herhangi bir üyesi yok. Ancak, bu ekipler müşteri takımının storyleri için testlerinin yazılmasına, testlerin başarılı olduğundan emin olunmasına ve hangi testlerin yapılmasına karar verecek bu konuda yardım edecek birine ihtiyaç duyuyorlar. Bir ekibin testçisi olsa bile test görevlerinden tüm Çevik takım sorumludur. Çevik takımlarla ilgili deneyimlerin sonucunda anlaşılıyor ki “test becerileri ve deneyimi” , proje başarısı için hayati önem taşımaktadır ve test uzmanlarının çevik ekiplere değer kattığını göstermektedir.

Aşağıda Rollerin Etkileşimi şeması bulunmaktadır. ****

Geleneksel Takımlarla Çalışmak

Geleneksel takımlarda serbestçe planlanmış ve gereksinimlerin tanımlanmasıyla başlayan ve genellikle acele test aşamasından oluşan bir yazılım geliştirme yaşam döngüsüne hakim. Kalite güvence ekiplerinin bu tarz geleneksel ekiplerde kalitenin bekçileri olarak hareket etmeleri bekleniyor. Yazılımcılar kendi kodlarını test etseler bile, kişisel çabalarla işbirliği yaparak test yapmak mümkün olamıyor. Geliştirme sonrası test aşamaları ile kalitenin yükseltilmesi bekleniyor. Ancak geliştirme ekipleri genelde hangi özelliklerin o sürümde olduğundan ya da nasıl çalışması gerektiği konusunda pek de bilgi sahibi değildir.

Çevik Takımlarla Çalışma

Gereksinimleri nasıl tanımlayabiliriz? Kod parçasının 1-4 hafta arasında testlerini yapabilir miyiz ve ürünü teslim edebiliriz? Bu kadar hızlı bir şekilde nasıl kodlayabilir ve test edebiliriz? Testleri otomatik hale getirmek için zaman bulabilir miyiz? Kötü kod yazılmışsa ürünü teslim etmeden bunları fark etmek için nasıl kontrollerimiz olur? Sorularına cevap bularak Çevik ekibimizde testi dahil ediyoruz. Lisa’nın ekibi için testi çevik bir projeye nasıl entegre edeceklerini düşünmüşler. Buradaki sorun gerçekten projeyi testlerle nasıl sürdüreceğiz? Çevik bir ekibe gerçek değer katmak için test becerilerini ve tecrübelerini nasıl kullanacağımızı süreç içerisinde göreceğiz.

Geleneksel ve Çevik Testler

resim**

Çevik ve geleneksel yazılım geliştirme ekipleri için testler arasındaki benzerliklere bakarsak, Testlerin ürün yayınlanmadan hemen önce gerçekleştiği açıktır. Diyagram idealisttir, çünkü kodlama için olan zaman ile test etme zamanı eşit gözükmekte. Birçok projede durum böyle değildir. Kodlama beklenenden uzun sürdüğü için ve test sonunda takımlar bir kod-fix döngüsüne girdikleri için testler ezilir.

Çevik iteratif ve artımlıdır. Bu, test yapanların kodlamanın her aşamasını en kısa sürede test etmeleri anlamına gelir. Tekrarlama, bir hafta kadar kısa veya ayda bir olabilir. Ekip, kodun bir kısmını yazar ve test eder, doğru çalıştığından emin olur ve sonra yazılması gereken bir sonraki adıma geçer. Geliştiriciler burada story done olmayana kadar yani test edilmeyene kadar ilerlemez.

Çevik test uzmanı kimdir? Çevik testleri yürüten ekibin bir üyesidir.
Beceriler önemlidir, ancak tutum daha önemlidir. Janet bu konu için şunları diyor: “Tutum olmadan beceri bir şey değildir. Çevik ekiplerimiz için çok sayıda test görevlisi işe almak zorunda kaldık, bunu çok fazla düşündük ve çevik toplumdaki başkaları ile tartıştık. Test yapan kişiler büyük resmi görme eğilimindedirler. Uygulamaya bir kullanıcıdan veya müşterinin bakış açısından daha fazla bakarlar; bu da genel olarak müşteri odaklı oldukları anlamına gelir.”

ÇEVİK İLKELERİN VE DEĞERLERİN UYGULANMASI Bireylerin bir projenin başarısı üzerinde büyük etkisi olabilir. Daha tecrübeli ve daha yetenekli üyelerden oluşan bir ekibin daha az yetenekli bir ekipten daha iyi performans almasını bekleriz. Ancak bir ekip sadece bireysel üyelerden daha fazlasıdır. Çevik değerler ve ilkeler, projedeki bireylerin etkileşim içinde olmalarına ve iletişimi sürekli tutmalarına teşvik eder. Çevik değerleri ve ilkeleri kendine rehberlik eden bir ekip ayrıca yetenekli bireylere de sahipse çalışanlarının daha zayıf olduğu bir takımından daha yüksek morale ve sahiptir.

Çevik ekip için bazı ilkeler: Sürekli geribildirim sağlayın.    Müşteriye değer katın.    Yüz yüze iletişim kurmayı etkinleştirin.    Cesarete sahip olun.    Basit tutun.    Sürekli iyileştirme uygulayın.    Değişime cevap verin.    Kendinizi de yenileyin.    İnsanlara odaklanın.    Keyfini çıkarın.

Becerilerimizden biri de “happy path“ dışındaki test durumlarını belirlemek olsa da, happy path’lerin çalıştığından emin olarak başlamamız gerekir. Happy path’ler için testleri otomatikleştirebiliriz ve daha sonra daha detay testleri negatif-pozitif test caseleleri de ekleyebiliriz. Bir uygulama kritik öneme sahipse, negatif testler eklemek kesinlikle gereklidir.

Yüz Yüze İletişim Etkinleştirme Hiçbir ekip iyi iletişim olmadan iyi çalışamaz. Çevik ekibin iletişim kolaylığı için benzersiz yollar araması gerekir. Bu işini daha iyi yapmak için kritik bir husustur.

Lisanın bu konu hakkında şöyle yorum yapıyor: Test ekibi yeniydi ve ürün sahibi doğrudan geliştiricilere gidiyordu. Bu sorunu ekiple paylaşıp bir kural oluşturduk. “Üçlü Güç” ile büyük başarı elde ettik. Bu, bir özellik hakkındaki tüm tartışmaların bir programcıya, bir testçiye ve ürün sahibine ihtiyacı olduğu anlamına geliyordu. Biri iki kişinin konuştuğunu görürse, diğerinin konuşmaya başlama hakkı olurdu. Çok uzun sürmeyen bu konuşmalar olmadan veya testi tartışmadan ürünü çıkarmayı kimse düşünmezdi.

Herhangi bir özelliğin nasıl çalışması gerektiği veya bir arayüzün nasıl görünmesi gerektiği konusunda bir sorunuz olduğunda, test yapan bir geliştirici veya bir iş uzmanından bu konuda yardım alabilirsiniz. Test yapan kişiler hiçbir zaman doğrudan müşteri-geliştirici iletişim yolunda olmamalıdır, ancak çoğu zaman iletişimin gerçekleştiğinden emin olmalarına yardımcı olabilirler.

Cesarelendirme Bu bölümde çevik bir ekibe geçiş yaparken ihtiyaç duyulan duygusal cesaret hakkında konuşalım. Çevik bir ekibe yeni katıldığınızda ya da mevcut ekibinizin çevik ekibe geçiş yaptığında ilk önce korkuyu yaşamanın ve cevaplanması gereken bir takım soruların olması normaldir.

Her story için kısa sürede test görevlerini nasıl tamamlayabiliyoruz? Bir test yöneticisi veya kaliteli bir süreç yöneticisi iseniz bu rolü çevik bir ekip üzerinde nerede bulabileceğiniz belli değildir ve bunun cevabı kimsede yoktur. Çevik test yapmaya çalışan ekipler bu soruların cevaplarını bulmak için cesarete sahip olmalıdırlar. Ayrıca burada başarısızlığa uğrayacağımızı ve bu başarısızlıktan öğreneceğimiz şeeylerin olduğunu bilerek, başarısızlığa uğramak için de cesarete ihtiyacımız olacak. Kararlı bir yapıya kavuşmadığımız için her iterasyonda başarısızlığın tekrar canlanmamasını sağlamanın yollarını düşünmeye başlayacağız. Başkalarının hata yapmasına izin vermek için de cesarete ihtiyacımız var, çünkü dersi öğrenmenin tek yolu budur. Korkma! Çevik takımlar açıktır ve genellikle yeni fikirleri kabul etmektedirler.

Basit Tut Bu, deneyeceğiniz ilk şeyin aslında çalışacağı anlamına gelmez, ancak basit olmalı. Çevik test kullanıcıları ve ekipleri, mümkün olan en basit yazılım uygulamasını üretmekle kalmayıp, yazılımın müşterinin gereksinimlerini karşılaması için basit bir yaklaşım benimsemekle yükümlüdürler. Bu, ekibin temaları ve öyküleri analiz etmek için biraz zaman ayırıp uygun mimari ve tasarım yoluyla düşünmemesi gerektiği anlamına gelmez. Bu, ekibin gereksinimleri biraz karmaşık olabileceği ve daha basit bir çözümün aynı değeri sağlayacağı anlamına gelir. Testçi ve diğer ekip üyeleri, müşterilere bilgi sağlamalı ve performans ve güvenlik gibi iş dışı gereklilikler de dahil olmak üzere kalitenin tüm yönlerini değerlendirmelidir. Ekip çalışması basit, adım adım bir yaklaşım alarak müşterinin iyi kararlar vermesine yardımcı olabilir. Basit demek kolay değildir. Testçi için komplex olmayan araçlarla ve bu işi yapacak tekniklerin birleştirilmesi demektir. Araçlar bir elektronik tablo veya kontrol listesi kadar basit olabilir.

Sürekli İyileştirme Uygulayın Daha iyi bir iş yapmak için yollar aramak çevik bir ekibin zihniyetinin bir parçasıdır. Tabii ki, tüm ekip bu şekilde düşünmeli çünkü çevikliğin merkezi ekibin her zaman daha iyi iş yapmaya çalışmasıdır.Testçi retrospective’lere katılmalı. Nelerin iyi çalıştığını ve neyi ekleyeceğinizi veya neyin değiştirileceğini değerlendirmeli. Takımlar, testlerde ve diğer tüm alanlarda en büyük ilerlemelerini retrospektifler ve diğer süreç iyileştirme yollarıyla başarmışlardır.

Yeni beceriler öğrenmek ve profesyonel olarak büyümek çevik testçiler için önemlidir. Toplantılara ve konferanslara giderler, email listelerine katılırlar ve yeni fikirler edinmek için makaleleri, blogları ve kitapları okurlar. Retrospektifler, yarın daha iyi iş çıkartabilmek için ekibin dün yaptıklarını kullanmasına olanak tanıyan anahtar bir çevik uygulamadır. Çevik test uzmanları ise bu fırsatı testle ilgili sorunları dile getirmek için kullanır ve ekipte bunlarla ilgili beyin fırtınası yapılmasını ister. Bu, ekibin sürekli iyileştirme için kendisine geribildirim sağlamanın bir yolu.

Lisa’nın ekibi için: Ekibimiz retrospektifleri büyük bir fayda sağlamak için kullanmıştı, ancak daha iyi bir iş yapmak için bize odaklanmamıza yardımcı olması için yeni bir şeye ihtiyacımız olduğunu hissettik. İstediğimiz kadar üretken olmamızı engelleyen öğeler nelerdi? Bunlar konuşuldu ve çözümler getirildi. Böylece testlerimizi daha hızlı yapabildik.

Değişikliğe Yanıt Verme Şelale ortamında çalıştığımızda “Üzgünüm, şimdi bu değişikliği yapamayız deyip; Gereksinimler dondurulurdu. Bu durum Müşteriler için sinir bozucu olur. Ancak onlar da tüm gereksinimlerini belirleme konusunda mükemmel bir iş çıkarmadıklarını fark ettiler. İki haftalık çevik bir iterasyonda ise "Tamam, bunun için bir iş açıyoruz ve bir sonraki yineleme veya bir sonraki sürümde yapacağız” dememiz yetiyor. Böylece müşteriler istediklerinde değişikliklerini alabileceklerini biliyor ve öncelikleri kontrol ediyorlar. Değişime tepki vermek çevik uygulayıcılar için önemli bir değerdir, ancak bunun test için en zor konulardan biri olduğunu tespit ettik. İstikrarlı olmak işte ben bunu test ettim, çalışıyor demek ; “Sürekli değişen gereksinimler olduğunda testçinin kabusudur. Bununla birlikte, çevik test görevlileri olarak değişikliği kabul etmek zorundayız.

Appium v1.6.0 - iOS Otomasyon With XCUITest WebDriverAgentRunner

Sisteminizde Node(>3) ve Xcode(>8) kurulu olmalı. Ve ios (>10) için Appium 1.6 (latest release version) için ayarlamalar yapacağız.

Önce aşağıdaki komutları sırayla vereceğiz:

sudo npm install -g appium@1.6

Node

brew install node
node -v

XCode

https://itunes.apple.com/us/app/xcode/id497799835?mt=12

And then please enter the following console commands:

brew install ideviceinstaller
brew install carthage
sudo npm install -g ios-deploy
sudo npm install appium-doctor
npm install -g deviceconsole
gem install xcpretty
brew install libimobiledevice --HEAD - IOS 10
brew install libimobiledevice - IOS 9

Sonra bu path'e gidelim:

cd /usr/local/lib/node_modules/appium/node_modules/appium-xcuitest-driver/WebDriverAgent

Burada aşağıdaki komutu çalıştıralım:

sudo mkdir -p Resources/WebDriverAgent.bundle

Ekran Resmi 2017-05-21 15.45.10.png

Ve WebDriverAgent dizininde aşağıdaki komutu girelim: 

sudo sh ./Scripts/bootstrap.sh -d

WebDriverAgent.xcodeproj dosyasının Xcode'da açalım': 

Ekran Resmi 2017-05-21 15.48.46.png

Bu dizinin çalıştırma iznini değiştirelim:  appium-xcuitest-driver

cd /usr/local/lib/node_modules/appium/node_modules/
chmod -R 777 . appium-xcuitest-driver/*

Sonra da Xcode'daki WebDriverAgent.xcodeproj projesine dönelim WebDriverAgent Project için imza ayarlamalarını yapalım. Ekran Resmi 2017-05-21 16.00.08.png

İmza ile ilegili ayarlamalrı yaptıktan sonra Eclipse‘deki test projesine dönelim.

Burada Capability‘leri düzenlemeye ihtiyacımız var BaseTest içinde aşağıdaki gibi değişitirebilirsiniz..

Ekran Resmi 2017-05-21 16.09.26.png Buna ek olarak var olan projenizin Path'ini de bulup BaseTest için eklemeniz gerekmektedir. Benim Eclipse projemde örneğin:

capabilities.setCapability(MobileCapabilityType.APP, “/Users/kader.tarlan/Library/Developer/Xcode/DerivedData/BluTv-frejawjplldgkechkgwcmwjiljka/Build/Products/Debug-iphoneos/BluTv_iPad.app”);

Şimdi Appium'u terminalden çalıştıralım.

Ekran Resmi 2017-05-21 16.16.24.png

Testleri çalıştırmak için herşey yolunda!

Maven Ile Java Test Projesi Oluşturmak

 Junit Testi için : Eclipse'de geliştireceğimiz   
Maven Java Test Projesi için aşağıdaki komutu verelim:  
Konsolu açıp aşağıdaki komutu kopyalayalım:
mvn -B archetype:generate \
  -DarchetypeGroupId=org.apache.maven.archetypes \
  -DgroupId=com.sampleTest \
  -DartifactId=my-test

Ekran Resmi 2017-05-19 01.50.32.png

mvn archetype:generate bu komut projeyi oluşturur. Archetype: Bu ise benzer projeler oluşturmak için bir şablondur.

Maven Dizin Hiyerarşisi

|-- src
|   |-- main
|   |   `-- java
|   |       `-- com  
|   |           -- sampleTest
|   |             `-- App.java
|   `-- test
|       `-- java
|           `-- com
|              --  sampleTest
|                `-- AppTest.java
`-- pom.xml

pom.xml : Maven ile proje oluşturmak için kullanılan ve çeşitli konfigürasyonları içeren proje detayları hakkında bilgiler içeren bir dosyadır. Ekran Resmi 2017-05-19 01.58.03

Projeyi Eclipse IDE'ye dahil ettiğimiz zaman:

Ekran Resmi 2017-05-19 02.01.38.png

Herşey hazır şimdi Pom.xml içine gerekli olan bağımlılıkları siz test yazdıkça fark edip eklersiniz.
Ancak şimdilik Selenium testleri koşabilmek için aşağıdaki bağımlılıkları da Pom.xml içine ekleyelim.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
   <properties>
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
     <apache.poi.version>3.15</apache.poi.version>
     <commons.lang3.version>3.0</commons.lang3.version>
   </properties>

   <dependencies>
   <dependency>
     <groupId>org.seleniumhq.selenium</groupId>
     <artifactId>selenium-java</artifactId>
     <version>2.52.0</version>
   </dependency>
   <dependency>
      <groupId>org.apache.poi</groupId>
      <artifactId>poi-ooxml</artifactId>
      <version>${apache.poi.version}</version>
   </dependency>
   <dependency>
      <groupId>org.apache.commons</groupId>
      <artifactId>commons-lang3</artifactId>
      <version>${commons.lang3.version}</version>
</dependency>
</dependencies>

 Şimde test projemiz hazır!

Mobil Otomasyon Ve Cihaz Desteği

Mobil Otomasyon için Cihaz Desteği veren Toolar var. Kullandığım ve fikrim olan cihazlardan biraz bahsetmek istiyorum:

Appium

Appium açık kaynak kodlu, cross-platform test automation aracıdır. Native, hybrid ve mobile web uygulamalarını simulator (iOS, FirefoxOS), emulators (Android), veya real cihazlarda (iOS, Android, Windows, FirefoxOS) test etme imkanı sağlayan bir araç.

Appium avantajları:

  • Her iki platformda da kullanabilme iOS ve android için.
  • Sürekli entegrasyon desteği, jenkins, saucelabs kullanabilme
  • Kaynak kod veya kütüphanelerine erişimi gerektirmez. (Robotium istiyor mesela)
  • Çeşitli framework desteği.
  • Herhangi bir programlama dili destekler
  • Uygulamalarda hybris, native ve webapps çeşitliliklerini destekliyor
  • Bedava, açık kaynak
  • Simulator/emulator ve real device ile de çalışıyor
Dezavantajı:
  • Waitleri statik vermek gerekiyor, bu konuda iyi bir çözümleri yok
  • Dökümantasyon biraz eksik
  • Apple dünyasında Appium ile otomasyon testlerinde paralel çalıştırmada limit var
  • Mobil dünyadaki özellikle oyun uygulamaları için hareketlere (zoom, double tap) ihtiyaç var. Bu hareketler için Javascript koşmak lazım

Bulut Tabanlı Mobil Cihaz Desteği:

Bitbar Testdroid

Bitbar Public Cloud (Testdroid Cloud), Android ve IOS manuel ve otomasyon testleri için bulut tabanlı mobil cihaz desteği sağlıyor. Bir nevi cihaz desteği aslında. Burası test ortamlarının sağlandığı bir hizmet aslında. Mobil uygulamalar ve ilgili hizmetler için fonksiyonel, performans, stres, regresyon ve kararlılık testlerini otomatik hale getirir. Burada monitoring yapmak mümkün günün her saatinde.
Cihazları ise : https://cloud.testdroid.com/#public/devices

Sauce Labs

Bulut tabanlı olan Sauce Labs Android , IOS ve web uygulamaları için simulator, emilator ve gerçek cihaz desteği sağlıyor. Native, hibrit ve mobil web testlerini koşmak mümkün. Çeşitli işletim sistemleri ve browserlarla 800’den fazla platform sunuyor. Appium ve Seleniuum ile test edebilir ve testleri paralel olarak çalıştırabilir.

SauceLabs ve Testdroid Karşılaştırması:

  • Testdroid mobil yazılım geliştirme ve test için kullandığımız bir Bitbar Teknolojisidir.
    3 farklı ürünü var Testdroid Cloud, Testdroid Recorder ve Testdroid Enterprise. Testdroid GitHub üzerinde açık kaynak kodlu bir application programming interface aslında.
    • Testdroid ile çeşitli test frameworklerini kullanabilir, örneğin native için Robotium, Appium ve uiautomator veya web uygulamaları için Selenium , aslında bu platformun hedef kitlesi mobil veya oyun geliştiricileridir.
    • Gerçek Android ve iOS destekli cihazlar içerir bunun yanında bulut tabanlı test simulatorleri de sunuyor Testdroid Cloud ile.
    • Testdroid Recorder ise developer ve testerlar için user-actions kaydediyor, mobil uygulama ve oyunları üzerinde Junit tabanlı test caseler üretiyor, Eclipse marketplace var.
    • Testdroid Enterprise ise gerçek Android ve IOS cihazlar için otomasyon testlerinin yönetildiği bir server yazılımıdır, Jenkins Continuous Integration destekler.
  • Sauce Labs desktop, mobile web, native, ve hybrid uygulamaları test etmek için için düyadaki en geniş ölçekli güvenilir ve ölçeklenebilir cloud ortamını oluşturur.
    450’den fazla platform sunar.

Cross Browser Testing

Manuel ve otomasyon testleri ile fonksiyonel test ortamları sunar. Geliştiriciler için 1500'den fazla mobil cihazlar ve tarayıcı desteği. Burada browser testleri yapmak mümkün, mobil taraftada browser açıp testleri yürütüyor. Mobil App testleri yapmak için diğer toolara bakmak daha iyi. Test sonuçlarını video ve ekran görüntüleri kaydedilebilir. Selenyum, Appium ve diğer testler CrossBrowserTesting uzaktan cihazlarda çalıştırabiliriz. Güvenlik duvarı (firewall) test etmek istiyorsanız, CrossBrowserTesting kullanıcılar için Chrome uzantısı veya Node.js tünel bulunmaktadır.

Desteklenen Tarayıcılar: Internet Explorer, Mozilla Firefox, Apple Safari, Google Chrome, Opera, Netscape ve daha birçok…

Desteklenen İşletim Sistemi: Windows 98, Windows 2000, Windows XP, Windows Vista, 6, 5, Mac OS X 10.3–10.5, Fedora Core 6, O BlackBerry, BlackBerry OS, Apple iOS, Google Android, Windows Mobile 5.0 (RQVGA), Windows Mobile 6.0, Windows Mobile Professional 6.5

Browserları: https://crossbrowsertesting.com/browsers

Mobil Beta Testleri için:

Ubertesters -Ubertesters kullanıcı deneyimini analiz etme, hata raporlama, kullanıcı testi ortamları sağlar. Development lifecycle yönetebilmek için hataları yakalama ve izlemeye yarar. Ubertesters ile mobil beta testleri yapmak, ekran görüntüleri ile video kayıtları ile takip etmeyi sağlar. Hataları raporlar. Ubertester native ve cross-platform development destekler.

TestFairy - TestFairy mobil uygulamaları için beta test platformudur, yapılan her test videoya çekilir. Mobil uygulamaları test ederken bir sorun varsa tam olarak istemci tarafında neyin yanlış gittiğini asla bilemezsin. TestFairy CPU, Bellek, GPS, Ağ ve çok daha fazla fazlası dahil olmak üzere tam bir deneme videosu sağlayarak bu sorunu çözer.

Fonksiyonel Test

Sencha Mobil ve web uygulamaları için fonksiyonel test sunar. Sencha Test mobil tarayıcılarda gerçek cihazlarda kullanılabilen benzersiz bir URL oluşturmak için bir proxy mekanizması kullanır. Testler JavaScript ile yazılabilir. Unit testleri otomatize etme ve end-to-end functional test için kapsamlı çözümler üretir, birden fazla tarayıcılarda aynı anda yürütebilirsiniz

Bugsee Otomasyon ile çok ilgisi yok aslında, https://www.bugsee.com Bugsee monitoring ve sistem durumunu kayıtları sağlar, geliştiriciler için hata takibi yapmak, gönderilen hata bilgileri ile hata raporları sunan, bulut tabanlı bir araçtır. iOS veya Android uygulamaları için hata ayıklama desteği.

Test Otomasyonu Için Maliyeti Azaltan Yöntemler

Yazılım otomasyon testlerinin büyük amacı manuel testlerle çok vakit kaybetmeden zamandan ve paradan kazanç sağlayabilmek işi otomotize etmek isterken yazılım otomasyonlarındaki yapılan bazı hatalardan dolayı buradaki zaman ve maliyet artmakta.

Yazılım otomasyon testleri yaparken otomasyon testlerinin maliyetini dusurebilecek durumlardan bahsedersek;

  • Maliyeti azaltmak için düşük değerlikli özelliklerin test edilmesi ile stabil diyeceğimiz durumların test edilmesi durumlarını çıkartmalıyız. Bunları test etmenin bir anlamı olmayacak. Burada neyi test etmemiz gerekiyor bunun analizi iyi çıkarılmalı. Bakım maliyeti yapacak gereksiz adımları çıkarırsak daha kritik noktalar üzerinde testi koşturmak gereksiz maliyeti önlemiş olacaktır. Bu tarz ufak kritik olmayan noktaların otomasyonunu gerçeklemeyin.
  • Testinizi birden fazla tarayıcı da birden fazla işletim sisteminde uygulamanız gerekecek. Ama gerçekten tüm işletim sistemlerine ve tüm tarayıcılara ihtiyacımız var mı ? Bunun analizini yaparsak maliyetimiz biraz daha azalır. Şöyle ki mevcut sistemlerde tarayıcıların kullanım oranlarına göre bir eleme yapabilirsiniz.
  • Karmaşık test senaryolarını önleyiniz. Burada basitliğe ve esnekliğe odaklanmalıyız. Ancak karmaşık data-driven senaryolar oluşturacaksınız elbette bu karmaşık davranmak anlamına gelmez. Hünerli test kodu yazmak ile anlamsız parçaları birleştirip bir karmaşa oluşturmak arasındaki fark aslında. iç içe koşullardan kaçının testi okumak ve hata ayıklamak daha da zorlaşır. Tek bir testte bir çok adımı bir arada yapmaktan kaçının. Karmaşıklık sadece test değil tüm sistem için ek bir maliyete sebep olacaktır.
  • Web sayfasındaki html elemanlarının bulunmasını sağlamak önemli. Çünkü patlayan testlerin çoğunluğu aslında bu elemanların bulunmayışından dolayıdır. Takımdaki web sayfamızı kodlayan arkadaşların bu idlerin bulunabilme ihtimallerini yukseltmeleri test maliyeti etkileyecektir.
  • Sistemdeki asenkron hareketleri bilmeye ihtiyacımız var. Asenkron hareket eden test komutları için herhangi bir değişiklik bunları etkileyecektir. Yazdığınız tüm test kodları küçük bir geliştirmede bile etkileneceğinden testleri buna dikkat ederek yazarsanız testlerin çalışmasını etkilememiş olursunuz. Veya takibinin iyi yapılıp yazılan test kodları hasar görmeyecek şekilde düzeltmeler ile maliyete gene sahip çıkarız.

Özetle Yazılım Test Otomasyon

Otomasyon, test kapsamının arttırılmasını, manuel test yükünün azaltılmasını sağladığımız bir metodolojidir aslında. Otomasyon yazmalı mıyız, buna ihtiyacımız var mı sorularının cevabı için projenizin durumu önemli.Her defasında tekrar ettiğimiz test adımlarını otomatize edip iş yükünü azaltmak bir yöntemken, sürekli geliştirip bozup yeniden kurduğunuz bir tasarım içinde sürekli otomasyon testlerinin revize edilmesi ile de başka bir yük getirmek çok mantıklı olmaz. Daha çok gün yüzüne çıkmış, bir sistem oturtulup stabil olduğumuz projelerimizde otomasyon daha doğru bir karar. Tabiki değişiklikler olacak ama tüm sayfaların, butonların, idl’erin değiştiği bir karmaşa halindeki değişiklikler değil kastımız.

Tasarımı oturmuş projemizde manuel testlerin azaltılması için otomasyon yazmanın yanında, otomasyonun getirdiği bir diğer güzellikler pek çok farklı platformda aynı testlerin çalıştırılmasının sağlanılması , bir testi 4 farklı makinada ve her makinanın 3 farklı platformunda deneme 12 iş yükü iken otomasyon testlerinin paralel aynı işi aynı anda yapıyor olmasının getirdiği maliyet ve zaman kazancını tahmin edebiliriz. Bu ihtiyacımız yalnızca web tarafında değil mobil tarafta da cihaz değişikliği ihityaçlarımızda otomasyon sorunu çözecektir. Bir çok farklı sürümdeki android cihaz çeşitliliğinin farkındayız bütün bu cihazları tedarik etmek de oldukça maliyetliyken, yazılım test scriptlerinizi cloud yöntemlerle cihaz desteği sunan toolara üye olarak koşmak mümkün. Böylece bir çok mobil cihazda da mobil app’lerin testlerini gerçekleştirmiş oluncak.

Herşeyde imdadımıza otomasyon testleri koşacak diye de bir durum yok aslında, proje ve kaynaklara göre bunun ayrımının yapılması gerekir. Doğru zamanda doğru ihtiyacı yakalarsak test anlamındaki sistemi de oturtmuş oluruz.

Otomasyon testlerinin yapamadığı manuel testlere ihtiyacımız olan durumlarda olcak, kodlarımız da birim testlere deihtiyacımız olcak.

Projenin her adımında teste ihtyacımız olduğunu ve doğru test adımları ile çok daha kaliteli işler çıkacağını göreceğiz.

Bol testli günler :)

Appium Kurulumu

Appium kurulumu kullanımı :

  • İlk olarak Eclipse kurulu değil ise Eclipse IDE‘yi indiriyoruz kullandığınız platforma göre linkten bulabilirsiniz.
    -> http://www.eclipse.org/downloads/
  • Ayrıca JDK indirmeniz gerekiyor. Bunun için de aşağıdaki linkten, işletim sisteminizi seçip anlaşmayı onayladıktan sonra indirebilirsiniz.
    -> JDK
  • JDKʼ ʼyı indirip kurun. Yükleme bitince Eclipseʼyi açın.
  • Android SDK indireceğiz.Bunun için aşağıdaki linkten indirme işlemini yapıyoruz.
    -> SDK
  • İndirdikten sonra çift tıklayıp kuralım. Eclipse dosyasının içine kurabilirsiniz. Yükleme bitince SDK Manager programı açılacaktır. Burada yüklemek istediğimiz Android sürümlerini seçerek kurulumunu sağlayabilirsiniz.
  • Şimdi Eclipseʼyi açın ve yukarıdaki menüden Help-Install > New Software seçeneğine gelin.
    Location kısmına: https://dl-ssl.google.com/android/eclipse/ adresini girin. ADT (Android Development Tools) için gelen verileri seçerek indirilmesini sağlayın.
  • Son olarak Eclipse içerisinde Window-Preferences ve soldaki Android kısmına tıklıyoruz. Buradaki SDK Location bölümüne Android SDKʼyı nereye kurduysak onu işaretliyoruz.
  • Kurulum işlemlerimiz tamam. Android Tools indirirken Android DDMSʼde inmiş oldu. Bu bizim Android testlerimiz için mobil cihazın ekran görüntüsü almamızı sağlayacak.

    Şimdi Appium kuralım. Link: Appium buradan Appium versiyonunu projenize uygun şekilde seçmelisiniz. Ben Android 5 ve 6 sürümlerinde ayrıca ios 9 sürümünde test yapabilmek için 1.4.13 indirdim. IOS 10 için 1.6 beta sürümünü eklemek lazım. Mac bilgisayarlar için kurulumu oldukça basit indirdiğiniz dosyanın üzerine gelerek kurulumu gerçekleştiriniz. appium.jpeg.

    Burada localde bir android telefonu bilgisayarınıza bağlayıp resimde görüldüğü gibi Android iconuna tıklayıp Launch ettiğinizde status 200 alcaksınız başarılı bağlanma sonunda. appium2

    Kurulumlar tamamlandıktan sonra bir test eclipse üzerinde çalıştırmaya çalıştığımızda:
    Could not find adb. Please set the ANDROID_HOME environment variable with the Android SDK root directory path.
    Gibi bir hatamız olursa;

    vi ~/.bash_profile girip

    export ANDROID_HOME=/Applications/Android

    export PATH=$ANDROID_HOME/platform-tools:$PATH export PATH=$ANDROID_HOME/tools:$PATH

    Bunları yazmak gerekiyor dosyaya.

    Özetle Tüm Kurulumlar:

Python Ile Birim Testler

Merhaba uzun süredir uğraştığım test alanı ile ilgili faydalı bilgiler aktarabilmek adına Python ile birim testleri nasıl yazıyoruz ondan bahsedeceğim bu yazımda.

LibreOffice projesinin kaynak koduna Python ile birim testler yazdım. Oraya yazdığım ve kaynak koduna kabul ettirdiğim testlerden birini örnek vererek anlatacağım.

Öncelikle LibreOffice test yazacaksanız yazdığınız kodun en başına bir lisans bildirimi ekliyorsunuz. Yazdığım dosya LibreOffice aittir, belirtilen lisans doğrultusunda yazıyorum gibi.

LibreOffice geliştirdiği Uno modüllerinden testinizde hangilerini kullanacaksanız onları test dosyasına dahil ediyoruz.
from com.sun.star.text import XTextDocument from org.libreoffice.unotest import UnoInProcess

1
2
3
4
5
6
7
8
9
10
11
12
class CheckFlies(unittest.TestCase):

    @classmethod
    def setUpClass(cls):
        cls._uno = UnoInProcess()
        cls._uno.setUp()
        cls.document = cls._uno.openWriterTemplateDoc("CheckFlies.odt")


    @classmethod
    def tearDownClass(cls):
        cls._uno.tearDown()

Python ile yazılan tüm birim testlerimizin class parametresi unittest.TestCase şeklinde olmalı.

Testler için SetUpClass ve tearDownClass sınıf metotlarımız olması gereken metotlardır. SetUpClass metodumuz testler daha başlamadan hazırlanmasını istediğimiz adımları yazdığımız kısımdır. Burada LibreOffice için dökümanları açtığımız, oluşturduğumuz yer de oluyor aynı zamanda. İşlem yapılacak belgemizi öncesinde hazır hale getiriyoruz. tearDownClass metodu ise testler bittikten sonra çalıştırılmasını istediğimiz adımları yazdığımız yerdir. Örneğin açılan dosyamızın kapatılma işlemi burada gerçekleşiyor.

Testlerin başlangıç fonksiyonu “test” deyimi ile başlamalı. Eğer bunu yazmazsak o test aslında hiç çalışmamış olur. Fonksiyonların başına test yazmadığınız zaman çağırmadığınız sürece çalıştırılmayacak fonksiyonlar olur onlar. Ancak “test” yazan her fonksiyonu siz çağırmak zorunda değilsiniz siz testleri çalıştırdığınızda o fonksiyonlarda otomatikmen çağrılırlar. Benim örneğimdeki fonksiyonumuzda “def test_checkFlies(self):” deyimi yer almakta.

Testlerde kullanılan diğer herşey kulandığınız dilin marifetleri ile şekillenecektir. Değindiğim noktalarla iskeleti oluşturduktan sonra Python dilinde yapmak istediğim şeyleri yazdım.

Kullandığım diğer önemli yapı testlerin hepsinde olan Assert adımlarıdır. AssertEqual ile verilen iki parametre arasında eşitliği kontrol edip AssertTrue ile doğruluğunun sağlandığını ölçüp AssertFail ile hata mesajı dönebilirsiniz. Assertion adımları testi test yapan adımlar. Eğer testinizde kontrol adımlarınız yoksa birşeyi test etmiş olmazsınız. Assert çok çeşitlidir, örneğin kullanmanız gereken duruma göre aşağıdakilerden birini seçebilirsiniz:

| ———– | ———– |
| assertEqual(a, b) | a == b |
| assertNotEqual(a, b) | a != b |
| assertTrue(x) | bool(x) is True |
| assertFalse(x) | bool(x) is False |
| assertIs(a, b) | a is b |
| assertIsNot(a, b) | a is not b |
| assertIsNone(x) | x is None |
| assertIsNotNone(x) | x is not None |
| assertIn(a, b) | a in b s |
| assertNotIn(a, b) | a not in b |
| assertIsInstance(a, b) | isinstance(a, b) |
| assertGreater(a, b) | a > b |
| assertGreaterEqual(a, b ) | a >= b |
| assertLess(a, b) | a < b |
| assertLessEqual(a, b) | a <= b |

Bahsini ettiğim testi de paylaşacağım. Testin üzerinden anlattıklarıma tekrar bakarsanız daha kalıcı olacağını düşünüyorum. Kolay gelsin.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
'''
  This is file is part of the LibreOffice project.

  This Source Code Form is subject to the terms of the Mozilla Public
  License, v. 2.0. If a copy of the MPL was not distributed with this
  file, You can obtain one at http://mozilla.org/MPL/2.0/.

  This file incorporates work covered by the following license notice:

    Licensed to the Apache Software Foundation (ASF) under one or more
    contributor license agreements. See the NOTICE file distributed
    with this work for additional information regarding copyright
    ownership. The ASF licenses this file to you under the Apache
    License, Version 2.0 (the "License"); you may not use this file
    except in compliance with the License. You may obtain a copy of
    the License at http://www.apache.org/licenses/LICENSE-2.0 .
'''

from com.sun.star.lang import XMultiServiceFactory
from com.sun.star.text import XTextDocument
from com.sun.star.text import XTextFramesSupplier
from com.sun.star.text import XTextGraphicObjectsSupplier
from com.sun.star.text import XTextEmbeddedObjectsSupplier
from com.sun.star.container import XNameAccess
from com.sun.star.container import NoSuchElementException
from com.sun.star.container import XIndexAccess
from org.libreoffice.unotest import UnoInProcess
import unittest
import unohelper
import os

class CheckFlies(unittest.TestCase):

    @classmethod
    def setUpClass(cls):
        cls._uno = UnoInProcess()
        cls._uno.setUp()
        cls.document = cls._uno.openWriterTemplateDoc("CheckFlies.odt")


    @classmethod
    def tearDownClass(cls):
        cls._uno.tearDown()

    def test_checkFlies(self):
        xTFS = self.__class__.document
        self.checkTextFrames(xTFS)
        xTGOS = self.__class__.document
        self.checkGraphicFrames(xTGOS)
        xTEOS = self.__class__.document
        self.checkEmbeddedFrames(xTEOS)

    def checkEmbeddedFrames(self, xTGOS):
        vExpectedEmbeddedFrames = ["Object1"]
        nEmbeddedFrames = len(vExpectedEmbeddedFrames)
        xEmbeddedFrames = xTGOS.getEmbeddedObjects()
        nCurrentFrameIdx=0

        print (xEmbeddedFrames)
        for sFrameName in xEmbeddedFrames.getElementNames():
            vExpectedEmbeddedFrames.remove(sFrameName)
                # raises ValueError if not found
            print (sFrameName)
            xEmbeddedFrames.getByName(sFrameName)
            self.assertTrue(xEmbeddedFrames.hasByName(sFrameName), "Could not find embedded frame by name.")

        self.assertTrue(not(vExpectedEmbeddedFrames), "Missing expected embedded frames.")

        xEmbeddedFramesIdx = xEmbeddedFrames

        self.assertEqual(nEmbeddedFrames, xEmbeddedFramesIdx.getCount()) #Unexpected number of embedded frames reported

        for nCurrentFrameIdx in range(xEmbeddedFramesIdx.getCount()):
            xEmbeddedFramesIdx.getByIndex(nCurrentFrameIdx)

    def checkGraphicFrames(self, xTGOS):
        vExpectedGraphicFrames = ["graphics1"]
        nGraphicFrames = len(vExpectedGraphicFrames)
        xGraphicFrames = xTGOS.getGraphicObjects()
        nCurrentFrameIdx = 0
        for sFrameName in xGraphicFrames.getElementNames():
            vExpectedGraphicFrames.remove(sFrameName)
                # raises ValueError if not found
            xGraphicFrames.getByName(sFrameName)
            self.assertTrue(
                xGraphicFrames.hasByName(sFrameName),
                "Could not find graphics frame by name.")
        self.assertTrue(
            not(vExpectedGraphicFrames),
            "Missing expected graphics frames.")

        xGraphicFramesIdx = xGraphicFrames
        self.assertEqual(nGraphicFrames,xGraphicFramesIdx.getCount()) #Unexpected number of graphics frames reported

        for nCurrentFrameIdx in range(xGraphicFramesIdx.getCount()):
            xGraphicFramesIdx.getByIndex(nCurrentFrameIdx);

    def checkTextFrames(self, xTFS):
        vExpectedTextFrames= ["Frame1" , "Frame2"]
        nTextFrames = len(vExpectedTextFrames)
        xTextFrames = xTFS.getTextFrames()
        nCurrentFrameIdx=0

        for sFrameName in xTextFrames.getElementNames():
            vExpectedTextFrames.remove(sFrameName)
                # raises ValueError if not found
            xTextFrames.getByName(sFrameName)
            self.assertTrue(
                xTextFrames.hasByName(sFrameName),
                "Could not find text frame by name.")

        self.assertTrue(
            not(vExpectedTextFrames), "Missing expected text frames.")

        xTextFramesIdx = xTextFrames

        self.assertEqual(nTextFrames, xTextFrames.getCount()) #Unexpected number of text frames reported

        for nCurrentFrameIdx in range(xTextFramesIdx.getCount()):
            xTextFramesIdx.getByIndex(nCurrentFrameIdx)

if __name__ == "__main__":
    unittest.main()

GDG DevFest - LibreOffice Katkı Süreci

Merhaba bu yıl GDG DevFest Istanbul-2015 etkinliğine ekip olarak katılıp LibreOffice Katkı Süreci ve Deneyimlerimizden bahsettik.

Ben de etkinlikte konuşmacıydım ve test alanında yaptığım katkılardan bahsettim. Neleri anlatmış ve yapmışım tekrar bakmak isteyenler için bloğuma da eklemek istedim umarım faydalı olur.

Test bir sistemin en küçük parçalarına kadar yapması gereken görevleri gerçekleştirip gerçekleştirmediğinin kontrolünün yapılması işlemidir.

YAZILIM YAŞAM DÖNGÜSÜ

Yazılım geliştirme döngüsünde denetleme, yönetilme, ölçülebilme en önemli aşamalarımız.

Yazılım parçalarını bu yaşam döngüsünde test ederek, geliştirmenin sonraki aşamalarını daha az hata ile ilerletmek istiyoruz. Bir bileşende yapılan değşişiklik diğer bileşenleri nasıl etkiledi bunu öğrenmek yazdığımız kodun kalitesini ölçmek önemli.

Yazılımın farklı platformalarda başarılı şekilde çalıştı mı beklenilen sağlandı mı? Bunlar sağlandı diyelim peki yazılan kod yük testlerinin altında da aynı şekilde çalıştı mı? 10 kullanıcı 100 kullanıcı 1000 kullanıcı son durum nedir?

Kullanıcı Arayüzü(UI) Testi nedir?

UI, aslında arayüz tasarımıdır.

Bilgisayarımızın tuşları bir arayüz tasarımı örneğidir. Tuşların yerleri, büyüklüğü, renkleri tasarımcının isteği doğrultusunda oluşur. Arayüz tasarımının internet dünyasındaki karşılığı ise butonlar, renkler, boşluklar gibi görsel tasarımlardır.

UI(User Interface) Test , bu testler kodlanmış olan kullanıcı arayüzünün daha iyi şekilde, efektif, sorunsuz çalışmasının kontrolünü sağlayacak testlerdir. UI Test bir arayüz testidir.

Manul test nedir?

Kullanıcılar tarafından yazılımın test edilmesi işlemidir. Test işlemi Yazılım Test Araçları olmadan tamamen insanlar tarafından yapılır.

BugHunting LibreOffice sürüm öncesi ortaya çıkacak ürünün kalitesini ölçmek amacıyla tüm geliştirici ekibinde içinde bulunduğu belirli zaman dilimleri içerisinde hata yakalama etkinliği düzenliyor. Böylece manuel testler ile ürün düzgün çalışıyor mu, bir hata var mı, test edilmiş oluyor.

Hata bulunduysa Bugzilla dediğimiz LibreOffice hata depolama aracına hatalarımızı raporluyoruz ve kontrolünü sağlıyoruz.

Burada işin içine kullanıcı arayüzü için oluşturulmuş test durumları giriyor.

Test durumları gereksinimlere göre hazırladığımız, istenilen aksiyonları belirten ve bunları uyguladıktan sonra oluşmasını beklediğimiz sonuçları da belirttiğimiz belgelerdir.

Test eden kişi hata aramak isterken bunu nasıl yapmalı? Bunun için şöyle düşünelim bir geliştirme yapıldı ve istenilen iki sayıyı topladık ve sonucu da bize ikilik tabana çevirip versin.

Test edecek kişiye; iki sayı girmesini, bunları toplamasını ve sonucun ikilik tabanda doğru şekilde geldi mi diye kontrolünü yapmasını isteyeceksiniz. Test durum belgelerimiz bu aşamaları anlatan rotamız olacak burada. Bir çok test durum belgesini depolayabildiğimiz bir araç geliyor gündeme, Moztrap.

Moztrap nedir?

Bu tip büyük yazılımların özelliklerinin test edilmesi için farklı araçlar kullanılıyor. LibreOffice de bunun için Moztrap aracını kullanıyor. Moztrap, LibreOffice projesinde önemli bir araçtır.

Moztrap, açık kaynak dağıtılmış, test durum yönetim sistemidir. Kullanıcı arayüzü(UI) testlerinin tutulduğu bir platformdur. Bir çok manuel testi depoladığımız ve bunları çalıştırabildiğimiz bir ortam sunar.

LibreOffice projesi bu aracı kullarak kalitesini daha da artırmayı amaçlar. Moztrap, yazılan test durumlarının her adımını çalıştırıp bu adımlar için Passed, Failed, Invalidated sonuçları ile raporlama yapar.

Libreoffice manuel testlerini nasıl oluşturuyor?

LibreOffice test mühendisleri Moztrap aracına test durum adımlarını yazıyorlar. Istenilen işletim sistemi üzerinde istenilen LibreOffice sürümü işaretlenerek hazırlanıyor bu belgeler.

Beklenilen adımlar yazıldıktan sonra bileşenin çalışmasını kontrol edebilmek için testimizi de anlamlı hale getirmek için Verify adımları ile beklenilen sonuçlar yazılır. Buradan yola çıkarak test gerçekler, beklenilen sağlanırsa Passed, sağlanmaz ise Failed,cevapları ile test durumunu incelenir.

Automated UI Tests Nedir ?

Automated UI test bahsettiğimiz UI arayüz testlerinin otomatik hale getirilmesidir. Kodlanmış arayüzü testidir.

Otomasyon testlerin LibreOffice için önemi nedir?

Birçok kullanıcı tarafından geliştirilen bu büyük projede herhangi bir kullanıcının yazdığı bir bileşen başka bir kodu tetikliyor olabilir. Bunu tek tek elle deneyip görmek çok zor bir iş. Bu yüzden LibreOffice için yazılan otomasyon testleri var siz bir bileşen geliştirdiğinizde ve bunu yüklediğinizde kodunuz öncelikle bu testlerden geçirilmeye çalışılıyor. Kodunuz testlerden geçemezse size hata mesajı dönüyor. Testten geçemeyen bir kod LibreOffice için geçerli değildir.

Unit Test nedir?

Unit test yaparken temel amaç yazdığınız kodun her satırının başka bir kod tarafından otomatik olarak test edilmesidir. Unit Test kodları yalnızca çalışması beklenen durumlar için değil var olan metodun vereceği hataları da test eder.

Unit testlerin LibreOffice için önemi nedir?

LibreOffice projesi için hataların erken bulunup düzeltilebilmesi açısından bu sürecin en önemli aşamasını oluşturuyor.
Projeye eklenen her kod parçası için testler çalıştırılır. Bu sayede projede gözü kapalı değişiklik yapmak mümkün olabiliyor. Var olacak bir hatadan haberiniz olacak. Bunun anlamı sorun çok daha büyümeden ya da tasarımın içerisine girmeden sorunu çözmek demektir.

DevFest konuşmamızı yayınlamışlar. 16. dakikadan sonra anlattıklarımı sesli olarak da dinleyebilirsiniz. Kolay gelsin :)

IMAGE ALT TEXT HERE

LibreOffice Için Test Yazmak

Merhaba Arkadaşlar, bu yıl Necdet Yücel hocamızın öncülüğü ile ÇOMÜ'den 10 kişilik bir ekiple LibreOffice için katkı sağlamaktayız. Ben de LibreOffice için Unit Testler yazma, Kullanıcı Arayüzü Testlerini oluşturma ve Otomasyon Testleri yazarak katkıcılar listesinde ve test ekibinde yer almaktayım. Bu aşamada yaptığım işleri blogumda paylaşarak sizleri de bilgilendirmeyi amaçlıyorum.

LibreOffice Özgür ve Açık Kaynaklı Ofis yazılımıdır. LibreOffice aşağıdaki bileşenleri içerir:
Writer; kelime işlemci,
Calc; hesap tablosu uygulaması ,
Impress; sunu,
Draw; çizim ve akış şeması uygulaması,
Base; veritabanı ve veritabanı ön ucu
Math matematik yazılımı

UI(User Interface) Test , bu testler kodlanmış kullanıcı arayüzünün daha iyi şekilde, efektif, sorunsuz çalışmasının kontrolünü sağlayacak testlerdir.UI Test bir arayüz testidir.
Automated UI test ise bu testlerin otomatik hale getirilmesidir.

Bu tip büyük yazılımların özelliklerinin test edilmesi için farklı araçlar kullanılıyor. LibreOffice de bunun için Moztrap aracını kullanıyor. Moztrap LibreOffice projesinde önemli bir araçtır. Moztrap, açık kaynak dağıtılmış, test durum yönetim sistemidir. Kullanıcı arayüzü(UI) testlerinin tutulduğu bir platformdur. Bir çok manuel testi depoladığımız ve bunları çalıştırabildiğimiz bir ortam sunar .

LibreOffice projesi bu aracı kullarak kalitesini daha da artırmayı amaçlar. Moztrap, yazılan test durumlarının depoladığımız ve çalıştırma sonucunda aldığımız çıktıları dökümante edebileceğimiz bir web sitesi. Testi belirlediğimiz bir sürüm için belirlediğimiz işletim sistemi özelliklerinde manuel olarak uyguluyoruz. Önceden yazılmış bu test adımları bu sürüm için çalışıyor mu? Hangi adım bu sürümde hata verdi bu durumları da Passed, Failed, Invalidated sonuçları ile raporlama yapar.

Ben de LibreOffice için Moztrapta Kullanıcı Arayüzü(UI) testleri oluşturdum. Nasıl test case yazılır anlatımını başka bir blogumda paylaşmıştım buradan inceleyebilirsiniz. LibreOffice için yazdığım test durumlarını buradan inceleyebilirsiniz. Testleri okumanıza yardımcı olabilmek için ben de bir örnek üzerinden anlatayım istiyorum.

Aşağıdaki test “Making Text Superscript or Subscript” adı ile yazdığım bir test LibreOffice için yazılan test caselerin içinde bulabilirsiniz.

1
2
3
4
5
6
7
8
9
10
11
12
Open a new Writer document
Fill in the document with characters (example: 12Mg2+)
Select the characters that you want to put in subscript (Select 12 for 12Mg2+)
Choose "Format" menu bar. And then Select "Character"
Click the "Position" tab.
Select the "Subscript" option for position. And then Click OK
  -Verify that the subscript for the selected character (here this character 12)
Select the characters that you want to put in Superscript (Select 2+ for 12Mg2+)
Choose "Format" menu bar. And then Select "Character"
Click the "Position" tab.
Select the "Superscript" option for position. And then Click OK
  -Verify that the superscript for the selected character (here this character 2+)

12Mg2+→ 12Mg2+ → 12Mg2+

Testi incelediğinizde görüyorsunuz ki aslında anlaşılması oldukça basit. Libreoffice Writer dökümanına örnek olarak yazılan “12Mg2+ “ değerindeki “12” değerini subcsript “2+” değerini ise superscript yapabilmek amaçlanıyor.

Writer bu işi düzgün yapabildi mi? Subscript ve Superscript özellikleri doğru çalışıyor mu? Beklediğimiz sonuç geldi mi? Herhangi başka bir gelişme bizim bu özelliklerimizi bozmuş olabilir ve burası efektif şekilde çalışmıyor olabilir. Bu özelliği farklı işletim sistemlerinde de çalışmasını kontrol etmek mümkün. Testin yapıldığı platformu seçip testi uyguladıktan sonra sonuçlarını not ediyoruz. Özellik çalışmıyorsa test Fail! verecek ve biz bunu Moztrap dökğmanına Fail! olarak bildireceğiz. Böylece hangi özellikler hala bu sürümde düzgün çalışıyor, hangileri hata veriyor bilgileneceğiz.

Testin çalışmasını kontrol edebilmek için Verify adımları ile beklenilen sonuç yazılmıştır. Buradan yola çıkarak test gerçekler, beklenilen sağlanırsa Passed, sağlanmaz ise Failed cevapları ile test durumunu bildirmek mümkün.

Bu şekilde test durumu nedir, nasıl yazılır biraz olsun fikriniz olduğunu düşünüyorum. Sonraki blog yazılarımda LibreOffice için oluşturduğum Unit Test ve Otomasyon testlerinden de bahsedeceğim. Kolay gelsin.