📦 Semantic versioning untuk kalian yang belum tau

Ivan Fadila Putra / December 22, 2020

5 min read––– views

Tulisan ini diperuntukkan bagi kalian yang belum tau tentang Semver aka Semantic versioning, ya walaupun saya sendiri masih sedikit demi sedikit implementasinya di real project.

Jika kalian ingin membuat perangkat lunak, framework, library pastinya akan melakukan versioning dan sudah menjadi standard bagi orang yang membuat dan merilis kode atau project buatannya.

Familiar dengan format angka seperti ini 1.2.11 ?

Seperti yang kalian lihat, angka 1.2.11 bukanlah nomor togel maupun nomor keberuntungan yang lainnya, Melainkan bentuk implementasi dari semver itu sendiri dan terdapat 3 istilah dalam melakukan versioning : MAJOR.MINOR.PATCH

Kurang lebih kayak gini :

  • 1 : Dari digit pertama adalah major version nya dan apabila major sudah menggunakan nilai 1 berarti software tersebut baru dirilis ke publik, singkatnya software sudah stabil untuk digunakan.

  • 2 : Digit kedua adalah minor version adalah tentang menambah fungsionalitas baru pada sistem alias tentang fitur baru pada sistem dan tanpa menyebabkan dampak yang terjadi pada versi sebelumnya(major).

  • 11 : Digit terakhir ini diibaratkan adalah patch-nya, anngap aja tentang fix bug yang terjadi pada sistem yang terjadi.

Ada juga yang memakai istilah seperti pre-release yang diberikan pada tag patch, seperti 1.0.0-alpha atau 1.0.0-beta di penamaan yang diberikan pada versi alpha ataupun beta.

Oke lanjutt....

Kita analogikan setiap versioningnya agar lebih enak dipahami ✍🏻

Major

Untuk di level aplikasi seharusnya major version meminimalisir perubahan yang terlalu cepat pada sebuah fitur, atau pengguna yang pakai aplikasi kalian pada repot mempelajari lagi dan akhirnya kabur .

Perumpamaannya gini ...

Semisal kita memilik aplikasi sosial media, kemudian rilis dengan versi 1.0.0 dengan fitur utama membuat story. Dan kemudian kita melakukan bumping version ke versi 2.0.0 dengan menghilangkan fitur story dengan alasan tertentu misalnya, bisa juga melakukan perubahan yang mungkin mempengaruhi fitur yang lain sehingga major change dilakukan.

Minor

Minor version berbeda dengan major, di minor version adalah tentang menambahkan "fitur baru" dan tidak berpengaruh pada perubahan fitur lain. Misal, apabila sebelumnya "aplikasi sosial media hanya menampilkan story saja" kini ada update dimana aplikasi sosial media kamu versi 1.1.0 dengan catatan : "Di fitur story sudah bisa disertai sticker lohhh kak" dan tanpa mempengaruhi fitur lain loh yaa.

Yapp, kurang lebih seperti itu untuk minor update ✌

Patch

Patch version biasanya melakukan semacam fix bug pada suatu sistem dan tidak menyebabkan hal krusial pada major. Misal, di versi 1.1.0 terdapat bug seperti : "Wah mau update story tombolnya ilang nih di device advan" kemudian kalian pengembang akan melakukan update ke versi 1.1.1 dengan catatan : "Fix bug di hape advan, dan mending anda upgrade device aza bozzzzz 😉".

Demonstrasi

Kita akan membuat demonstrasi sederhana tentang penerapan semver pada aplikasi. Karena merintis sebuah aplikasi dan status belum stable maka kita dapat merilis dengan versi 0.3.0 dengan catatan :

  • Aplikasi dapat melakukan login
  • Aplikasi dapat melakukan register
  • Dashboard untuk user

Dengan fitur tersebut, maka kita memliki success criteria seperti ini :

  • User dapat melakukan registrasi
  • Setelah registrasi dapat melakukan login dengan username, password dan masuk ke Dashboard

Kemudian selang beberapa saat tim ingin menambah fitur baru, semisal menambah fitur lupa password pada sistem tapi dengan catatan fitur itu tidak mempengaruhi fitur yang lain. Apabila terjadi pengaruh pada fitur lain maka harus melakukan bumping pada major version.

Dengan tambahan fitur "lupa password" tersebut maka versi 0.4.0 akan menjadi seperti ini :

  • Aplikasi dapat melakukan login
  • Aplikasi dapat melakukan register
  • Dashboard untuk user
  • Lupa password untuk user yang pikun

Nah tanpa disadari ternyata terdapat bug pada sistem kalian, misalnya seperti ini : "Wah setelah login, tombol logout nya hilang nih :( ". Kemudian melakukan fix bug tersebut dan merubah versi nya menjadi 0.4.1 dengan catatan "Fixing tombol logout yang hilang bozzz, lupa kekomen di codenya xixixi".

Setelah proses yang lumayan panjang, apabila aplikasi sudah stabil dan layak digunakan untuk umum, kalian bisa merilis major version nya menjadi 1.0.0 dengan fitur fitur yang sudah dideskripsikan sebelmnya.

Ada juga tahapan pre-release dan memiliki tahapan level yang berbeda seperti Alpha, Beta, Release candidate. Ada juga Release candidate adalah ketika aplikasi kalian sudah teruji dari versi alpha dan beta. Silahkan baca lengkapnya disini.

Kesimpulan

Versioning memang kelihatannya simple, tapi yang membuat effort besar dan ribet adalah hidup kalian yang kebanyakan overthingking strategi perilisan setiap aplikasi yang akan di deliver. Dan ada yang bertanggung jawab me-manage di sisi perilisan aplikasi semacam ini, serta meminimalisir major change yang terlalu cepat agar dari segi bisnis tetap stabil dan tidak kehilangan user :) , Ingat kejadian gojek ketika UI nya berubah drastis kemarin? kalo gatau mending rakit pc aja.

Seharusnya versioning juga melibatkan tim lain tidak hanya dari sisi developer saja, untuk membuat catatan release pun harus ada dari sisi developer, user, designer (kalau ada) dan memiliki alasan kuat untuk melakukan update ke versi 1.1.x misal.

Tata cara penulisan CHANGELOG perilisan bisa mampir ke tautan ini

Terima kasih sudah membaca 🥳 semoga bermanfaat bagi aku, kamu dan calon mertua....

btw, untuk kalian yang UMRnya sudah 2x lipat klaten, ngetip juga boleh kok di saweria WKWKWK

Referensi