Kekutu Pada Program Pendaftaran Beasiswa LPDP

Kekutu!

Sebagai praktisi yang sehari-hari bekerja dengan kode dan produk teknologi informasi (selanjutnya saya sebut perangkat lunak), saya mempunyai kualifikasi untuk mengkritisi produk perangkat lunak dari instansi pemerintah. Saya ingin membahas bugs yang saya alami sendiri pada aplikasi pendaftaran beasiswa LPDP. Dan ini sangat menjengkelkan. Percayalah.

Analisa saya

Kekutu ini saya temukan saat saya hendak memperbarui data pada bidang "Informasi Lainnya". Pada bagian sertifikat bahasa asing, terdapat pilihan jenis sertifikat bahasa asing. Jika dipilih salah satu, pilihan sebelahnya akan otomatis menampilkan tingkat skor dari sertifikasi tersebut. Dalam hal ini saya memilih TOEFL iBT, dan range yang di tampilkan adalah 40 sampai 120.



Nah, disinilah (setelah saya analisa) letak kesalahannya. Event mengganti jenis sertifikasi bahasa asing itu ternyata juga menambah judul kolom baru, tapi tanpa menambah bidang masukan (form input). Hanya judul kolom saja. Aneh.



Hal ini tidak akan akan menimbulkan masalah, jika memang kolom nomor sertifikat memang tidak harus disi. Menjadi masalah, karena server tidak memvalidasi ada tidaknya nilai sebuah kolom saat data dikirim ke server.


Pada baris ke 199, kode tidak memerika terlebih dahulu apakah ada $_POST array dengan index no_sertifikat atau tidak ($_POST['no_sertifikat']; ). Mungkin pemrogram berasumsi semua ada isian form tersedia, jadi tidak perlu memeriksa satu persatu elemen form. 

Mengintip kode sumber

Ternyata, judul kolom "nomor sertifikat" tadi memang sudah ada pada kode html dari halaman tersebut. Entah saya sebelumnya tidak memperhatikannya, atau memang tadinya tersembunyi, dan event mengganti jenis sertifikasi bahasa asing tadi memunculkanya. Saya tidak memperhatikan sebelumnya.


Namun yang pasti, form isian untuk nomor sertifikat memang tidak ada, seperti terlihat pada gambar di bawah ini:

Saya juga sempat memeriksa kode javascript pada halaman tersebut. Dan tidak saya temukan kode untuk menambah elemen isian nomor sertifikat secara dinamis. 



Juga pada fungsi untuk menambah baris isian sertifikasi bahasa asing. Tidak ada elemen nomor sertifikat disana.

Jadi, memang tidak pernah ada form isian nomor sertifikat yang dikirim ke server.

Solusi

Saya tidak suka mengkritik tanpa menawarkan solusi. Tapi kalau dipikir lagi, sebenarnya ini kekutu yang sederhana: pemogram lupa menambahkan elemen form nomor sertifikat. Jadi, tinggal tambahkan form isian nomor sertifikat dengan nama form no_sertifikat. Beres.

Solusi yang lain, kekutu itu disebabkan oleh tidak adanya nilai $_POST['no_sertifikat']. Dalam bahasa pemrograman PHP, variabel atau elemen array yang belum didefinisikan tidak sama dengan null. Jadi mengakses elemen atau variabel tersebut akan menyebabkan runtime error. Undefined variable. Dalam hal ini, array $_POST dengan index no_sertifikat tidak ada. Unset. Untuk menghindari kekutu ini, bisa digunakan isset():

if (isset($_POST['no_sertifikat'])) {
// Variabel tersedia
}

isset() ini sebenarnya bukanlah sebuah fungsi, namun sebuah sintak khusus. Sintaks ini dikenali sebelum fase evaluasi, sehingga interpreter PHP bisa memeriksa ketersediaan sebuah variabel tanpa mencoba untuk mengakses nilainya.

Undefined index dalam ada dalam level E_NOTICE. Tidak terlalu berbahaya. Pemogram bisa mengganti error_reporting level, sehingga notice tersebut bisa diabaikan. Hal ini sangat direkomendasikan pada server produksi. Program akan jalan terus, dan variabel yang belum didefinisikan tadi akan bernilai null. Sebaliknya pada level pengembangan, sebaiknya error_resporting di setel supaya menampilan semua kesalahan. Hal ini akan sangat memudahkan pemrogram dalam fase pengembangan aplikasi.

Konklusi

Kesalahan sederhana ini merupakan salah satu bukti kurangnya kontrol kualitas pada lembaga pemerintahan kita. Dalam dunia pengembangan perangkat lunak, ada proses bernama QA test. Fase ini menguji coba perangkat lunak apakah bekerja sesuai ketentuan yang telah ditetapkan. Kekutu ini seharusnya bisa dideteksi pada fase tersebut. 
Saya berharap, lembaga-lembaga pemerintah bisa meningkatkan kualitas produk mereka. Terutama produk perangkat lunak, yang digunakan secara langsung oleh masyarakat. Produk perangkat lunak adalah solusi untuk mengurasi ribetnya birokrasi yang sudah terpatri (setidaknya dalam benak saya) pada instansi pemerintah. Kita tidak mau kan, ribetnya birokrasi hanya berpindah media penyampaiannya?


Informasi lebih lanjut:
http://php.net/manual/en/language.variables.basics.php#example-112
http://stackoverflow.com/questions/4261133/php-notice-undefined-variable-notice-undefined-index-and-notice-undef
http://stackoverflow.com/questions/10809937/undefined-index-with-post
http://php.net/manual/en/function.error-reporting.php

0 comments:

Post a Comment

 

Copyright © 2010 @setoelkahfi All Rights Reserved

Design by Dzignine