diff --git a/docs/workshops/day_3_bdd.md b/docs/workshops/day_3_bdd.md index 1fd88e4e6f5e51f7610e722c1f7389321ad7a92b..e1d29ff76b60f4a82fafdadf63a21f92c17518e9 100644 --- a/docs/workshops/day_3_bdd.md +++ b/docs/workshops/day_3_bdd.md @@ -5,7 +5,6 @@ * Session 3: 13:00 - 15:00: Hands-on: A Case study * Session 4: 15:30 - 16:30: Overview, Discussion, Lesson learned - ## Functional Tests & BDD Anda telah diperkenalkan dengan contoh kode test dari tingkat _unit test_ hingga _functional test_ di hari pertama workshop. @@ -52,24 +51,61 @@ Ketiga peran tersebut berkolaborasi dalam proses pengembangan dengan menyusun _r Untuk mengikuti rangkaian kegiatan workshop hari ini, harap persiapkan _tools_ berikut di komputer: -- Git -- IntelliJ IDEA Community Edition +- [Git](https://git-scm.com/) +- [Java JDK 17](https://adoptium.net/temurin/releases/?version=17) +- [IntelliJ IDEA Community Edition](https://www.jetbrains.com/idea/download/) - Pasang _plugin_ Cucumber -- Java JDK 17 (`java` dan `javac`) -- Apache Maven (`mvn`) -- Docker dan Docker Compose (`docker` dan `docker-compose`) -- Google Chrome -- Node.js (opsional jika ingin menjalankan _frontend_ secara manual) - -Buka proyek [Spring Petclinic BDD di GitLab CSUI][Spring Petclinic BDD @ GitLab CSUI] dan -buat salinan proyek ("_fork_") ke dalam akun GitLab CSUI anda. +- [Apache Maven](https://maven.apache.org/download.cgi) +- _Web browser_ seperti [Mozilla Firefox](https://www.mozilla.org/en-US/firefox/new/) + atau [Google Chrome](https://www.google.com/chrome/index.html). +- (Opsional) [Docker dan Docker Compose](https://docs.docker.com/desktop/) apabila ingin menjalankan contoh proyek di dalam _container_. + Catatan instalasi Docker dapat dilihat di halaman berikut: [(klik)](./prep.md) +- (Opsional) Node.js versi 16 apabila ingin menjalankan _frontend_ aplikasi contoh secara lokal. + +Pastikan anda dapat memanggil program-program berikut dari dalam _shell_ favorit anda: + +```shell +git --version +java --version +javac --version +mvn --version +``` + +Hasil pemanggilan program-program di atas seharusnya akan mencetak versi program yang terpasang di komputer anda. + +Buka proyek [Spring Petclinic BDD di GitLab CSUI][Spring Petclinic BDD @ GitLab CSUI] +dan buat salinan proyek (_fork_) ke dalam akun GitLab CSUI anda. Kemudian buat salinan kode templat dari _fork_ ke komputer anda menggunakan perintah `git`: ```shell git clone https://gitlab.cs.ui.ac.id/[akun GitLab CSUI anda]/spring-petclinic-bdd.git ``` -Telah tersedia juga berkas [`docker-compose.yml`][2] berikut untuk menjalankan aplikasi Spring Boot + Angular JS bernama Spring Petclinic yang akan dijadikan bahan latihan hari ini: +Proyek tersebut mengandung kode templat awal untuk berlatih membuat _test suite_ BDD yang akan diujikan terhadap aplikasi Spring Petclinic. +Sudah tersedia aplikasi Spring Petclinic bagi masing-masing peserta yang dapat dicoba secara daring. +Berikut ini adalah tautan ke aplikasi Spring Petclinic bagi setiap peserta: + +- [`https://spring-petclinic-angular-fatimah.dokku-ppl.cs.ui.ac.id`](https://spring-petclinic-angular-fatimah.dokku-ppl.cs.ui.ac.id) +- [`https://spring-petclinic-angular-rezha.dokku-ppl.cs.ui.ac.id`](https://spring-petclinic-angular-rezha.dokku-ppl.cs.ui.ac.id) +- [`https://spring-petclinic-angular-sri.dokku-ppl.cs.ui.ac.id`](https://spring-petclinic-angular-sri.dokku-ppl.cs.ui.ac.id) +- [`https://spring-petclinic-angular-wida.dokku-ppl.cs.ui.ac.id`](https://spring-petclinic-angular-wida.dokku-ppl.cs.ui.ac.id) +- [`https://spring-petclinic-angular-niea.dokku-ppl.cs.ui.ac.id`](https://spring-petclinic-angular-niea.dokku-ppl.cs.ui.ac.id) +- [`https://spring-petclinic-angular-yopi.dokku-ppl.cs.ui.ac.id`](https://spring-petclinic-angular-yopi.dokku-ppl.cs.ui.ac.id) +- [`https://spring-petclinic-angular-budi.dokku-ppl.cs.ui.ac.id`](https://spring-petclinic-angular-budi.dokku-ppl.cs.ui.ac.id) +- [`https://spring-petclinic-angular-winayaka.dokku-ppl.cs.ui.ac.id`](https://spring-petclinic-angular-winayaka.dokku-ppl.cs.ui.ac.id) +- [`https://spring-petclinic-angular-fakhri.dokku-ppl.cs.ui.ac.id`](https://spring-petclinic-angular-fakhri.dokku-ppl.cs.ui.ac.id) +- [`https://spring-petclinic-angular-ratu.dokku-ppl.cs.ui.ac.id`](https://spring-petclinic-angular-ratu.dokku-ppl.cs.ui.ac.id) +- [`https://spring-petclinic-angular-adit.dokku-ppl.cs.ui.ac.id`](https://spring-petclinic-angular-adit.dokku-ppl.cs.ui.ac.id) +- [`https://spring-petclinic-angular-meitya.dokku-ppl.cs.ui.ac.id`](https://spring-petclinic-angular-meitya.dokku-ppl.cs.ui.ac.id) +- [`https://spring-petclinic-angular-ganda.dokku-ppl.cs.ui.ac.id`](https://spring-petclinic-angular-ganda.dokku-ppl.cs.ui.ac.id) +- [`https://spring-petclinic-angular-pahmil.dokku-ppl.cs.ui.ac.id`](https://spring-petclinic-angular-pahmil.dokku-ppl.cs.ui.ac.id) +- [`https://spring-petclinic-angular-sonya.dokku-ppl.cs.ui.ac.id`](https://spring-petclinic-angular-sonya.dokku-ppl.cs.ui.ac.id) +- [`https://spring-petclinic-angular-kamrozi.dokku-ppl.cs.ui.ac.id`](https://spring-petclinic-angular-kamrozi.dokku-ppl.cs.ui.ac.id) + +> Catatan: Mohon hanya akses aplikasi Spring Petclinic sesuai nama depan masing-masing! + +Sebagai alternatif bagi peserta yang ingin mencoba menjalankan aplikasinya secara lokal, +tersedia juga berkas [`docker-compose.yml`][2] berikut untuk menjalankan aplikasi Spring Petclinic: ```yaml --- @@ -84,8 +120,8 @@ services: - "127.0.0.1:80:8080" ``` -_Backend_ aplikasi menggunakan [Spring Petclinic REST](https://github.com/spring-petclinic/spring-petclinic-rest) yang dapat diakses melalui _port_ 9966 di `127.0.0.1`. -Sedangkan _frontend_ aplikasi menggunakan [Spring Petclinic Angular](https://github.com/spring-petclinic/spring-petclinic-rest) yang dapat diakses melalui _port_ 80 di `127.0.0.1`. +_Backend_ aplikasi Spring Petclinic menggunakan [Spring Petclinic REST](https://github.com/spring-petclinic/spring-petclinic-rest) yang dapat diakses melalui _port_ 9966 di `127.0.0.1`. +Sedangkan _frontend_ aplikasi menggunakan [Spring Petclinic Angular](https://github.com/spring-petclinic/spring-petclinic-angular) yang dapat diakses melalui _port_ 80 di `127.0.0.1`. Kedua komponen aplikasi ini dapat jalan sebagai _container_, ataupun di-_build_ secara manual. Silakan merujuk ke `README.md` masing-masing komponen jika ingin menjalankannya secara manual (tanpa _container_). @@ -98,7 +134,8 @@ docker compose up --detach docker-compose up --detach ``` -Kemudian buka laman depan aplikasi menggunakan _web browser_ seperti Google Chrome di alamat `http://127.0.0.1`. +Kemudian buka laman depan aplikasi menggunakan _web browser_ seperti Google Chrome di alamat aplikasi atas nama anda +atau di `http://127.0.0.1` jika anda menjalankannya secara lokal. Tampilan aplikasi akan terlihat serupa dengan _screenshot_ berikut:  @@ -106,7 +143,7 @@ Tampilan aplikasi akan terlihat serupa dengan _screenshot_ berikut: ## Templat Kode Spring Petclinic BDD Templat kode yang digunakan pada workshop hari ini mengadopsi templat _starter code_ [Serenity & Cucumber](https://github.com/serenity-bdd/serenity-cucumber-starter). -Templat kode telah dimodifikasi agar menggunakan contoh aplikasi Spring Petclinic secara lokal menggunakan _container_. +Templat kode telah dimodifikasi agar dapat menggunakan contoh aplikasi Spring Petclinic secara lokal menggunakan _container_. Sesuai dengan nama templat _starter code_ asli yang digunakan, kita akan menggunakan Serenity dan Cucumber. Serenity merupakan _test framework_ yang menyediakan _library_ dan mendukung proses otomasi test yang mengikuti alur BDD. @@ -306,7 +343,7 @@ public void shouldSeeTheSpecialty(Actor actor, String name) { Pada contoh kode di atas, objek `Actor` sama-sama menggunakan fungsi `attemptsTo` seperti pada fungsi _step definition_ untuk kalimat `When`. Hanya saja, parameter fungsi tersebut sebaiknya diisi dengan objek `PerformablePredicate` yang dapat dibuatkan oleh objek `Ensure`. -Objek `Ensure` menyediakan fungsi untuk merepresentasikan aksi verifikasi yang dilakukan oleh aktor terhadap kondisi akhir SUR. +Objek `Ensure` menyediakan fungsi untuk merepresentasikan aksi verifikasi yang dilakukan oleh aktor terhadap kondisi akhir SUT. Aksi verifikasi yang dilakukan oleh aktor adalah sebagai berikut: 1. Aktor melihat seluruh input field dengan atribut `name` atau `id` bernilai `spec_name`. @@ -607,6 +644,19 @@ dan fitur mengelola data pemilik binatang peliharaan ("Manage owner"). Pada waktu workshop yang tersisa, silakan lengkapi _test suite_ BDD dengan menambahkan deskripsi fitur dan skenario test bagi fitur-fitur yang belum diuji. +## Penutup + +Selamat! Anda telah mencapai hari terakhir dari kegiatan workshop internal. +Anda telah berlatih menerapkan otomasi kegiatan Software Quality Assurance, +serta menerapkan TDD dan BDD. + +Untuk bahan diskusi saat refleksi: + +- [ ] Apa perbedaan _test_ tradisional (yaitu, _test_ yang tidak memiliki keterkaitan dengan _requirements_) + dengan _test_ BDD? +- [ ] Apakah hasil eksekusi _test suite_ BDD anda stabil? +- [ ] Apa saja isu yang dapat terjadi ketika menguji SUT melalui simulasi interaksi terhadap _user interface_? + [1]: https://docs.google.com/presentation/d/1YQtWa0k45xCsa3Rugt-xfZxUSCg8uoMQepMASh1QEeU?usp=drive_fs [2]: https://gitlab.cs.ui.ac.id/pmpl/workshops/spring-petclinic-bdd/-/blob/development/docker-compose.yml [3]: https://gitlab.cs.ui.ac.id/pmpl/workshops/spring-petclinic-bdd/-/blob/development/src/test/resources/features/veterinarian/manage_specialties.feature