Sunday, September 28, 2014

Ranorex Test Otomasyon Aracı

Ranorex isimli fonksiyonel test otomasyon aracını ancak deneme fırsatı bulabildim. Toplamda şimdilik 2 gün bakabildim.

Kullanımı kolay sayılır, açıkçası benim çok hoşuma gitti.

Windows tabanlı uygulamaların yanında plugin desteği sayesinde Java'dan SAP'ye kadar pek çok uygulamanın arayüzündeki nesneleri yakalama yeteneğine sahip. Ayrıca Web ve Mobil teknolojilerin fonksiyonel test otomasyonunda da kullanılıyormuş; bu ikisine henüz bakamadım.

Test durumlarının oluşturulması, yönetimi, yeni test / adım eklenmesi oldukça kolay. Ancak GIS uygulamalarını Ranorex de yakalayamıyor (Rational Functional Tester da yakalayamıyordu).
Çünkü bu GIS uygulamaları "render" edilen uygulamalar. Bu tür test araçları da "render" edilen veya 3-boyutlu olan uygulamaları şimdilik yakalayamıyor.

Onun dışında genelde nesnelerin hepsini yakaladı ve başarılı testler oluşturabildim. Yaşadığım 2 küçük sayılabilecek sıkıntı;
 - Java'da JPanel container 'ı tek bir nesne olarak yakalıyor, içindeki metinleri satır satır yakalamıyor,
 - Windows command ekranını tek bir nesne olarak yakalıyor, içindeki metinleri satır satır yakalamıyor,

Böylece doğrulamayı "imaj"lar ile yapmak durumunda kaldım; çok büyük sıkıntı değil.

Oldukça fazla yeteneği var ürünün, keşfettikçe buraya yazarım.

Ranorex'in 30 günlük deneme sürümünü web sitesinden indirebilirsiniz. Eğitim videoları da var, onları izlemenizi de tavsiye ederim.

Web Sitesi = http://www.ranorex.com/

Youtube'da da birkaç video var: Ranorex Tanıtım Videoları

Thursday, September 25, 2014

Test Mühendisi Olarak İş Görüşmesinde Sorulabilecek Sorular

Başvuru yaptığınız iş hakkında ne kadar detaylı bilgi sahibi olursanız, hem firma hem de siz daha iyi bir seçim yapabilirsiniz.
Bana göre sorulması gereken soruları aşağıda listeledim. Hepsini sormak ve/veya cevap almak mümkün olmayabilir... :)
  1. Benden beklentiniz tam olarak nedir?
  2. Kaçar senedir bu firmada çalışıyorsunuz?
  3. Bu firmayı 3 kelime ile nasıl anlatırsınız?
  4. Bu pozisyona neden ihtiyaç duyuldu? Daha önce biri çalışıyordu da işten mi ayrıldı, yoksa yeni bir proje sebebiyle ihtiyaç mı doğdu? Ayrıldı ise neden ayrıldığını biliyor musunuz?
  5. Projelerin / ürünlerin geliştirilme süreleri en az / en çok kaç ay?
  6. Test mühendisi olarak kaç kişi çalışıyor?
  7. Hangi test mühendisliği pozisyonları var?
  8. Test mühendisleri hiyerarşide kimlere bağlı?
  9. Eğer proje yöneticisine bağlı ise test mühendislerinin bağımsızlığını nasıl garanti ediyorsunuz?
  10. Hangi seviyelerde test yapıyorsunuz? 
  11. Bağımsız test ortamınız var mı?
  12. Test süreçleriniz hangi standartlarla uyumlu?
  13. Test otomasyonunu hangi seviyede yapıyorsunuz? Neler yapıyorsunuz? Beklentiniz ne?
  14. Performans, Güvenilirlik, Uyumluluk, Güvenlik, vesaire testlerden kaç kişi sorumlu?
  15. Dokümante edilmiş süreçleriniz var mı?
  16. Analiz ve tasarımı kimler yapıyor? Ne tip bir kontrolden geçiyor?
  17. Analizde ne tip sorular soruyorsunuz?
  18. Müşteri tarafında analiz ve tasarım sonuçlarını yorumlayacak kimse yoksa, ne yapıyorsunuz?
  19. Kullanıcı ortamına ilk ne zaman ve sonrasında hangi sıklıkla yayımlama yapıyorsunuz?
  20. Her bir yayımdaki değişiklikleri müşteri ile nasıl koordine ediyorsunuz?
  21. Eğitimleri kim / nasıl veriyor? Ne tür materyal kullanıyor?
  22. Projeler / ürünler hangi teknolojiler ile geliştiriliyor?
  23. Ar-Ge mi Taahhüt mü Ürün-temelli mi çalışıyorsunuz?
  24. Feature Developer’lar müşteri ile hangi aşamalarda görüşüyor?
  25. Müşteri istekleri ve şikayetleri ile kim yüzleşiyor?
  26. Konfigürasyon Yönetimi hangi aşamalarda devreye giriyor? Kaç kişi çalışıyor?
  27. Kalite Güvence hangi aşamalarda devreye giriyor? Kaç kişi çalışıyor?
  28. Çalışana bağımlılığını nasıl en aza indirgiyorsunuz?
  29. Fazla mesai yapıyor musunuz? Ne sıklıkta?


