DISKON TERBATAS! Masukkan kupon "skillbaru" saat checkout di kelas apa saja
Skodev
Belajar coding dalam bahasa Indonesia
Pelajari strategi bagaimana cara meminimalisir terjadinya kesalahan saat membuat perubahan pada aplikasi.
Daftar Isi:
Sebelum merilis aplikasi ke publik, kita bisa bebas membuat perubahan sebesar apapun. Karena hanya kita yang menggunakan aplikasi tersebut.
Namun, ketika aplikasi sudah rilis ke publik, kita tidak bisa lagi mengubah aplikasi dengan semena-mena, karena jika perubahannya bermasalah, maka pengguna akan kecewa dan tidak akan menggunakan aplikasi kita lagi.
Oleh karena itu, sebaiknya kita lakukan langkah-langkah yang bisa meminimalisir terjadinya kesalahan.
Meskipun kita sudah berusaha sebaik mungkin, kita tidak bisa menjamin bahwa perubahan yang kita buat tidak akan bermasalah. Oleh karena itu, kita perlu mempersiapkan apabila terjadi hal terburuk.
Sebelum melakukan perubahan, pastikan kita sudah melakukan back up data. Dengan melakukan back up data, kita bisa mengembalikan data ke kondisi semula jika terjadi masalah.
Yang perlu di back up bisa jadi antara lain:
Tapi tidak semua wajib di back up, karena tergantung perubahan apa yang kita lakukan.
Rollback adalah proses mengembalikan aplikasi ke versi sebelumnya. Jika terjadi masalah setelah perubahan, maka kita bisa melakukan rollback untuk mengembalikan aplikasi ke versi sebelumnya.
Supaya bisa melakukan rollback, kita bisa gunakan cara-cara berikut:
Pastikan saat melakukan perubahan, kita memberikan waktu yang cukup untuk memeriksa dan mengawasi aplikasi. Sehingga, jika ditemukan adanya masalah, kita bisa segera memperbaiki masalah tersebut.
Jadi, sebaiknya kita tidak melakukan perubahannya di penghujung waktu kerja, atau jadwalkan waktu lembur dari awal jika perlu.
Jika perubahan yang dilakukan memerlukan downtime atau waktu aplikasi tidak bisa diakses, maka jadwalkan perubahan pada waktu yang tepat. Misalnya, jadwalkan perubahan pada waktu-waktu yang sedikit pengguna, atau jadwalkan perubahan pada waktu yang tidak krusial.
Observability tools adalah tools yang digunakan untuk memantau aplikasi. Dengan observability tools, kita bisa melihat bagaimana aplikasi berjalan, dan jika terjadi masalah, tools tersebut bisa memberitahu kita tentang detail masalah tersebut seperti:
Beberapa contoh observability tools yang bisa kita gunakan adalah:
Seiring waktu, aplikasi yang aktif digunakan biasanya akan mengalami perubahan. Contohnya berupa perbaikan bug, penambahan fitur, atau perubahan lainnya.
Sebuah perubahan terkadang bisa mengubah cara kerja aplikasi secara signifikan dan berisiko memunculkan masalah-masalah yang tidak dapat diprediksi.
Oleh karena itu, kita memerlukan strategi agar efek samping dari perubahan yang kita buat bisa diminimalisir.
Backward compatibility adalah kemampuan aplikasi untuk tetap berjalan dengan baik meskipun ada perubahan pada aplikasi tersebut dengan mempertahankan dukungan terhadap versi-versi sebelumnya.
Misalnya, kita memiliki data user seperti berikut:
id | first_name | last_name | |
---|---|---|---|
1 | Alice | Zuberg | alice@example.com |
Kemudian kita ingin mengubah kolom first_name
dan last_name
menjadi full_name
.
id | full_name | |
---|---|---|
1 | Alice Zuberg | alice@example.com |
Jika kita langsung mengubah first_name
dan last_name
menjadi full_name
pada kode dan database, maka kita harus memastikan proses deploy berjalan dengan baik, seperti:
Selama menjalankan langkah-langkah di atas, aplikasi tidak bisa diakses oleh pengguna, jadi kita hanya bisa men-deploy-nya pada waktu-waktu tertentu. Kemudian, jika ditemukan ada masalah muncul setelah deploy, maka kita perlu melakukan rollback, yaitu mengembalikan aplikasi ke versi sebelumnya.
Pada contoh di atas, proses rollback tidak terlihat sulit. Tapi, pada perubahan yang lebih besar, proses rollback bisa memakan waktu yang cukup lama.
Oleh karena itu, sebaiknya kita pertahankan backward compatibility. Sehingga, langkah yang kita lakukan adalah seperti ini:
full_name
pada database tanpa menghapus kolom first_name
dan last_name
.id | first_name | last_name | full_name | |
---|---|---|---|---|
1 | Alice | Zuberg | Alice Zuberg | alice@example.com |
full_name
.// Sebelum
const user = {
"first_name": "Alice",
"last_name": "Zuberg",
"email": "alice@example.com"
};
createUser(user);
// Sesudah
const user = {
"full_name": "Alice Zuberg",
"first_name": "Alice",
"last_name": "Zuberg",
"email": "alice@example.com"
};
createUser(user);
full_name
, tetapi ketika full_name
tidak ada, maka gunakan first_name
dan last_name
if (user.full_name !== '') {
return user.full_name;
} else {
return `${user.first_name} ${user.last_name}`;
}
Dengan begitu, kita jadi mendapat beberapa keuntungan:
Setelah kita yakin bahwa semua bagian aplikasi sudah menggunakan full_name
, maka kita bisa menghapus kolom first_name
dan last_name
dari database.
Kemudian, jika tidak ada masalah setelah penghapusan kolom dari database, kita bisa menghapus kode yang tidak digunakan lagi.
Dalam dunia aplikasi mobile dan desktop, terkadang pengguna tidak menggunakan versi terbaru dari aplikasi. Jika aplikasi tersebut berinteraksi dengan API di server, maka kita wajib untuk membuat versioning.
Feature flag adalah teknik yang memungkinkan kita untuk mengontrol fitur yang akan diaktifkan atau dinonaktifkan. Dengan feature flag, kita bisa mengaktifkan fitur baru hanya untuk sebagian pengguna, atau mengaktifkan fitur baru hanya untuk pengguna yang kita pilih.
Baca lebih detail apa itu feature flag
Dengan feature flag, kita bisa menguji fitur baru tanpa harus merilisnya ke publik. Jika fitur baru tersebut bermasalah, kita bisa menonaktifkannya dengan cepat.
Salah satu cara termudah untuk membuat feature flag adalah dengan menggunakan konfigurasi. Misalnya, kita bisa membuat konfigurasi seperti ini:
FEATURE_FLAG_NEW_FEATURE=true
Kemudian, kita bisa menggunakan konfigurasi tersebut pada kode aplikasi:
if (process.env.FEATURE_FLAG_NEW_FEATURE) {
// Tampilkan fitur baru
} else {
// Tampilkan fitur lama
}
Programmer yang baik pasti menguji perubahan aplikasi sebelum di rilis ke publik. Tapi, tidak semua programmer melakukan testing yang efektif. Testing yang efektif berarti testing yang menguji semua kemungkinan yang bisa terjadi pada aplikasi. Agar bisa melakukan testing yang efektif, kita perlu melakukan hal berikut:
Test case adalah daftar kasus yang akan diuji. Test case bisa berupa daftar input dan output yang diharapkan, atau daftar langkah-langkah yang harus dilakukan untuk menguji aplikasi.
Kita bisa menulis test case di mana saja; di notepad, excel, maupun software lain yang bisa digunakan untuk menulis. Dari pengalaman saya, kebanyakan QA yang saya temui menggunakan Google Sheet untuk menulis daftar test case.
Misalnya, kita ingin menguji sebuah fitur manajemen pengguna, maka kita bisa membuat test case seperti ini:
No Langkah | Langkah Tes | Hasil yang Diharapkan | Hasil |
---|---|---|---|
1 | Klik menu manajemen pengguna | Halaman manajemen pengguna terbuka | ✅ |
2 | Klik tombol tambah pengguna | Halaman tambah pengguna terbuka | ✅ |
3 | Isi form tambah pengguna | Form terisi | ❌ Tidak dapat memilih role karena tidak muncul |
4 | Klik tombol simpan pengguna | Muncul toast dan pindah ke halaman edit pengguna | ❗ Belum dapat dilakukan |
Dengan menuliskan test case, kita bisa menguji semua kemungkinan yang bisa terjadi pada aplikasi dengan cermat dan tercatat.
Beda halnya jika kita tidak menuliskan test case, maka kita jadi menguji aplikasi secara asal-asalan, dan kemungkinan besar bisa melewatkan beberapa kasus yang bisa terjadi pada aplikasi.
Setelah membuat test case, kita bisa menguji aplikasi dengan test case tersebut. Namun, jika kita menguji aplikasi secara manual, maka kita akan membuang banyak waktu dan tenaga. Terlebih lagi, tidak jarang suatu perubahan itu bisa tanpa sengaja merusak fitur yang sudah berjalan dengan baik. Oleh karena itu, kita perlu menggunakan automated testing.
Automated testing adalah proses pengujian aplikasi dengan menggunakan software yang bisa menguji aplikasi secara otomatis. Dengan automated testing, kita bisa menguji aplikasi dengan cepat dan efektif.
Ada banyak software automated testing yang bisa kita gunakan, seperti Selenium, Cypress, dan lain-lain.
Ilustrasi
Halo, saya Faqih, Product Engineer yang hobi ngoding dan desain. Saya di sini ingin menjerumuskan kamu agar menyukai programming dan bisa membangun aplikasi yang berkualitas