32
1 © Vahid Garousi Yazılım Test-Kod Mühendisliği (YTKM): Kaliteli Test-Kodu Geliştirmek, Doğrulamak ve Bakımı Software Test-Code Engineering (STCE): Developing, verifying and maintaining high-quality test scripts Doç. Dr. Vahid Garousi Associate Professor of Software Engineering Senior Software Consultant [email protected] http://web.cs.hacettepe.edu.tr/~vahid vgarousi Yazılım Mühendisliği Araştırma Grubu (HUSE) Bilgisayar Mühendisliği Bölümü Hacettepe Üniversitesi

In Turkish: Software Test Code Engineering (STCE)

Embed Size (px)

Citation preview

Page 1: In Turkish: Software Test Code Engineering (STCE)

1© Vahid Garousi

Yazılım Test-Kod Mühendisliği (YTKM): Kaliteli Test-Kodu Geliştirmek, Doğrulamak ve Bakımı

Software Test-Code Engineering (STCE): Developing, verifying and maintaining high-quality test scripts

Doç. Dr. Vahid GarousiAssociate Professor of Software Engineering

Senior Software Consultant

[email protected]://web.cs.hacettepe.edu.tr/~vahid

vgarousi

Yazılım Mühendisliği Araştırma Grubu (HUSE)Bilgisayar Mühendisliği BölümüHacettepe Üniversitesi

Page 2: In Turkish: Software Test Code Engineering (STCE)

2© Vahid Garousi

Sunum İçeriği

Duyuru: Hacettepe Üniversitesinde "Yazılım Test Mühendisliği" dersi. Endüstriden gelen mühendislere açık

Test-koduna genel bir bakış Birkaç örnek Test-kodunun kalitesi neden önemlidir? Test-kodu yaşam döngüsü ve test-kod mühendisliği

Nasıl? Kaliteli test-kodu geliştirelim (Developing high-quality test scripts)

Test-kodunun kalitelisini doğrulayalım (Verifying test scripts)

TEY (Test Edilen Yazılım) değiştikçe test-koduna bakım yapalım (Co-maintaining test scripts with the SUT)

Ne öğreneceğiz? Bu alanda, birkaç tekniği, araçları ve deneyimleri gözden geçireceğiz

Page 3: In Turkish: Software Test Code Engineering (STCE)

3© Vahid Garousi

Hacettepe Üniversitesinde "Yazılım Test Mühendisliği" dersi

Pratik-yoğun (hands-on) bir ders Tarihçe:

Kanada’da 10 sene civarı hem üniversite ve hem de endüstriye verilen ders

Türkiye'de ODTÜ ve Atılım Üniversitesin de verildi, endüstriden birçok katılım oldu

Beş proje: Introduction to Testing, Bug Reporting and Defect Tracking Black-box Testing and API-Based Unit Testing using JUnit Code Coverage and White-box Testing in JUnit Automated Web Application Testing using Selenium Using Static Analysis to Find Bugs

Page 4: In Turkish: Software Test Code Engineering (STCE)

4© Vahid Garousi

Lab 1: Introduction to Testing and Defect Tracking

Goals: Getting hands-on experience in ad-hoc, manual and regression testing Using industrial defect tracking practices and tools Experiencing that ad-hoc manual testing is not always very effective

SUT: An ATM simulation system Testing support tool: JIRA, Bugzilla, the Google issue tracking tool

Realistic defects were manually injected in the SUT

Report bugs to

Page 5: In Turkish: Software Test Code Engineering (STCE)

5© Vahid Garousi

Lab 1: Introduction to Testing and Defect Tracking

Lab document (instructions)… Extensive effort was spent to

prepare realistic, clear, concise and “interesting” lab exercises…

Involving several test engineers from the industry a lot in this aspect

Page 6: In Turkish: Software Test Code Engineering (STCE)

6© Vahid Garousi

Lab 1: Introduction to Testing and Defect Tracking

Report bugs to

Page 7: In Turkish: Software Test Code Engineering (STCE)

7© Vahid Garousi

Lab 2: Black-box Testing and API-Based Unit Testing using JUnit

SUT: JFreeChart Testing tool: JUnit

Hacettepe Üniversitesinde "Yazılım Test Mühendisliği" dersi

Page 8: In Turkish: Software Test Code Engineering (STCE)

8© Vahid Garousi

Students applied the equivalence partitioning technique based on Javadoc API Specifications