Monday, July 14, 2014

Kullanıcı ile Empati Kurabilmek Neden Önemlidir?

Bunu örnek bir senaryo üzerinden inceleyelim. Bazı konuları bilerek abartıyorum, çünkü bizler en kötü duruma hazırlıklı olmak için test senaryoları geliştirmeliyiz.

"Ayşe hanım, 4 aylık hamiledir. İstanbul'da toplam çalışanı 750 olan bir devlet dairesinde veznede çalışmaktadır. Aylardan Temmuz ve aynı zamanda Ramazan ayıdır. Dışarıda sıcaklık 37 derece. Klima / havalandırma sistemi arıza yaptığı için çalışma ortamındaki sıcaklık bunaltıcıdır. Saat 16:00'dır ve Ayşe hanımın veznesi önünde bekleyen 25 kişi vardır. Bekleyenler, işlemlerin uzun sürdüğü gerekçesi ile söylenmektedir. İşlem sırası kendisinde olan yaşlı amcamız, evraklarında nelerin eksik olduğunu pek anlayamamıştır ve Ayşe hanımla tartışmaktadır. Bu arada Ayşe hanım, yaşlı amcaya detaylı bilgi vermek istemektedir, fakat 'Detayları Göster' düğmesine tıklamasının üzerinden 3 dakika geçmesine rağmen halen sistem bir cevap verememiştir. Sırada bekleyenlerin sesleri daha da yükselmekte, ortamdaki gerilim de artmaktadır. Ayşe hanım, yan veznedeki Hüseyin beye sistemin onda da çalışıp çalışmadığını sorar. Hüseyin bey 'bu sisteme geçtik geçeli iki yakamız bir araya gelmedi, sürekli donuyor, bekletiyor, garip garip hatalar veriyor' der..."

Biraz hikaye havasında oldu :) Fakat gerçekte de olması gereken de bu.
Şimdi kendinizi o veznede çalışan insanın yerine koyun. Orada bir hizmet vermeye çalışıyorsunuz fakat işlerinizi kolaylaştırması gereken "sistem", sizi engelliyor. Ne yaparsınız? Ne söylersiniz? :)

Bu yüzdendir ki, test mühendisleri olarak, kullanıcılar ile yakın temasta olup, onların hangi zorluklar altında çalıştığı, onlar için nelerin kritik olduğunu öğrenip, geliştirdiğimiz sistemi, bu tür şartlar altında sorunsuz olarak çalışacak hale getirmemiz gerekiyor. Bazı konuları / sıkıntıları kullanıcı size söylemez / söylemek istemeyebilir veya henüz farkında değildir. Fakat siz, deneyiminiz ile, ilerde ne tür ortam olacağını hayal edip, ona göre tedbirlerinizi almalısınız.

Sunday, July 13, 2014

Test Mühendisliğinde Teknik mi Önemlidir Sosyal Yetkinlikler mi?

Yani, iyi bir test mühendisi olmak için teknolojilere ve tekniklere mi ihtiyacımız var yoksa sosyal yetkinliklere mi?

Hayatta her konuda olduğu gibi bu konuda da en optimal yaklaşım "denge" sağlamak olmalıdır;
 hem teknik hem de sosyal yetkinlikler önemlidir.

Çok özel durumlarda, örneğin, son kullanıcı / müşteri ile hiç görüşmeyecekseniz ve şirket içinde de tüm iletişimi elektronik yoldan yapıyorsanız, sosyal yeteneklere çok ihtiyacınız olmayabilir.
Fakat böyle çalışan kaç kişi var?

