Pada tutorial kali ini, saya telah menerapkan beberapa prinsip clean code. Saya selalu berusaha untuk memberi nama-nama variabel yang singkat, tetapi jelas dalam kode saya. Selain itu, saya juga secara aktif berusaha untuk menulis fungsi-fungsi yang kecil dan hanya melakukan satu hal saja, yaitu sesuai dengan nama fungsinya. Namun, saya merasa kode saya masih kurang dalam aspek keamanan. Yang menurut saya paling menonjol, kode saya belum mengimplementasikan sistem autentikasi dan otorisasi. Hal itu mengakibatkan semua orang dapat mengubah dan menghapus produk milik siapa pun. Selain itu, pada saat ini, saya masih mengoper ID produk yang ingin di-edit melalui parameter URL. Konsekuensi hal tersebut adalah seseorang dapat mengirim request untuk meng-edit barang tanpa harus melalui website saya, seperti dengan menggunakan aplikasi Postman. Selain itu, saya masih belum mengimplementasikan kode untuk mencegah serangan CSRF sehingga itu dapat menjadi sebuah vulnerability juga.
- Setelah menulis unit test dan functional test, saya semakin yakin dengan kebenaran program saya. Dengan adanya tes-tes yang otomatis ini, saya dapat memeriksa kebenaran program saya dengan mudah setiap kali saya membuat perubahan. Saya tidak perlu khawatir lagi apakah saya ada yang terlewat seperti ketika saya mengetes program saya secara manual. Menurut saya, kita sebaiknya menulis setidaknya satu test untuk tiap method yang ada di dalam kelas yang ingin kita test. Kemudian, mengenai 100% code coverage, menurut saya hal tersebut tidak menandakan program yang bebas dari bug dan error. Code coverage adalah sebuah metric yang mengukur berapa persen source code dari program kita yang dieksekusi saat menjankan suatu test suite. Namun, test suite tersebut tetap harus dibuat oleh kita sehingga masih ada kemungkinan human error, seperti tidak memikirkan suatu edge case saat menulis tes-tesnya.
- Menurut saya, kebersihan kode tersebut akan menurun apabila dilakukan hal seperti itu. Saya mengakatan demikian karena
salah satu prinsip penting clean code adalah DRY atau don't repeat yourself. Kedua test suite tersebut pasti akan
banyak memiliki kode yang sama karena prosedur yang dilakukan keduanya sangat mirip. Dengan adanya kode yang mirip pada dua
tempat berbeda, kita akan lebih susah membuat perubahan pada kode karena sekarang kita harus mengubahnya pada dua tempat.
Hal tersebut dapat meningkatkan risiko lupa dan tidak teliti. Karena dua test suite ini masih berkaitan dengan pembuatan
produk, menurut saya tidak apa-apa jika digabungkan menjadi satu test suite saja. Dengan digabungkannya menjadi satu,
kita dapat membuat satu fungsi seperti fungsi
setup()
yang akan pergi ke halaman Create Product dan membuat beberapa produk baru. Setelah itu, baru kita dapat membuat fungsi-fungsi lain untuk mengecek kebenaran produk-produk yang dibuat oleh fungsisetup()
tadi, seperti mengecek jumlah produk yang telah dibuat, mengecek namanya, dan sebagainya.
-
Isu-isu yang saya perbaiki pada latihan ini adalah
- Menambahkan elemen
<caption>
ke dalam tabel HTML untuk memperbaiki isu tabel HTML yang tidak memiliki deskripsi - Menggunakan bantuan https://app.stepsecurity.io yang direkomendasikan GitHub untuk memperbaiki isu-isu keamanan pada file
.yml
, seperti isu token permissions. - Mengubah field injection menjadi constructor injection pada kelas controller dan service
- Menghilangkan modifier public pada semua kelas test \
Strategi yang saya gunakan untuk mengatasi masalah ini adalah melihat rekomendasi yang diberi GitHub dan SonarCloud. Kemudian, saya pahami mengapa hal itu direkomendasikan dan baru saya imlpementasikan pada kode saya.
- Menambahkan elemen
-
Menurut saya iya, implementasi saya sudah memenuhi definisi CI/CD. Continuous integration merujuk pada praktek pengembangan software di mana tiap perubahan yang dilakukan developer dites dan diintegrasikan ke dalam codebase secara otomatis oleh sebuah build script. Continuous deployment merujuk pada praktek pengembangan software yang men-deploy kode baru ke lingkungan production secara otomatis tiap kali ada perubahan. Pada codebase saya, kedua hal itu sudah terpenuhi. CI dipenuhi dengan GitHub Actions yang menjalankan test secara otomatis tiap kali kode baru di-push. Selain itu, SonarCloud juga akan melakukan static code analysis pade codebase untuk mendeteksi isu-isu, seperti bug dan code smell. CD dipenuhi deployment otomatis ke Koyeb setiap kali ada perubahan kode di branch main. Deployment otomatis ini sudah datang dari Koyeb-nya sendiri sehingga tidak perlu membuat GitHub Workflow baru.