Bdd dengan php dan selenium

35
Behaviour Driven Development (BDD) dengan PHPUnit dan Selenium 8 Juni 2013, @STIKOM Surabaya Taufan Aditya - Lead Dev @Mataharilabs

Transcript of Bdd dengan php dan selenium

Page 1: Bdd dengan php dan selenium

Behaviour Driven Development (BDD) dengan PHPUnit dan

Selenium

8 Juni 2013, @STIKOM Surabaya

Taufan Aditya - Lead Dev @Mataharilabs

Page 2: Bdd dengan php dan selenium

Apa yang akan kita diskusikan hari ini :

● Kenapa menggunakan BDD?

● BDD di PHP : PHPUnit + Selenium

Page 3: Bdd dengan php dan selenium

Kenapa menggunakan BDD?

GIVEN a romantic party

WHEN a registered user with tuxedo heading to me

THEN "Hello Bob" will be displayed

Page 4: Bdd dengan php dan selenium

Tahapan web development umumnya...● Pertama-tama, tim pengembang melakukan

analisa untuk requirement dan prioritas. ● Pada fase desain, business requirements

tadi di translasikan menjadi solusi IT.● Setelah itu, dimulailah pembuatan layout

dan implementasi kode.● End-user/client melakukan evaluasi dan

testing.● Maintenance.

Page 5: Bdd dengan php dan selenium

Timeline untuk model konvensional● Requirement gathering : 1-2 bulan

● Design phase : 1-2 bulan

● Implementasi : 3-5 bulan

End-user akan dapat melakukan evaluasi dan

mencoba berinteraksi pertama kali dengan website :

1-2 bulan + 1-2 bulan + 3-5 bulan = 5-9 bulan

Page 6: Bdd dengan php dan selenium

Aku baru mendapat kabar dari developer. Katanya, masih perlu 5-9 bulan lagi sampai website ibu kita selesai.

Page 7: Bdd dengan php dan selenium

Di hari uji-coba, 5-9 bulan kemudian...Sesuai dokumentasi requirement kami, sistem memiliki fitur A, B, C dan D

Tapi yang kumaksud sebenarnya adalah E, F, G, H HAH?

Kenapa anda tidak memberi tahu kami?Terakhir kalian

bertanya padaku adalah 5-9 bulan lalu.

Page 8: Bdd dengan php dan selenium

Beberapa problematika model development konvensional :

● Terlalu mementingkan dokumentasi yang rijit

● Terlalu fokus ke proses dan alat, dan sering melupakan perlunya interaksi individual.

● Dokumentasi yang rijit memerlukan waktu yang lama.

● Kurangnya kolaborasi dengan end-user/client, menyebabkan ada kesenjangan antara ekspektasi dengan hasil.

Page 9: Bdd dengan php dan selenium

We need to become more AGILE!!!

Page 10: Bdd dengan php dan selenium

Manifesto for Agile Software DevelopmentWe are uncovering better ways of developingsoftware by doing it and helping others do it.Through this work we have come to value :

● Individuals and interactions over processes and tools● Working software over comprehensive documentation● Customer collaboration over contract negotiation● Responding to change over following a planThat is, while there is value in the items on the right, we value the items on the left more.

Kent Beck, Mike Beedle, Arie van Bennekum, Alistair Cockburn, Ward Cunningham, Martin Fowler, James Grenning, Jim Highsmith, Andrew Hunt, Ron Jeffries, Jon KernBrian Marick, Robert C. Martin, Steve Mellor, Ken Schwaber, Jeff Sutherland, Dave Thomas

Page 11: Bdd dengan php dan selenium

Perbandingan daur hidup : Waterfall - AgileWaterfall :

5-9 bulan

Plan Analysis & Design Code Test Deploy

Agile :

1-3 bulan 1-3 bulan 1-3 bulan

Pla

n

Ana

lysi

s &

D

esig

n

Cod

e

Test

Dep

loy

Pla

n

Ana

lysi

s &

D

esig

n

Cod

e

Test

Dep

loy

Pla

n

Ana

lysi

s &

D

esig

n

Cod

e

Test

Dep

loy

Page 12: Bdd dengan php dan selenium

Dari Agile... Kita Dapatkan... TDD!Test Driven Development● Red — Tulis sebuah test

yang mengekspresikan bagaimana cara anda menggunakan kode.

● Green — Mulailah menulis kode, untuk melewati test.

● Refactor — Bersihkan kode dari duplikasi, perbaiki desain jika perlu.

Ulangi, sampai selesai!

Page 13: Bdd dengan php dan selenium

Keuntungan menggunakan TDD● Bukti bahwa code kita bekerja dengan baik.● Dapat melihat kapan saja, apa yang rusak

dan dimana bug muncul.● Dapat memperbaiki desain/arsitektur kode,

tanpa merusaknya.● Test-first memaksa kita merencanakan

sebelum mulai menulis kode.● Bisa berfungsi sebagai dokumentasi

fungsional.● ... and the list goes on...

Page 14: Bdd dengan php dan selenium

Oke, aku merencanakan untuk membuat 1243.983 fungsi, 138 class dan interface.Mana yang lebih dahulu akan kubuat unit-test-nya? Hmm....

Ketika seseorang baru mengenal TDD...Wah, fungsi ini tidak boleh dipakai diluar scopenya. Dia harus berupa private method. Mana yang perlu dan mana yang tidak perlu dicover dalam test? Hmm....