Aslında sadece test mühendisliği değil, genel olarak yazılım mühendisliği yoğun olarak sosyal yetkinliklere (özellikle de empatiye) ihtiyaç duyulan bir alandır.
Kendini müşterinin yerine koyamıyorsan, her gün defalarca ve de saatlerce kullanacağı bir yazılımı geliştiren ekip olarak, müşteri / kullanıcının dertlerini ve önceliklerini anlayamamışsan, "kaliteli" bir ürün verme ihtimalin düşük olacaktır.

Bu durumda, test mühendisi olarak, en kötü durumlar için senaryolar geliştirip, bunları test etmek için gerekli teknik yetkinliklere ihtiyacımız olduğu gibi müşteri / kullanıcının önceliklerini anlamak ve etkili iletişim kurabilmek için sosyal yetkinliklere ihtiyacımız vardır.

Yazılım Test Mühendislerinin Eksiklikleri

Yazılım geliştirme mühendisleri, gelişen teknoloji ve müşteri / şirket beklentileri doğrultusunda sürekli olarak yeni teknolojileri öğrenme ve uygulama mecburiyetindedilrer; en azından "mühendislik" yapan büyük bir kısmı.

Fakat yazılım test mühendislerinde durumun böyle olmadığını gözlemliyorum.
Test mühendisliği teknikleri daha yavaş ilerleme ihtiyacı duyuyor olabileceği gibi test yazılımları / teknolojileri de daha yavaş gelişim gösterme gereği duyuyor olabilir.
Bu bir tarafa...

Asıl sorun, test mühendislerinin bir aşamaya kadar kendilerini eğitip sonrasında "duraklama dönemi"ne girmeleri. Pek çok meslekte var bu sorun fakat onlar hakkında yorum yapacak deneyimim yok...

Gördüğüm sorunlar şu şekilde:
- Birkaç manuel test tekniği, planlama, test tasarımı ve geliştirme konusunda deneyim sahibi olunur,
- Bir parça SDLC bilgisine sahip olunur,
- Çok nadiren, mecbur kalındıkça test araçları öğrenilir,
- Ve "zaten ben bu işte her şeyi biliyorum" diye uzunca yıllar bu bilgilere yenisi pek eklenmeden devam edilir.

Ben de aslında çok farklı değildim; bunun sebepleri biraz deneyimsizlik biraz da yol gösteren / referans alabileceğin kişilerin azlığı.

Fakat günümüzde durum farklı.
Bu meslek dalı yaygınlaştı; kitaplar, videolar, bloglar, standartlar, metodolojiler fazla fazla var.
Geriye kalan tek ihtiyaç kişinin öğrenme isteği oluyor.

Sunday, July 6, 2014

Gereksinim ile Tanımlama Arasında Ne Fark Vardır?

IEEE Yazılım Mühendisliği Terminolojisinin Standart Sözlüğü'ne göre:

Gereksinim (Requirement) 
(1) Bir problemi çözme veya bir amacı gerçekleştirmek için kullanıcı tarafından ihtiyaç duyulan bir durum veya kabiliyet,
(2) Bir sistem veya sistem bileşeninin bir sözleşme, standart, tanımlama veya resmi olarak dayatılan diğer dokümanların isteklerine cevap verebilmesi için karşılaması veya sahip olması gereken bir durum veya kabiliyet.
(3) (1) ve (2)deki gibi, bir durum veya kabiliyetin dokümante edilmiş gösterimi.

Tanımlama (Specification) 
Bir sistem veya bileşenin gereksinimleri, tasarımı, davranışı veya diğer karakteristiklerini tam, kesin, doğrulanabilir bir şekilde tanımlayan bir dokümandır.

İstisnai Durum (Exception) Nedir ve Java'da Yaygın Karşılaşılan İstisnai Durumlar Nelerdir?

"Exception" kelimesini İstisna veya İstisnai Durumu olarak tercüme edebiliriz.
Oracle'a göre istisnanın açıklaması şöyle:
"Bir programın çalışması sırasında ortaya çıkan ve programın normal komut akışını bozan bir durumdur."

İstisnaların "throw" ile atılması, "try/catch/finally" ile yakalanması gerekmektedir. Kontrol altına alınmamış istisna durumları RuntimeException olarak adlandırılır.

