SlideShare une entreprise Scribd logo
1  sur  35
Télécharger pour lire hors ligne
Behaviour Driven Development
(BDD) dengan PHPUnit dan
Selenium
8 Juni 2013, @STIKOM Surabaya
Taufan Aditya - Lead Dev @Mataharilabs
Apa yang akan kita diskusikan hari ini :
● Kenapa menggunakan BDD?
● BDD di PHP : PHPUnit + Selenium
Kenapa menggunakan BDD?
GIVEN a romantic party
WHEN a registered user
with tuxedo heading to me
THEN "Hello Bob" will be
displayed
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.
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
Aku baru mendapat
kabar dari developer.
Katanya, masih perlu 5-
9 bulan lagi sampai
website ibu kita selesai.
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.
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.
We need to become more AGILE!!!
Manifesto for Agile Software Development
We 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 plan
That 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
Perbandingan daur hidup : Waterfall - Agile
Waterfall :
5-9 bulan
Plan
Analysis &
Design
Code Test Deploy
Agile :
1-3 bulan 1-3 bulan 1-3 bulan
Plan
Analysis&
Design
Code
Test
Deploy
Plan
Analysis&
Design
Code
Test
Deploy
Plan
Analysis&
Design
Code
Test
Deploy
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!
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...
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
doSomethingWhenFooNot
LongerBar. Harus kuberi
nama apa test-case untuk
ini? Hmm....
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
Perbandingan TDD - BDD
TDD :
● 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
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.
Struktur dari sebuah "Story"
Naratif
As a [some_role_here]
I want [some_feature_here]
So that [benefit_of_feature_here]
Skenario
Given [some_existing_condition]
When [some_event_occur]
Then [system_should_or_should_not_do]
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/12',
'$1 ='),
'{startDate} = 1999-
5-27');
Dan end-user a.k.a
client, akan
menanggapi sbb :
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).
BDD dengan PHPUnit dan Selenium
TEST ME....
I Dare you!
Beberapa popular BDD tools
Java : Ruby :
PHP :
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!
Membuat Story dan Step dengan PHPUnit
class SomeSpec extends PHPUnit_Extensions_Story_TestCase
{
// @scenario
public function someFeature()
{
$this->given('keyword', 'OOT')
->when('search')
->then('search should not contain any result');
}
// @given
public function runGiven(&$world, $action, $arguments){}
// @when
public function runWhen(&$world, $action, $arguments){}
// @then
public function runThen(&$world, $action, $arguments){}
}
Red-Green-Refactor, seperti halnya TDD
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
Selenium IDE
BDD dengan PHPUnit+Selenium
● PHPUnit
● PHPUnit-Story
● PHPUnit-Selenium
● Selenium Server
Kembali ke prinsip Red-Green-Refactor
Bagan BDD berdasarkan level-ekspektasi
Application-Level Ekspektasi
Presentasi/UI
Services
Class
Client/End-
User/Domain
Expert
Developer
Selenium-Test
Behaviour-Test
Unit-Test
Go beyond this presentation!
● Test Automation (Phing, Custom bash script)
● Continuous Integration Server (Travis,
Jenkins)
● Read Agile/XP Books (wait for mine :) )
● Practice it!
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
Question
Time!
Thats it!
Thanks!

Contenu connexe

Similaire à Bdd dengan php dan selenium

2_7 Fase Proyek Software dan Fase Pendefinisian.pptx
2_7 Fase Proyek Software dan Fase Pendefinisian.pptx2_7 Fase Proyek Software dan Fase Pendefinisian.pptx
2_7 Fase Proyek Software dan Fase Pendefinisian.pptx
anantaproductiontv
 
KONSEP PEMEROGRAMAN WEBSITE AAGUS NUGRAHA
KONSEP PEMEROGRAMAN WEBSITE AAGUS NUGRAHAKONSEP PEMEROGRAMAN WEBSITE AAGUS NUGRAHA
KONSEP PEMEROGRAMAN WEBSITE AAGUS NUGRAHA
AgusNugraha39
 
Pengenalan App Inventor_1.pdf
Pengenalan App Inventor_1.pdfPengenalan App Inventor_1.pdf
Pengenalan App Inventor_1.pdf
JustYahiko
 
