diff --git a/docs/workshops/day_1_sqa.md b/docs/workshops/day_1_sqa.md index e9b91b8b505a4a06a94a2fb0dc115a8d5d91a9b2..dbcd67d26c59a431f7b4ee94fd2c9e4ba7362511 100644 --- a/docs/workshops/day_1_sqa.md +++ b/docs/workshops/day_1_sqa.md @@ -158,7 +158,7 @@ Kemudian _Exercise_ dilakukan secara implisit ketika _Verify_ dilakukan pada con yaitu pemanggilan `assertNotEquals` akan memanggil implementasi `equals` milik masing-masing SUT dan membandingkan hasil kembaliannya. Pada contoh di atas, tidak ada prosedur _Teardown_ secara eksplisit. -Namun, anda bisa menganggap proses _garbage collection_ yang dilakukan _runtime_ (JVM) secara implisit sebagai prosedur _Teardown_. +Namun, anda bisa menganggap proses _garbage collection_ yang dilakukan _runtime_ Java (JVM) di akhir eksekusi test sebagai prosedur _Teardown_. Mari lihat contoh _test case_ lain yang lebih kompleks, yaitu _test case_ untuk _class_ `MainController`: @@ -554,7 +554,8 @@ void showList_countSecondVisit() throws Exception { Jalankan kembali _test case_ yang menyimulasikan satu kali dan dua kali kunjungan. Hasilnya akan lulus/_pass_. -Simpan hasil pekerjaan dengan membuat _commit_ Git lalu _push_ ke _fork_. +Simpan hasil pekerjaan dengan membuat _commit_ Git dengan pesan _commit_ seperti `[GREEN] Implement visit counter`, +lalu _push_ ke _fork_. ### Fase "Refactor" @@ -686,21 +687,24 @@ Mari mencoba untuk membuat proyek analisis baru yang akan menampung analisis Son 1. Masuk ke [SonarQube CSUI](https://sonarqube.cs.ui.ac.id) 2. Pilih "Add Project" > "Manually" dari laman depan daftar proyek di SonarQube. 3. Masukkan "Project Key" dan "Display Name" dengan format `sitodo-pmpl-[nama anda]`. - Misal: `sitodo-pmpl-bambang` - Kemudian pilih "Set up". + Kemudian pilih "Set up". Misalnya, _screenshot_ berikut menggambarkan pembuatan "Project Key" dengan nama `sitodo-pmpl-bambang`: +  4. Di layar berikutnya, pilih "Generate a token" dan salin nilai token yang dibuatkan oleh SonarQube. 5. Setelah membuat token, pilih opsi analisis menggunakan Maven. - SonarQube akan mencantumkan contoh perintah Maven yang dapat dipanggil untuk melakukan analisis secara lokal. + SonarQube akan mencantumkan contoh perintah Maven yang dapat dipanggil untuk melakukan analisis secara lokal, + seperti yang digambarkan pada _screenshot_ berikut: +  Silakan dicoba apabila ingin memastikan analisis SonarScanner berhasil dikirimkan ke SonarQube dari komputer anda. Selanjutnya, anda perlu memperbaharui konfigurasi Maven dan _pipeline CI/CD_ agar bisa membuat analisis SonarScanner dilakukan dengan benar di lingkungan CI: 1. Buka `pom.xml` kode proyek Sitodo PMPL, lalu ubah nilai _property_ `sonar.projectKey` dengan "Project Key" anda. -2. Buka konfigurasi variabel CI/CD di laman proyek _fork_ Sitodo PMPL dan tambahkan dua variabel baru bernama `SONAR_TOKEN` dan `SONAR_HOST`. - Isi `SONAR_TOKEN` dengan token yang dibuat sebelumnya, lalu isi `SONAR_HOST` dengan alamat SonarQube CSUI (https://sonarqube.cs.ui.ac.id). +2. Buka konfigurasi variabel CI/CD di laman proyek _fork_ Sitodo PMPL dan tambahkan dua variabel baru bernama `SONAR_TOKEN` dan `SONAR_HOST_URL`. + Laman konfigurasi variabel CI/CD dapat diakses di URL: `https://gitlab.cs.ui.ac.id/[akun GitLab CSUI anda]/sitodo-pmpl/-/settings/ci_cd` + Isi `SONAR_TOKEN` dengan token yang dibuat sebelumnya, lalu isi `SONAR_HOST` dengan alamat SonarQube CSUI (`https://sonarqube.cs.ui.ac.id`). Simpan pekerjaan anda. -Buat _commit_ Git dan _push_ ke _fork_ proyek Sitodo PMPL. +Buat _commit_ Git dan _push_ ke _fork_. ### Latihan Singkat: Mengurangi Tingkat Kompleksitas Kode Melalui Refactoring @@ -752,8 +756,11 @@ public String computeMotivationMessage(TodoList todoList) { } ``` -Implementasi fungsi `computeMotivationMessage` di atas memiliki nilai Cognitive Complexity sebesar 17. -Tingkat kompleksitas pada kode dapat dikurangi dengan cara menyederhanakan bagian yang mengandung percabangan. +Implementasi fungsi `computeMotivationMessage` di atas memiliki nilai Cognitive Complexity sebesar 17 menurut temuan SonarScanner. +Angkat tersebut diperoleh dengan menerapkan heuristik yang telah disusun oleh SonarScanner. +Ide dasar perhitungan nilai kompleksitas pada tolok ukur Cognitive Complexity adalah semakin banyak tingkat kedalaman sebuah percabangan, +maka akan semakin kompleks kode tersebut. +Oleh karena itu, tingkat kompleksitas pada kode dapat dikurangi dengan cara menyederhanakan percabangan. Dapat dilihat bahwa terdapat percabangan yang mengandung duplikasi, yaitu pembuatan pesan motivasi berdasarkan jumlah tugas yang tersisa. @@ -830,10 +837,20 @@ Jika masih ada waktu tersisa, maka lihat koleksi _code smells_ yang telah diiden Kemudian, pilih minimal tiga buah _code smells_ dan coba perbaiki _code smells_ tersebut. Untuk setiap perbaikan sebuah _code smell_, simpan pekerjaan anda sebagai _commit_ Git dengan pesan _commit_ yang mencantumkan nama _code smell_ terkait. +Berikut ini ada beberapa kategori _code smells_ yang dapat diperbaiki, +terurut berdasarkan tingkat kesulitan, +dan dapat diselesaikan dalam waktu singkat: + +- _Remove this `public` modifier_ +- _Declare this local variable with `var` instead_ +- _Define a constant instead of duplicating this literal string `n` times_ +- _This `for`` loop can be replaced by a `foreach` loop_ + ## Penutup -Anda sudah mencoba secara garis besar bagaimana menerapkan TDD -serta bagaimana aktivitas penjaminan kualitas dapat dilakukan dengan bantuan _tools_. +Anda sudah mencoba secara garis besar penerapan TDD +dan aktivitas penjaminan kualitas dengan bantuan _tools_. +Sebelum mengakhiri workshop, jangan lupa menyimpan hasil pekerjaan sebagai _commit_ Git dan _push_ ke _fork_. Untuk bahan diskusi saat refleksi: diff --git a/docs/workshops/day_2_tdd.md b/docs/workshops/day_2_tdd.md index eeb0b3e81a45bc8ad41a7cdbac06fc562cfd6e40..91dd05b304eecbb868dc046163f187c6b709c798 100644 --- a/docs/workshops/day_2_tdd.md +++ b/docs/workshops/day_2_tdd.md @@ -1,6 +1,6 @@ # Day 2: Test-Driven Development -* Session 1: 9:00 - 10:00: [Testing Category][1] +* Session 1: 09:00 - 10:00: [Testing Category][1] * Session 2: 10:15 - 11:45: Hands-on: A bigger Case study * Session 3: 13:00 - 15:00: Hands-on: A bigger Case study * Session 4: 15:30 - 16:30: Overview, Discussion, Lesson learned diff --git a/docs/workshops/images/Screenshot 2023-11-02 at 06-43-41 sitodo-pmpl-bambang.png b/docs/workshops/images/Screenshot 2023-11-02 at 06-43-41 sitodo-pmpl-bambang.png deleted file mode 100644 index 3fb90aaffeffb6bf09cb0af62c155dd5bb597cf0..0000000000000000000000000000000000000000 Binary files a/docs/workshops/images/Screenshot 2023-11-02 at 06-43-41 sitodo-pmpl-bambang.png and /dev/null differ diff --git a/docs/workshops/images/Screenshot 2023-11-02 at 06-43-05 Add a project.png b/docs/workshops/images/day_1_sqa_-_create_project_sonarqube.png similarity index 100% rename from docs/workshops/images/Screenshot 2023-11-02 at 06-43-05 Add a project.png rename to docs/workshops/images/day_1_sqa_-_create_project_sonarqube.png diff --git a/docs/workshops/images/day_1_sqa_-_maven_sonarqube.png b/docs/workshops/images/day_1_sqa_-_maven_sonarqube.png new file mode 100644 index 0000000000000000000000000000000000000000..a5d1ea7a68ee4135d3d389000d79d8aecca9fcba Binary files /dev/null and b/docs/workshops/images/day_1_sqa_-_maven_sonarqube.png differ