Pendahuluan

Software yang bagus ? sepertinya pertanyaannya terlalu luas.

Banyak definisi mengenai software yang bagus itu seperti apa.

Tentunya software yang bagus itu adalah software yang sempurna.

Sempurna dari sisi fungsi, bisa di debug, mudah dimodifikasi, user friendly kalau berkaitan dengan pengguna, dokumentasi lengkap, dan hal-hal lain yang tentunya bagus.

Namun pada kenyataannya tidak ada software yang sempurna.

Apalagi kalau software tersebut berada pada tahapan awal pembuatan, atau versi release alpha, betha, dan release awal.

Kalau tidak ada software yang sempurna, lalu apa prioritasnya ?


Nah, kalau memang tidak ada software yang sempurna, maka tentunya ada prioritas pilihan dalam menentukan bahwa software itu dianggap bagus , yaitu :



1. Benar maksimal secara fungsi dan sesuai kebutuhan.



Ini adalah kriteria utama.

Software yang bagus itu mesti berfungsi maksimal sesuai dengan yang diharapkan.

Kalau kita menginginkan Software yang bisa mengirimkan email kepada customer, maka ketika ternyata Software itu mengirimkan sms dan bukan email. Maka hal ini tidak sesuai dengan fungsi dan kebutuhan awalnya.

Misalkan seperti di dunia nyata, misalnya kita ingin membuat raket tenis, ternyata yang kita dapatkan adalah raket nyamuk.

Secara fungsional, raket nyamuk bisa untuk dipakai bermain tenis dan memiliki fungsionalitas tambahan.

Akan tetapi, raket nyamuk tidak maksimal untuk kebutuhan bermain tenis.

Raket tenis walaupun tidak mempunyai fasilitas tambahan, tetapi cocok dan berfungsi maksimal untuk bermain tenis dengan gaya apapun.



2. Bebas dari bug dan kesalahan



Ini adalah kriteria kedua yang penting. Software yang bagus itu mesti bebas dari bug dan kesalahan logika.

Misalkan kita ada fitur pengiriman email, akan tetapi ternyata kalau penerima emailnya seharusnya ada 2 alamat email, ternyata waktu Software nya dijalankan ternyata cuma satu alamat email yang terkirim/diterima. Ini adalah bug yang mungkin hanya diketahui waktu Softwarenya di jalankan.

Bug di Software itu termasuk sesuatu yang wajar di waktu development.

Jarang Software yang bebas dari bug.

Akan tetapi bug itu mestinya muncul dari ketidaksengajaan. Biasanya karena :

  • Kurang lengkap dalam menganalisa kasus yang mungkin terjadi.
  • Menganggap kasus tersebut bisa tidak dihiraukan atau dikesampingkan

Walaupun bug itu adalah wajar, tetapi harus dilakukan perbaikan/refactoring secara terus menerus agar tidak ada lagi bug yang tersisa.

Oleh karenanya Software yang bagus itu adalah Software yang dilakukan perbaikan terus menerus agar bebas dari bug dan kesalahan logika.



3. Mudah dites secara keseluruhan atau per bagian.


Software terdiri dari komponen-komponen kecil yang masing-masing mempunyai fungsi tersendiri. Sebuah software bisa berfungsi baik jika masing-masing bagian dari software tersebut berfungsi dengan baik pula. Sebuah software yang bagus adalah hasil orkestrasi dari banyak bagiannya.

Untuk memastikan tiap bagian berfungsi dengan baik, maka harus dipastikan bahwa software itu bisa dites secara keseluruhan, dan juga tiap bagian software itu juga bisa dites dengan mudah.

Untuk memastikan bisa dites dengan mudah, maka muncullah yang namanya prinsip-prinsip Software Engineering untuk memastikan hal tersebut. Prinsip SOLID, GRASP, DRY, KISS, dll merupakan salah satu upaya dalam membuat sebuah Software menjadi mudah untuk dites dan dijalankan fungsinya secara terpisah.

Testing adalah salah satu pilar penting dalam software develoment. Testing dalam sisi filosofis bukan berarti hanya testing menggunakan Unit test, integration test, dll, akan tetapi lebih kepada memastikan semua hal yang dibuat sesuai dengan ekspektasi awal.

Kenyataan yang ada adalah :

Jarang software yang bebas dari bug / kesalahan program / missing logic pengecekan kondisi tertentu.

Akan ada selalu ruang untuk refactoring/perbaikan. Perbaikannya pun tidak harus dilakukan oleh orang yang sama.

Sekali ada perubahan, harus dipastikan bahwa Software nya tetap berfungsi seperti sebelumnya. Oleh karenanya perlu pengujian yang lengkap untuk memastikan itu.

Hal ini bisa dicapai jika Software Engineer sebelumnya membuat Unit Test, Integration Test, ataupun tes-tesan yang cukup lengkap dan mudah untuk menguji Software tersebut.



4. Mudah dimodifikasi, diextensifikasi, ataupun di-reused (digunakan oleh software lain)


Perubahan adalah keniscayaan untuk sebuah Software yang kita buat.

Yang pasti itu adalah perubahan.

Kalimat diatas juga berlaku bagi Software Development. Apalagi di zaman sekarang yang kebutuhan akan digitalisasi bertumbuh sangat cepatnya. Perubahan perlu diadaptasi oleh Software yang sedang berjalan.

Perubahan itu akan mudah dilakukan jika kita membuat struktur dari Software kita dengan cara yang bagus.

Disinilah kemudian muncul terminologi Design Pattern, Algoritma Pattern, ataupun Architecture Pattern. Dimana di istilah-istilah tersebut disebutkan mengenai pola dan desain untuk membuat Software kita menjadi mudah dimodifikasi, diextensifikasi, ataupun di-reused (digunakan oleh software lain).

Kenapa hal ini menjadi penting ?

Karena waktu adalah aset berharga dari seorang Software Engineer (hmm… sebenarnya bagi semua orang sih) 🐼

Pada kenyataannya pekerjaan modifikasi, extensifikasi, dan reusability itu bahkan menyita kebanyakan waktu dari Software Engineer.

Bukan karena ketidak mampuan Software Engineer dalam melakukannya, akan tetapi karena banyak perubahan yang mesti dilakukan agar perubahan tersebut tercapai. Istilahnya, perubahannya banyak “menyenggol” fitur-fitur lain dari Software tersebut.

Oleh karenanya bisa saja muncul istilah code “Code Senggol Bacok” misalnya, yaitu ketika kita mencoba mengubah beberapa baris code, maka akan banyak flow code yang akan breaking/tidak bisa berjalan sebagaimana mestinya.

Hal ini karena desain code dan struktur data yang tidak ramah terhadap perubahan yang nanti bisa saja terjadi.

Padahal dengan mengikuti pakem dan struktur yang sudah teruji, maka modifikasi, extensifikasi, dan reusability bisa dilakukan dengan lebih mudah.


Demikian 4 kriteria awal bagaimana sebuah Software dianggap bagus. Ada kriteria-kriteria lain yang merupakan kriteria tambahan yang dapat dimasukkan juga , tetapi biasanya sudah merupakan turunan dari poin-poin diatas.