Pert 11 anisah 41812110004
Pert 11 anisah 41812110004Pert 11 anisah 41812110004
Pert 11 anisah 41812110004
anisahprasetya
 
Pert 11 anisah 41812110004
Pert 11 anisah 41812110004Pert 11 anisah 41812110004
Pert 11 anisah 41812110004
anisahprasetya
 
Rpl 5-perencanaan proyek perangkat lunak
Rpl 5-perencanaan proyek perangkat lunakRpl 5-perencanaan proyek perangkat lunak
Rpl 5-perencanaan proyek perangkat lunak
f' yagami
 
Rpl 2- sw process model
Rpl 2- sw process modelRpl 2- sw process model
Rpl 2- sw process model
f' yagami
 

Similaire à Bdd dengan php dan selenium (20)

2_7 Fase Proyek Software dan Fase Pendefinisian.pptx
2_7 Fase Proyek Software dan Fase Pendefinisian.pptx2_7 Fase Proyek Software dan Fase Pendefinisian.pptx
2_7 Fase Proyek Software dan Fase Pendefinisian.pptx
 
KONSEP PEMEROGRAMAN WEBSITE AAGUS NUGRAHA
KONSEP PEMEROGRAMAN WEBSITE AAGUS NUGRAHAKONSEP PEMEROGRAMAN WEBSITE AAGUS NUGRAHA
KONSEP PEMEROGRAMAN WEBSITE AAGUS NUGRAHA
 
Perkuliahan 02 Model software engginer
Perkuliahan 02 Model software engginerPerkuliahan 02 Model software engginer
Perkuliahan 02 Model software engginer
 
My first post
My first postMy first post
My first post
 
Rpl2designsprint 181203055712 (1)
Rpl2designsprint 181203055712 (1)Rpl2designsprint 181203055712 (1)
Rpl2designsprint 181203055712 (1)
 
[RPL2] Design Sprint
[RPL2] Design Sprint[RPL2] Design Sprint
[RPL2] Design Sprint
 
PPT Pertemuan 04 Mobile Programmer VSGA DTS 2021.pptx
PPT Pertemuan 04 Mobile Programmer VSGA DTS 2021.pptxPPT Pertemuan 04 Mobile Programmer VSGA DTS 2021.pptx
PPT Pertemuan 04 Mobile Programmer VSGA DTS 2021.pptx
 
PRINSIP DAN KONSEP ANALISA (ANALYSIS CONCEPT AND PRINCIPLES)
 PRINSIP DAN KONSEP ANALISA (ANALYSIS CONCEPT AND PRINCIPLES) PRINSIP DAN KONSEP ANALISA (ANALYSIS CONCEPT AND PRINCIPLES)
PRINSIP DAN KONSEP ANALISA (ANALYSIS CONCEPT AND PRINCIPLES)
 
Pengenalan App Inventor_1.pdf
Pengenalan App Inventor_1.pdfPengenalan App Inventor_1.pdf
Pengenalan App Inventor_1.pdf
 
Dicoding Developer Coaching #118 _ DevOps Engineer _ Tingkatkan Kualitas Kode...
Dicoding Developer Coaching #118 _ DevOps Engineer _ Tingkatkan Kualitas Kode...Dicoding Developer Coaching #118 _ DevOps Engineer _ Tingkatkan Kualitas Kode...
Dicoding Developer Coaching #118 _ DevOps Engineer _ Tingkatkan Kualitas Kode...
 
Pert 11 anisah 41812110004
Pert 11 anisah 41812110004Pert 11 anisah 41812110004
Pert 11 anisah 41812110004
 
Pert 11 anisah 41812110004
Pert 11 anisah 41812110004Pert 11 anisah 41812110004
Pert 11 anisah 41812110004
 
Dwi h (09)
Dwi h (09)Dwi h (09)
Dwi h (09)
 
Rpl 5-perencanaan proyek perangkat lunak
Rpl 5-perencanaan proyek perangkat lunakRpl 5-perencanaan proyek perangkat lunak
Rpl 5-perencanaan proyek perangkat lunak
 
Project charter-1
Project charter-1Project charter-1
Project charter-1
 
Rpl 2- sw process model
Rpl 2- sw process modelRpl 2- sw process model
Rpl 2- sw process model
 