Fungsi dalam class ini adalah doSomethingWhenFooNotLongerBar. Harus kuberi nama apa test-case untuk ini? Hmm....

Page 15: Bdd dengan php dan selenium

Lalu, apa itu BDD? Apakah BDD == TDD?I had a problem. While using and teaching agile practices like test-driven development (TDD) on projects in different environments, I kept coming across the same confusion and misunderstandings.My response is Behaviour-Driven Development (BDD).

Dan North — creator of jBehave

Page 16: Bdd dengan php dan selenium

Perbandingan TDD - BDDTDD :● Tulis test yang akan gagal

karena belum ada fungsionalitas

● Tulis kode yang melewati test

● Refactor● Ulangi kembali Red-

Green-Refactor sampai semua class/fungsi yang diperlukan selesai

BDD :● Tulis spesifikasi

(berdasarkan story) yang akan gagal karena belum ada fungsionalitas

● Tulis kode yang melewati spesifikasi

● Refactor● Ulangi kembali Red-

Green-Refactor sampai semua spesifikasi selesai

Page 17: Bdd dengan php dan selenium
Page 18: Bdd dengan php dan selenium

BDD sebagai "Stories" dan "Behaviour"Stories

● Berhubungan dengan ekspektasi pada user-story.

● Menjelaskan cara kerja aplikasi secara high-level.

Behaviour

● Berhubungan dengan ekspektasi pada sistem.

● Menjelaskan cara kerja aplikasi secara low-level.

Page 19: Bdd dengan php dan selenium

Struktur dari sebuah "Story"Naratif

As a [some_role_here]I want [some_feature_here]So that [benefit_of_feature_here]

SkenarioGiven [some_existing_condition]When [some_event_occur]Then [system_should_or_should_not_do]

Page 20: Bdd dengan php dan selenium

Tanpa BDD, besar kemungkinan :Developer umumnya memulai percakapan sbb :echo preg_replace( array ('/(19|20)(\d{2})-(\d{1,2})-(\d{1,2})/','/^\s*{(\w+)}\s*=/'), array ('\3/\4/\1\2', '$\1 ='), '{startDate} = 1999-5-27');

Dan end-user a.k.a client, akan menanggapi sbb :

Page 21: Bdd dengan php dan selenium

Fungsi BDD pada web-development● Memfasilitasi desain aplikasi di level

behaviour, dengan menyediakan template "Given-When-Then".

● Memfasilitasi komunikasi antar departemen dalam web-development : Client - Domain expert - QA - Developer, dengan bahasa yang dapat dimengerti oleh semua personel (ubiquitous language).

Page 22: Bdd dengan php dan selenium

BDD dengan PHPUnit dan Selenium

TEST ME....I Dare you!

Page 23: Bdd dengan php dan selenium

Beberapa popular BDD toolsJava : Ruby :

PHP :

Page 24: Bdd dengan php dan selenium

Kenapa PHPUnit?● De-facto standard, untuk unit-testing di PHP● Memiliki ekstensi PHPUnit-Story, untuk

memfasilitasi BDD dengan template "Given-When-Then"

● Memiliki ekstensi PHPUnit-Selenium, untuk memfasilitasi acceptance test yang bisa diintegrasikan ke Selenium server.

Satu framework testing, untuk semua layer!

Page 25: Bdd dengan php dan selenium

Membuat Story dan Step dengan PHPUnitclass SomeSpec extends PHPUnit_Extensions_Story_TestCase {

// @scenariopublic function someFeature(){

$this->given('keyword', 'OOT')->when('search')->then('search should not contain any result');

}

// @givenpublic function runGiven(&$world, $action, $arguments){}

// @whenpublic function runWhen(&$world, $action, $arguments){}

// @thenpublic function runThen(&$world, $action, $arguments){}

}

Page 26: Bdd dengan php dan selenium

Red-Green-Refactor, seperti halnya TDD

Page 27: Bdd dengan php dan selenium
Page 28: Bdd dengan php dan selenium

Selenium adalah...

● Seperangkat alat untuk otomatisasi

testing web-aplikasi yang berjalan di

banyak platform browser.

● Jembatan yang menyediakan

abstraksi untuk berinteraksi dengan

layer web/browser

Page 29: Bdd dengan php dan selenium

Selenium IDE

Page 30: Bdd dengan php dan selenium

BDD dengan PHPUnit+Selenium

● PHPUnit

● PHPUnit-Story

● PHPUnit-Selenium

● Selenium Server

Page 31: Bdd dengan php dan selenium

Kembali ke prinsip Red-Green-Refactor

Page 32: Bdd dengan php dan selenium

Bagan BDD berdasarkan level-ekspektasiApplication-Level Ekspektasi

Presentasi/UI

Services

Class

Client/End-User/Domain

Expert

Developer

Selenium-Test

Behaviour-Test

Unit-Test

Page 33: Bdd dengan php dan selenium

Go beyond this presentation!● Test Automation (Phing, Custom bash script)

● Continuous Integration Server (Travis,

Jenkins)

● Read Agile/XP Books (wait for mine :) )

● Practice it!

Page 34: Bdd dengan php dan selenium

Reference● Test Driven Development (Kent Beck)

● The Art Of Agile Development (O'Reily)

● http://martinfowler.com/agile.html

● http://dannorth.net/introducing-bdd/

● http://phpunit.de/

● http://seleniumhq.org/

● https://github.com/toopay/PIM-Selenium

Page 35: Bdd dengan php dan selenium

Question Time!

Thats it!Thanks!