Kekokohan (ilmu komputer)

Dalam ilmu komputer, kekokohan adalah kemampuan dari sistem komputer untuk menangani eror dalam eksekusi[1] dan masukan yang bermasalah.[2] Kekokohan dapat meliputi berbagai area dalam ilmu komputer, seperti pemrograman kokoh, pemelajaran mesin kokoh, dan keamanan jaringan kokoh. Teknik formal seperti fuzz testing, sangat penting untuk menunjukkan kekokohan karena pengujian tipe ini melibatkan masukan tidak sah dan tidak tertuga. Selain itu, injeksi kesalahan juga dapat digunakan. Berbagai produk komersial melakukan pengujian analisis kekokohan perangkat lunak.[3]

Pengenalan

sunting

Secara umum, sulit untuk membangun sistem yang kokoh dan meliputi seluruh titik kelemahan karena jumlah kombinasi masukan dan luaran amat banyak.[4] Pengujian terhadap semua kombinasi masukan dan luaran memakan terlalu banyak waktu dan para pengembang tidak mungkin melaksanakannya satu-persatu. Karena itu, mereka mengelompokan kasus-kasus yang serupa.[5] Sebagai contoh, bayangkan anda memasukkan beberapa nilai integer. Beberapa masukan tersebut mungkin berupa bilangan negatif, nol, atau bilangan positif. Untuk menguji perangkat lunak, pengembang menggunakan hanya tiga bilangan tersebut untuk menguji seluruh set bilangan riil. Cara ini lebih efisien, tapi lebih riskan pula. Pengelompokan kasus uji adalah satu dari banyak cara untuk menangani kegagalan, khususnya kegagalan karena masukan tidak sah. Secara umum, sistem juga dapat gagal karena alasan-alasan lain, seperti terputus dari jaringan.

Sistem yang kompleks harus dapat menangani semua eror dengan mulus, bagaimanapun caranya. Ada banyak contoh sistem yang sukses dan kokoh. Beberapa sistem paling kokoh dapat berevolusi dan diadaptasi pada situasi baru dengan mudah.[4]

Tantangan

sunting

Program dan perangkat lunak adalah alat untuk melakukan sebuah tugas yang spesifik, sehingga tidak fleksibel.[4] Meskipun begitu, dengan mengamati sistem internet dan sistem biologis, kita dapat menemukan cara adaptasi mereka terhadap lingkungannya. Salah satu cara sistem biologis beradaptasi terhadap lingkungan adalah menggunakan redundansi.[4] Banyak organ di tubuh kita (manusia) bersifat redundan. Ginjal salah satunya. Umumnya, manusia hanya membutuhkan satu ginjal, tetapi memiliki ginjal kedua memberikan ruang kegagalan atau room for failure. Prinsip ini dapat diterapkan pada perangkat lunak, tetapi ada beberapa tantangan. Ketika menerapkan prinsip redundansi pada ilmu komputer, tidak disarankan menambahkan kode dengan semena-mena. Penambahan kode secara asal akan mengenalkan lebih banyak eror kepada sistem, membuat sistem menjadi lebih kompleks , dan sulit dimengerti.[6] Kode baru yang tidak menguatkan kode yang sudah ada tidak diinginkan. Sebaliknya, kode baru harus memiliki kegunaan yang setara. Sehingga, jika suatu fungsi tidak bekerja, fungsi lain yang melakukan hal yang sama dapat menggantikannya. Dapat dikerjakan dengan keragaman perangkat lunak manual atau otomatis. Untuk itu, kode baru harus tau kapan dan bagaimana menangani titik kegagalan.[4] Berarti, lebih banyak logika dibutuhkan dalam sistem tersebut. Tetapi, seiring penambahan logika dalam sistem, komponen dan ukurannya bertambah dan menjadikannya lebih kompleks. Secara singkat sistem yang lebih redundan pasti lebih kompleks. Pengembang harus mempertimbangkan keseimbangan antara redundansi dan kompleksitas.

Dewasa ini, ilmu komputer dalam prakteknya tidak terlalu mementingkan membangun sistem yang kokoh.[4] Sebaliknya, mereka lebih terfokus pada skalabilitas dan efisiensi. Salah satu alasannya adalah sulit untuk membangun kekokohan secara umum.[4]

Wilayah

sunting

Pemrograman kokoh

sunting

Pemrograman kokoh adalah satu ragam pemrograman yang terfokus pada penanganan penghentian dan aksi tak terduga.[7] Hal ini membutuhkan kode untuk menangani aksi dan penghentian tak terduga ini secara anggun dengan menampilkan pesan eror yang akurat dan jelas. Pesan eror ini memungkinkan pengguna untuk men-debug program dengan lebih mudah.

Prinsip