Pertemuan 4 - Scrum.pdf
Pertemuan 4 - Scrum.pdfPertemuan 4 - Scrum.pdf
Pertemuan 4 - Scrum.pdf
 
Pemodelan perangkat lunak
Pemodelan perangkat lunakPemodelan perangkat lunak
Pemodelan perangkat lunak
 
Kuliah umum intro to programming @ feb unpad
Kuliah umum intro to programming @ feb unpadKuliah umum intro to programming @ feb unpad
Kuliah umum intro to programming @ feb unpad
 
Dicoding Developer Coaching #120_ DevOps Engineer _ Pengembangan Aplikasi men...
Dicoding Developer Coaching #120_ DevOps Engineer _ Pengembangan Aplikasi men...Dicoding Developer Coaching #120_ DevOps Engineer _ Pengembangan Aplikasi men...
Dicoding Developer Coaching #120_ DevOps Engineer _ Pengembangan Aplikasi men...
 

Bdd dengan php dan selenium

  • 1. Behaviour Driven Development (BDD) dengan PHPUnit dan Selenium 8 Juni 2013, @STIKOM Surabaya Taufan Aditya - Lead Dev @Mataharilabs
  • 2. Apa yang akan kita diskusikan hari ini : ● Kenapa menggunakan BDD? ● BDD di PHP : PHPUnit + Selenium
  • 3. Kenapa menggunakan BDD? GIVEN a romantic party WHEN a registered user with tuxedo heading to me THEN "Hello Bob" will be displayed
  • 4. 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.
  • 5. 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
  • 6. Aku baru mendapat kabar dari developer. Katanya, masih perlu 5- 9 bulan lagi sampai website ibu kita selesai.
  • 7. 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.
  • 8. 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.
  • 9. We need to become more AGILE!!!
  • 10. Manifesto for Agile Software Development We 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 plan That 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
  • 11. Perbandingan daur hidup : Waterfall - Agile Waterfall : 5-9 bulan Plan Analysis & Design Code Test Deploy Agile : 1-3 bulan 1-3 bulan 1-3 bulan Plan Analysis& Design Code Test Deploy Plan Analysis& Design Code Test Deploy Plan Analysis& Design Code Test Deploy
  • 12. 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!
  • 13. 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...
  • 14. 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 doSomethingWhenFooNot LongerBar. Harus kuberi nama apa test-case untuk ini? Hmm....
  • 15. 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
  • 16. Perbandingan TDD - BDD TDD : ● 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
  • 17.
  • 18. 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.
  • 19. Struktur dari sebuah "Story" Naratif As a [some_role_here] I want [some_feature_here] So that [benefit_of_feature_here] Skenario Given [some_existing_condition] When [some_event_occur] Then [system_should_or_should_not_do]
  • 20. 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/12', '$1 ='), '{startDate} = 1999- 5-27'); Dan end-user a.k.a client, akan menanggapi sbb :
  • 21. 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).
  • 22. BDD dengan PHPUnit dan Selenium TEST ME.... I Dare you!
  • 23. Beberapa popular BDD tools Java : Ruby : PHP :
  • 24. 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!
  • 25. Membuat Story dan Step dengan PHPUnit class SomeSpec extends PHPUnit_Extensions_Story_TestCase { // @scenario public function someFeature() { $this->given('keyword', 'OOT') ->when('search') ->then('search should not contain any result'); } // @given public function runGiven(&$world, $action, $arguments){} // @when public function runWhen(&$world, $action, $arguments){} // @then public function runThen(&$world, $action, $arguments){} }
  • 27.
  • 28. 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
  • 30. BDD dengan PHPUnit+Selenium ● PHPUnit ● PHPUnit-Story ● PHPUnit-Selenium ● Selenium Server
  • 31. Kembali ke prinsip Red-Green-Refactor
  • 32. Bagan BDD berdasarkan level-ekspektasi Application-Level Ekspektasi Presentasi/UI Services Class Client/End- User/Domain Expert Developer Selenium-Test Behaviour-Test Unit-Test
  • 33. Go beyond this presentation! ● Test Automation (Phing, Custom bash script) ● Continuous Integration Server (Travis, Jenkins) ● Read Agile/XP Books (wait for mine :) ) ● Practice it!
  • 34. 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