Hacettepe Üniversitesinde "Yazılım Test Mühendisliği" dersi

Page 9: In Turkish: Software Test Code Engineering (STCE)

9© Vahid Garousi

Hacettepe Üniversitesinde "Yazılım Test Mühendisliği" dersi

2015 güz döneminde açılacaktır Dünyanın birçok ülkesinde dersin

Kanada’da 10 sene civarı hem üniversite ve hem de endüstriye verilen ders materyali kullanılmaktadır

Page 10: In Turkish: Software Test Code Engineering (STCE)

10© Vahid Garousi

Sunum içeriği

Hacettepe Üniversitesinde "Yazılım Test Mühendisliği" dersi

Test-koduna genel bir bakış Birkaç örnek Test-kodunun kalitesi neden önemlidir? Test-kodu yaşam döngüsü ve test-kod mühendisliği

Nasıl? Kaliteli test-kodu geliştirelim (Developing high-quality test scripts)

Test-kodunun kalitelisini doğrulayalım (Verifying test scripts)

TEY (Test Edilen Yazılım) değiştikçe test-koduna bakım yapalım (Co-maintaining test scripts with the SUT)

Ne öğreneceğiz? Bu alanda, birkaç tekniği, araçları ve deneyimleri gözden geçireceğiz

Page 11: In Turkish: Software Test Code Engineering (STCE)

11© Vahid Garousi

Test-Koduna Genel Bir Bakış Birkaç örnek Sistem seviyesinde bir test Selenium web

uygulamaları test aracı

Test ediyor

TED (Test Edilen Yazılım)

Page 12: In Turkish: Software Test Code Engineering (STCE)

12© Vahid Garousi

Otomatik Test Altyapıları Çok Büyük Ölçütlere Gelmiştir

"Sistemin kendisinden muhtemelen daha karmaşık bir test sistemi tasarladık."

“We designed a test system that probably is as complicated as the system itself.”

Jeff Feldstein, Manager, Software Development

Cisco Systems, San Jose, California

Google Tech Talks, November 9, 2005

(a very good talk)

"Microsoft Office 2007 için, bir milyondan fazla otomatik test senaryo geliştirilirmiştir."

Page 13: In Turkish: Software Test Code Engineering (STCE)

13© Vahid Garousi

Test-Kodunun Kalitesi Neden Önemlidir? Senaryo:

İki önemli olan doğrulama adımından birisinin (verifyTextPresent) yazılması unutulmuş

Sorun: Böylece TEY’da bu konuda

hata olursa eğer, bu test o hatayı yakalamayacaktır.

Ders: Test mühendislerimiz kaliteli

test-kod geliştiriyorlar mı? Test-kod kalitesi normal

kaynak kod kalitesi gibi önemlidir

Page 14: In Turkish: Software Test Code Engineering (STCE)

14© Vahid Garousi

Test-Koduna Genel Bir Bakış

Başka bir örnek Birim seviyesinde bir test

(unit test)

Test ediyor

TED (Test Edilen Yazılım):Java için bir loglama kütüphanesi

Page 15: In Turkish: Software Test Code Engineering (STCE)

15© Vahid Garousi

Test-Koduna Genel Bir Bakış Durum:

Üç test fonksiyonu mevcut Üçüncü fonksiyonda önemli olan

doğrulama noktası (assertion) mevcut

Sorun: Ama ilk iki test fonksiyonunda

doğrulama noktalarının yazılması unutulmuş

Eksik gibi? Böylece TEY’da hata varsa eğer,

bu testler o hatayı yakalamayacaktır.

Ders: Acaba, testlerimizde yeterli

doğrulama noktaları (assertion) var mi?

Bu doğrulamalar aslında testlerin (hata bulmak) gücüdür

Page 16: In Turkish: Software Test Code Engineering (STCE)

16© Vahid Garousi

Test otomasyonunda Test-Kod Yaşam Döngüsü

Yazılım Test-Kod Mühendisliği (YTKM): Mühendislik ve sistematik yöntemleri kullanarak bu adımları en verimli şekilde yapmak

Test aracı

Test kodu geliştirilmesi

Ürün kodu bakımı

Otomatik test kodu geliştirme

Test kodunun elle geliştirilmesi

Yazılım Test

Muhendisi

Ürün kodu geliştirilme

Test kodu eş-bakımı

kullanıyor

İzlenebilirlik bağlantılar