sunting
Paranoia
Ketika membangun perangkat lunak, programmer berasumsi pengguna ada untuk menghancurkan kode mereka.[7] Progammer juga berasumsi kode buatan mereka akan, secara salah, bekerja atau tidak.[7]
Kebodohan
Programmer berasumsi pengguna akan mencoba masukan yang salah, palsu, dan cacat.[7] Sebagai konsekuensi, programmer harus mengembalikan dengan pesan eror yang jelas dan intuitif. Pesan eror sebaiknya menampulkan informasi seakurat mungkin tanpa menyesatkan pengguna, sehingga masalah dapat diperbaiki dengan mudah.
Penerapan berbahaya
Pengguna tidak boleh mengakses pustaka, struktur data, atau penunjuk struktur data.[7] Informasi ini harus disembunyikan, sehingga pengguna tidak memodifikasi dan mengenalkan bug ke kode secara tidak sengaja . Antarmuka yang dibangun dengan baik dapat digunakan oleh pengguna tanpa bisa menemukan celah yang mampu memodifikasi antarmuka. Ketika antarmuka yang baik diimplimentasikan, pengguna tidak perlu melakukan modifikasi. Sehingga, pengguna fokus hanya pada kodenya sendiri.
Tidak akan terjadi
Sangat sering, kode dimodifikasi dan dapat mengenalkan suatu kasus yang "tidak mungkin" terjadi, bisa saja terjadi.[7] Pengembang harus memikirkan bagaimana menangani kasus-kasus yang jarang terjadi ini dan menerapkan penanganannya.

Pemelajaran mesin kokoh

sunting

Pemelajaran mesin kokoh biasanya merujuk pada kekokohan algortime pemelajaran mesin. Untuk sebuah algoritme pemelajaran mesin dianggap kokoh, eror pada pengujian konsiten dengan eror pada pelatihan, atau performa tetap stabil ketika kebisingan ditambah pada dataset.[8] Akhir-akhir ini konsisten dengan naiknya popularitas jejaring saraf, minat terhadap kekokohannya juga meningkat. Khususnya pada kerentanannya pada serangan.

Desain jejaring kokoh

sunting

Desain jejaring kokoh adalah studi terhadap desain jejaring yang dihadapkan dengan permintaan tidak pasti dan beragam.[9] Dalam artian, kekokohan dalam desain jejaring bentuknya luas seperti kekokohan pada desain perangkat lunak karena amat banyaknya kemungkinan perubahan atau masukan.

Algoritme kokoh

sunting

Algoritme yang mentoleransi eror dalam masukan.[10]

Lihat juga

sunting

Referensi

sunting
  1. ^ "A Model-Based Approach for Robustness Testing" (PDF). Dl.ifip.org. Diakses tanggal 2016-11-13. 
  2. ^ Kesalahan pengutipan: Tag <ref> tidak sah; tidak ditemukan teks untuk ref bernama IEEE
  3. ^ Baker, Jack W.; Schubert, Matthias; Faber, Michael H. (2008). "On the assessment of robustness" (PDF). Structural Safety. 30 (3): 253–267. doi:10.1016/j.strusafe.2006.11.004. Diakses tanggal 2016-11-13. 
  4. ^ a b c d e f g Gerald Jay Sussman (January 13, 2007). "Building Robust Systems an essay" (PDF). Groups.csail.mit.edu. Diakses tanggal 2016-11-13.  Kesalahan pengutipan: Tanda <ref> tidak sah; nama "MIT" didefinisikan berulang dengan isi berbeda
  5. ^ Joseph, Joby (2009-09-21). "Importance of Making Generalized Testcases - Software Testing Club - An Online Software Testing Community". Software Testing Club. Diakses tanggal 2016-11-13. 
  6. ^ Agents on the wEb : Robust Software. "Building Robust Systems an essay" (PDF). Cse.sc.edu. Diakses tanggal 2016-11-13. 
  7. ^ a b c d e f "Robust Programming". Nob.cs.ucdavis.edu. Diakses tanggal 2016-11-13.  Kesalahan pengutipan: Tanda <ref> tidak sah; nama "robust_programming" didefinisikan berulang dengan isi berbeda
  8. ^ El Sayed Mahmoud. "What is the definition of the robustness of a machine learning algorithm?". Diakses tanggal 2016-11-13. 
  9. ^ "Robust Network Design" (PDF). Math.mit.edu. Diakses tanggal 2016-11-13. 
  10. ^ Carbin, Michael; Rinard, Martin C. (12 July 2010). "Automatically identifying critical input regions and code in applications" (PDF). Proceedings of the 19th international symposium on Software testing and analysis - ISSTA '10. ACM. hlm. 37–48. doi:10.1145/1831708.1831713. ISBN 9781605588230. 

Templat:Software qualityTemplat:Complex systems topics