Java'da yaygın olarak karşılaşılan istisnai durumlar ve açıklamaları aşağıdadır. Yaptığınız testlerde bu istisna durumlarına özellikle dikkat etmeniz faydalı olur.
(Tam liste için http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html adresine bakabilirsiniz.)

ArithmeticException 
İstisnai bir aritmetik durum ortaya çıktığında atılır.

ArrayIndexOutOfBoundsException 
Bir diziye (array) geçerli olmayan bir indeks numarası ile erişilmeye çalışıldığında atılır.

ArrayStoreException 
Bir nesne dizisi içine yanlış tipte bir nesne kaydedilmeye çalışıldığında atılır.

ClassNotFoundException 
Bir uygulama bir sınıfı karakter dizisi ismi ile (Class sınıfındaki forName metodunu kullanarak) yüklemeye çalıştığında atılır.

IllegalArgumentException 
Bir metotun geçerli veya uygun olmayan bir argümanı geçirmeye çalıştığını belirtmek için atılır.

IllegalStateException 
Bir metot geçerli veya uygun olmayan bir zamanda çağrıldığında atılır.

IllegalThreadStateException 
Bir iş parçacığının, talep edilen işlem için uygun bir durumda olmadığını belirtmek için atılır.

IndexOutOfBoundsException 
Herhangi bir tipteki (dizi, karakter dizisi, veya vektör gibi) indeksin sınırları dışında olduğunu belirtmek için atılır.

InterruptedException 
Bir iş parçacığı ("thread") beklerken, uyurken veya diğer türlü bir şekilde meşgulken, bu iş parçacığına iş yaparken veya işini bitirmeden müdahale edilirse atılır.

NegativeArraySizeException
Uygulama negatif genişlikte bir dizi oluşturmaya çalıştığında atılır.

NoSuchMethodException 
Belirli bir metot bulunamadığında atılır.

NullPointerException 
Bir uygulama, bir nesnenin gerektiği bir durumda "null" kullanmaya çalıştığında atılır.

NumberFormatException 
Uygulamanın bir karakter dizisini nümerik tiplerden birine dönüştürmeye çalıştığı ama karakter dizisinin uygun formata sahip olmadığını belirtmek için atılır.

RuntimeException 
RuntimeException, Java Sanal Makinası'nın normal çalışması sırasında atılabilecek diğer istisnaların bir süpersınıfıdır.

SecurityException 
Güvenlik yöneticisii tarafından bir güvenlik ihlali olduğunu belirtmek için atılır.

StringIndexOutOfBoundsException 
Bu istisna "String" methodları tarafından, bir indeksin ya negatif veya karakter dizisinin uzunluğundan büyük olduğunu belirtmek için atılır.

UnsupportedOperationException 
Talep edilen işlemin desteklenmediğini belirtmek için atılır.

Ayrıca, aşağıda belirtilen durumlarda en sık karşılaşılan istisnalar listelenmiştir:

Casting: ClassCastException
Arrays: ArrayIndexOutOfBoundsException, NullPointerException
Collections: NullPointerException, ClassCastException
IO: java.io.IOException, java.io.FileNotFoundException, java.io.EOFException
Serialization: java.io.ObjectStreamException
Threads: InterruptedException, SecurityException, IllegalThreadStateException

Şu video da oldukça faydalı: How to handle 10 common Java Exceptions

Saturday, June 21, 2014

Yazılım Test Mühendisliği - İş Görüşmesinde Sorulan Sorular

Bu konuda oldukça sık e-posta alıyorum, o yüzden bir blog mesajı yazmayı uygun gördüm. Sorular genelde yeni mezun ve/veya test mühendisliği alanında çalışmamış ama yaptığı ilan başvurusu sonrasında iş görüşmesine çağrılmış kişilerden geliyor.

Genelde soru içeriği "iş görüşmesine çağırdılar, hangi soruları sorarlar, ne cevap vermeliyim" şeklinde oluyor.

Herhangi bir iş görüşmesinde sorulabilecek soruların sınırı yoktur, hepsini burada yazmaya imkân yok. Özel olarak, yazılım test mühendisliği iş görüşmelerinde sorulan / sorulabilecek soruları aşağıda listeledim, cevaplarını araştırmayı ise okuyucuya bıraktım :)