Test Edilen Yazılım (TEY)

Otomatik Test Küme

Kalite değerlendirme

İzlenebilirlik bağlantılar

etkiliyoretkiliyor

Kalite değerlendirme

kullanılıyor

Kalite iyileştirme

Kalite iyileştirme

Page 17: In Turkish: Software Test Code Engineering (STCE)

17© Vahid Garousi

Test-Kodu Mühendisliğine Dünyada Verilen Önem

Page 18: In Turkish: Software Test Code Engineering (STCE)

18© Vahid Garousi

Sunum içeriği

Hacettepe Üniversitesinde Yazılım Test Mühendisliği dersi

Test-koduna genel bir bakış Birkaç örnek Test-kodunun kalitesi neden önemlidir? Test-kodu yaşam döngüsü ve test-kod mühendisliği

Nasıl? Kaliteli test-kodu geliştirelim (Developing high-quality test scripts)

Test-kodunun kalitelisini doğrulayalım (Verifying test scripts)

TEY (Test Edilen Yazılım) değiştikçe test-koduna bakım yapalım (Co-maintaining test scripts with the SUT)

Ne öğreneceğiz? Bu alanda, birkaç tekniği, araçları ve deneyimleri gözden geçireceğiz

Page 19: In Turkish: Software Test Code Engineering (STCE)

19© Vahid Garousi

Kaliteli Test-Kodu Nasıl Geliştirilir? Manuel yöntem: test mühendisi el ile test kodu yazıyor Normal kaynak kodu gibi, kaliteli kod yazmak lazım Bir çok önemli noktaya dikkat lazım Test kodunun kalite yönleri ve ölçütleri nelerdir?

Test kodunun hem fonksiyonel (functional) ve hem fonksiyonel-dışı (non-functional) kalite yönleri vardır.

Fonksiyonel kalite: test kodunun ürün kodunu doğru ve sağlam test etmesidir.

Meşhur “Saatçiyi izlemek”(İngilizcede: “Watching the watchman”) sözü gibi, test kodu için de dikkatli doğrulama ve geçerleme lazım.

Test kodunun fonksiyonel-dışı kalitesi ise, “-bilirlik” ailesindeki kalite ölçütlerini kapsıyor, örneğin, bakıla-bilirlik (maintainability), anlaya-bilirlik (understandability) ve güvene-bilirlik (reliability).

Page 20: In Turkish: Software Test Code Engineering (STCE)

20© Vahid Garousi

Kaliteli Test-Kodu Nasıl Geliştirilir? Çözüm: Test örüntüleri (Test patterns)

"Tasarım örüntülerine" (design patterns) benziyorlar

Örnek test örüntüleri: Sayfa Nesneleri (Page objects): The Page Object pattern represents the screens of your

web app as a series of objects  Web uygulamalarını otomatik test ederken, kullanıcı arayüzünde (UI) testler ile etkileşim

alanları vardır. Bir "Sayfa Nesnesi" test kodunun içinde tum sayfayı nesne olarak modelliyor. Böylece, kopya kod miktarı azalıyor ve arayüz değişirse, düzeltme, test içinde değişikler

yalnızca tek bir yerde gerekiyor. Örnek: bir web-tabanlı email uygulamayı test ederken:

Yerine:

Daha çok örnek: https://code.google.com/p/selenium/wiki/PageObjects

Page 21: In Turkish: Software Test Code Engineering (STCE)

21© Vahid Garousi

Kaliteli Test-Kod: Test Örüntüler Örnek test otomasyon aracı: Selenium Çözüm: Test örüntüleri (Test patterns) Ayrıntılar:

Page 22: In Turkish: Software Test Code Engineering (STCE)

22© Vahid Garousi

Kaliteli Test-Kodu: Birim testinde otomasyon

Test otomasyon altyapısı: JUnit (birim test için) Örnek bir JUnit birim test kodu:

Android işletim sistemi kodundan: Acil numara (911) ayarının düzgün ayarlanmış olup olmadığını kontrol etmek

Page 23: In Turkish: Software Test Code Engineering (STCE)

23© Vahid Garousi

Kaliteli Test-Kodu: Test Örüntüleri Test otomasyon altyapısı: JUnit Birim testi için test örüntüleri, örnekler:

Test mantığımızı net bir şekilde yazmak için, testlerimizi nasıl bir yapıda oluşturmalıyız?

Öneri: testleri sırayla dört farklı adımda yapılandırmak Dört-Adım Testi (Four-Phase Test)

Page 24: In Turkish: Software Test Code Engineering (STCE)

24© Vahid Garousi

Kaliteli Test-Kodu: Test Örüntüleri Dört-Adım Testi (Four-Phase Test) Faydalar:

Bakıla-bilirlik (maintainability) Anlaya-bilirlik (understandability) Modülerlik (modularity)

Page 25: In Turkish: Software Test Code Engineering (STCE)

25© Vahid Garousi

Kaliteli Test-Kodu: Test Örüntüleri Birim testi için test örüntüleri Ayrıntılar ve daha çok test örüntüsü:

Page 26: In Turkish: Software Test Code Engineering (STCE)

26© Vahid Garousi

Testleri Otomatik Üretmek Manuel yöntem: test mühendisi el ile test kodu yazıyor Otomatik yöntem: bir test otomasyon aracı kullanarak test kodu otomatik bir şekilde

geliştirmek Tekrar, farklı test seviyeleri için (birim ve sistem testi), farklı araçlar mevcut

Page 27: In Turkish: Software Test Code Engineering (STCE)

27© Vahid Garousi

Testleri Otomatik Üretmek Bir projeden örnek Firma: .Net’de NUnit testlerini otomatik üretmek Test Edilen Yazılım (TEY): Rocket adlı bir Veri Tabanlı Kontrol ve Gözetleme Sistemi

(Supervisory Control and Data Acquisition (SCADA) Sıkıntı: Manuel şekilde NUnit testleri geliştirmek çok zaman alıyordu, örneğin:

denklik sınıflandırma (equivalence classing) metodun kullanarak, bu sistemde, 19,683 tane test senaryosu sadece bir birim (fonksiyon blok) için çıkıyordu. Kotu haber (bu kadar test kodu yazmak çok efor istiyor)

Page 28: In Turkish: Software Test Code Engineering (STCE)

28© Vahid Garousi

Testleri Otomatik Üretmek .Net’de NUnit testlerini otomatik üretmek

İkili testProgramın tüm ikili girdi kombinasyonlarını çalıştırmak için test senaryolarının tasarlandığı kara kutu test tasarım tekniği Ayrıca bakınız dikey dizi testi.

A black box test design technique in which test cases are designed to execute all possible discrete combinations of each pair of input parameters. See also orthogonal array testing.

Page 29: In Turkish: Software Test Code Engineering (STCE)

29© Vahid Garousi

İkili Test (Pair-Wise Testing): Bir örnek Deneysel çalışmalardan: “Hatalar genelde sadece birkaç değişken

etkileşimi sebebiyle yaratılıyorlar, böylece sadece birkaç değişkenin etkileşimlerini kontrol eden testler hataları bulmakta çok etkin olmaktadır."

"Failures appear to be caused by interactions of only a few variables, so tests that cover all such few-variable interactions can be very effective.”

Örnek: 3 değişken 3 != 6 test senaryosu Ama sadece bir test senaryo

hatayı bulacaktır:

pressure<10 volume>300

Ve o senaryo, iyi değişkeninin

etkileşimine aittir

Page 30: In Turkish: Software Test Code Engineering (STCE)

30© Vahid Garousi

İkili test: Deneysel çalışmalardan

sonuçlar (Pair-Wise Testing): Results from Empirical Studies

Değişkenlerin etkileşim sayısı

Kümülatif yüzde

Page 31: In Turkish: Software Test Code Engineering (STCE)

31© Vahid Garousi

Testleri Otomatik Üretmek .Net’de NUnit testleri otomatik üretmek

Page 32: In Turkish: Software Test Code Engineering (STCE)

32© Vahid Garousi

Sunum İçeriği

Test-koduna genel bir bakış Birkaç örnek Test-kodunun kalitesi neden önemlidir? Test-kodu yaşam döngüsü ve test-kod mühendisliği (YTKM)

Nasıl? Kaliteli test-kodu geliştirelim (Developing high-quality test scripts)

Test-kodu kalitelisini doğrulayalım (Verifying test scripts)

TEY (Test Edilen Yazılım) değiştikçe test-koduna bakım yapalım (Co-maintaining test scripts with the SUT)

Ne öğrendik? Bu alanda, birkaç teknik, araçlar ve deneyimleri gözden geçireceğiz

Bugün

Sonra