İş görüşmelerinde (özellikle yeni mezunlar ile yapılanda) sorulan her soruya doğru cevap vermeniz beklenmez (en azından ben beklemem), fakat daha ziyade bu sorulara karşı nasıl bir yaklaşım geliştirdiğiniz, nasıl çözüm ürettiğiniz ile ilgilenilir.

Sorular:

  • Yazılım Testi sizce nedir? 

  • Yazılımı neden test edelim, zaten yazılım geliştiriciler dikkatli bir şekilde kod yazıyorlar ve birim test yapıyorlar? 

  • Sizce tek tip yazılım testi mi vardır, yoksa birden fazla test türü olabilir mi? 

  • Bildiğiniz test türleri nedir? Bunlardan hangilerini icra ettiniz?

  • Hata (Defect) ile Kusur (Deficiency) arasındaki fark nedir?

  • Sorun, Arıza, Kusur, Hata, Bozukluk tanımları sizce aynı şey midir? Ne gibi farkları olabilir?

  • Bir hatanın önem derecesi ile öncelik derecesi arasındaki fark nedir?

  • Örneğin bir yazılımda hata tespit edildi ve yazılım geliştirici tarafından hatanın düzeltildiği söylendi. Sonrasında ne yaparsınız?

  • Daha önce hangi test araçlarını kullandınız?

  • Özgeçmişinizde HP Load Runner'ı bildiğiniz yazıyor, işte size bilgisayar ve Load Runner programı, şirketimizin web sitesine hemen bir yük testi hazırlayabilir misiniz?

  • Bir hesap makinesini nasıl test edersiniz?

  • Peki bir meşrubat şişesini nasıl test edersiniz?

  • TürkSat 2A uydusunun yazılım test sorumlusu olsaydınız, ne tip testler yapardınız?

  • Yazılım ekibi, geliştirdikleri uygulamanın 16 milyon adet rengi desteklediğini iddia etmektedir. Uygulamanın kullanıcısı olan grafik tasarımcılar için 16 milyon rengin desteklenmesi önemlidir. Uygulamanın gerçekten bu kadar rengi desteklediğini nasıl doğrularsınız?

  • Bir yazılım mühendisinin geliştirdiği uygulamadaki hataları test mühendisi bulur, peki test mühendisinin olası hatalarını kim bulur?

  • Test edilecek uygulamanın bir sayfasında bir metin alanı ve bir sayı alanı vardır. Bu iki alanın her birini nasıl / hangi girdileri kullanarak test edersiniz?

  • Test etmekte olduğunuz uygulama ile ilgili açılmış 100 adet hata henüz çözülmemiş durumdadır. Ancak proje yöneticisi uygulamanın müşteri ortamına kurulmasında ısrar etmektedir. Sizce nasıl bir yol izlenmelidir?

  • 20 adet alt modülden oluşan bir sistem olduğu düşünelim. Sistem, pek çok sensörden bilgi toplamakta, topladığı bu bilgileri bu 20 adet modül içerisinde çeşitli işlemlerden geçirmekte ve işlemler sonunda tek bir karar vermektedir (ve bu kararın ölümcül sonuçlarını olduğunu düşünelim). Sistemin doğru karar verdiğini test etmek için nasıl bir yol izlersiniz?

  • Hangi yazılım test standartları hakkında bilgi sahibisiniz?

  • Hangi yazılım geliştirme yaşam döngüleri hakkında bilgi sahibisiniz?

  • Bir yazılım geliştirilirken baştan sona hangi aşamalardan geçilir?

  • Yazılım ile sistem arasında sizce nasıl bir fark vardır?

  • Gereksinim ne demektir? Neden ihtiyaç vardır?

  • Gereksinimi olmayan bir uygulama olabilir mi? 

  • Uygulamaların gereksinimlerinin olmamasının ne gibi sakıncaları olur? 

  • Bir "Test Durumu" (Test Case) ile "Kullanım Durumu" (Use Case) arasındaki fark / ilişki nedir? 

  • Gereksinim - Tanımlama (Specification) - Kullanım Durumu (Use Case) - Test Durumu (Test Case) arasında nasıl bir ilişki vardır? 

  • Fonksiyonel bir gereksinim ile Fonksiyonel Olmayan bir gereksinim arasında ne gibi farklar vardır? 

  • 10.000 adet gereksinimi ve 3500 adet test durumu olan bir projenin Kabul Komitesi'nde olsaydınız, uygulamanın eksiksiz olarak doğrulandığından emin olmak için neleri kontrol ederdiniz?